Charlie, Oscar, Delta, Echo


30

Une grande partie de la communication radio est l' alphabet phonétique de l' OTAN , qui encode les lettres comme des mots pour les rendre plus faciles à comprendre sur les communications. Votre travail, si vous souhaitez l'accepter, consiste à les imprimer un par un.

Vous devez imprimer cette chaîne exacte sur stdout:

A: Alfa
B: Bravo
C: Charlie
D: Delta
E: Echo
F: Foxtrot
G: Golf
H: Hotel
I: India
J: Juliet
K: Kilo
L: Lima
M: Mike
N: November
O: Oscar
P: Papa
Q: Quebec
R: Romeo
S: Sierra
T: Tango
U: Uniform
V: Victor
W: Whiskey
X: Xray
Y: Yankee
Z: Zulu

Règles:

  • Votre programme ne prend aucune entrée
  • Les failles standard sont interdites .
  • S'il y a des éléments intégrés dans votre langue qui transforment les lettres en leurs équivalents OTAN, vous ne pouvez pas les utiliser (je vous regarde Mathematica).
  • Vous pouvez avoir des espaces de fin et une nouvelle ligne de fin.


4
Je ferme cela comme une dupe car il n'a pas de structure exploitable qui permettrait aux schémas de compression personnalisés de mieux fonctionner que la compression intégrée, et le défi cible est notre défi standard de facto pour la compression intégrée.
Mego

1
Étroitement liés. Au moins, je l'appellerais une dupe de celui-ci, mais cela permettait aux gens de choisir leurs propres mots, ce qui rendait la compression beaucoup plus possible.
Martin Ender

3
ne devrait pas être le premier A: Alpha?
SeanC

3
@SeanC: Selon wikipedia (voir le lien en question), non. C'est ATIS, pas l'OTAN. Mais alors, ça devrait être Juliett, pas Julietet X-rayau lieu de Xray.
Titus

Réponses:


18

Python 2 , 189 186 octets

i=65
for w in"lfa ravo harlie elta cho oxtrot olf otel ndia uliet ilo ima ike ovember scar apa uebec omeo ierra ango niform ictor hiskey ray ankee ulu".split():print'%c: %c'%(i,i)+w;i+=1

Essayez-le en ligne!


Précédent: (c'était cool, mais j'ai réalisé que la version plus simple pouvait être raccourcie d'un octet)

w=''
i=65
for c in"lfAravOharliEeltAchOoxtroTolFoteLndiAulieTilOimAikEovembeRscaRapAuebeComeOierrAangOniforMictoRhiskeYraYankeEulU":
 w+=c.lower()
 if'_'>c:print'%c: %c'%(i,i)+w;w='';i+=1

12

Gelée , 76 octets

“ṭṡl°ẠkWßġȮRẎ+wḋñȥạġ¢ƊḌ¬kạẠ¦WṡỊƒK⁹ç}⁶hm}Kñ£ɦ/lṇẊɠƓ}pƤ°⁸Ụ.g⁹Ġh9ṁ{f»ḲØAżj€⁾: Y

Essayez-le en ligne!

Comment?

À peu près juste les valeurs du dictionnaire et la compression. Le code entre et »est juste une valeur compressée qui formera la chaîne "Alfa Bravo Charlie Delta Echo Foxtrot Golf Hotel India Juliet Kilo Lima Mike November Oscar Papa Quebec Romeo Sierra Tango Uniform Victor Whiskey Xray Yankee Zulu"en recherchant tous les mots (avec des préfixes d'espace unique, à l'exception de "Alfa") dans le dictionnaire de Jelly (sauf pour " Xray"ce qui n'est pas dans le dictionnaire, donc la valeur de chaîne directe " X"et le dictionnaire entrée "ray"sont utilisés à la place).

Le reste du code fait le reste:

“...»ḲØAżj€⁾: Y - Main link: no arguments
“...»           - the string described above (really a list of characters)
     Ḳ          - split at spaces
      ØA        - alphabet yield - ['A','B','C', ...,'X','Y','Z']
        ż       - zip - makes a list of lists [['A'],['A','l','f','a']],[['B'],['B','r','a','v','o']], ...]
         j€     - join each with
           ⁾:   - the string ": "
              Y - join with line feeds
                - implicit print

(REMARQUE: je n'ai jamais programmé dans Jelly.) Quand je vois votre code, je me demande deux choses: 1. Vous parcourez actuellement l'alphabet et vous les joignez aux mots. Est-il possible dans Jelly d'obtenir le premier caractère d'une chaîne, donc vous bouclez sur les mots au lieu de l'alphabet et les joignez avec first_letter_of_word + ":" + word? Et 2. Vous récupérez tous les mots, y compris les espaces, puis les divisez par espace. Est-il possible de diviser-inclusivement par les majuscules majuscules? Aucune idée si ces espaces donnent même des octets supplémentaires dans leur forme compressée ou non, et s'ils peuvent être réduits avec ma description à 2.
Kevin Cruijssen

1
@KevinCruijssen (1) oui, il est possible d'utiliser la première lettre de chaque mot, mais ce ne sera pas aussi court car le rendement de l'alphabet est un atome de deux octets. (2) oui, il est possible de diviser les majuscules, mais étonnamment, la compression de la chaîne sans espaces est en fait plus longue (de nombreux mots avec des espaces en tête sont en fait dans le dictionnaire, comme tous avec majuscule).
Jonathan Allan

2
Le dictionnaire ne contient pas d'espaces de début. Cependant, lors de la décompression de plusieurs mots d'affilée, la valeur par défaut est de les séparer par des espaces; le premier mot n'aura pas d'espace, mais tous les mots suivants le seront.
Dennis

11

Rétine , 156 octets

Le nombre d'octets suppose un codage ISO 8859-1.


AlfaBravoCharlieDeltaEchoFoxtrotGolfHotelIndiaJulietKiloLimaMikeNovemberOscarPapaQuebecRomeoSierraTangoUniformVictorWhiskeyXrayYankeeZulu
[A-Z]
¶$&: $&
G`.

Essayez-le en ligne!


11

05AB1E , 102 98 octets

4 octets enregistrés grâce à Erik l'Outgolfer

”AlfaІvo¼¯¤œ®È¨›trotŠˆƒ‹Š™ÈŸt Kilo´àma—……ÍЗŽêpa¼°«Äoµ†Çâgo¸šÉµ Whiskey Xrayµ‹nkeeâ¸lu”#vy¬„: «ì,

Essayez-le en ligne!

Explication

Utilise la compression du dictionnaire pour les mots du dictionnaire 05AB1E.
Utilise la compression partielle du dictionnaire chaque fois que possible pour d'autres mots.
Mots en texte brut où aucun des deux n'est possible.

#          # split on spaces
 v         # for each word
  y        # push the word
   ¬       # get the first letter of the word
    „:     # push the string ": "
       «   # append this to the letter
        ì  # prepend the result to the word
         , # print with newline

2
Obtenez-le à 98 en utilisant cette chaîne compressée à la place: ”AlfaІvo¼¯¤œ®È¨›trotŠˆƒ‹Š™ÈŸt Kilo´àma—……ÍЗŽêpa¼°«Äoµ†Çâgo¸šÉµ Whiskey Xrayµ‹nkeeâ¸lu”.
Erik the Outgolfer

@EriktheOutgolfer: Merci! J'étais sûr d'avoir cherché paet lidans le dictionnaire mais j'ai dû les manquer. Je n'ai pas considéré yaet zucomme des mots :)
Emigna

6

Ruby, 169 caractères

(Très basé sur Jonathan Allan de Python 2 solution. Si vous aimez l'idée, s'il vous plaît Upvote la réponse originale.)

i=?@
"LfaRavoHarlieEltaChoOxtrotOlfOtelNdiaUlietIloImaIkeOvemberScarApaUebecOmeoIerraAngoNiformIctorHiskeyRayAnkeeUlu".scan(/.[a-z]+/){|w|puts i.succ!+": "+i+w.downcase}

Exemple d'exécution:

bash-4.3$ ruby -e 'i=?@;"LfaRavoHarlieEltaChoOxtrotOlfOtelNdiaUlietIloImaIkeOvemberScarApaUebecOmeoIerraAngoNiformIctorHiskeyRayAnkeeUlu".scan(/.[a-z]+/){|w|puts i.succ!+": "+i+w.downcase}' | head
A: Alfa
B: Bravo
C: Charlie
D: Delta
E: Echo
F: Foxtrot
G: Golf
H: Hotel
I: India
J: Juliet

6

Java 7, 242 225 222 217 octets

void d(){char c=65;for(String s:"lpha ravo harlie elta cho oxtrot olf otel ndia uliet ilo ima ike ovember scar apa uebec omeo ierra ango niform ictor hiskey ray ankee ulu".split(" "))System.out.println(c+": "+c+++s);}

Explication:

void d(){                          // Method
  char c = 65;                     //  Starting character 'A'
  for(String s : "lpha ravo harlie elta cho oxtrot olf otel ndia uliet ilo ima ike ovember scar apa uebec omeo ierra ango niform ictor hiskey ray ankee ulu"
      .split(" "))                 //  Loop over the word-parts
    System.out.println(            //   Print line with:
      c                            //    The current character
      + ": "                       //    + ": "
      + c++ + s                    //    + the current character + word-part (and raise the character afterwards)
    );                             //   End of print line
                                   //  End of loop (implicit / single-line body)
}                                  // End of method

Code de test:

Essayez-le ici.

class M{
  static void d(){char c=65;for(String s:"lpha ravo harlie elta cho oxtrot olf otel ndia uliet ilo ima ike ovember scar apa uebec omeo ierra ango niform ictor hiskey ray ankee ulu".split(" "))System.out.println(c+": "+c+++s);}

  public static void main(String[] a){
    d();
  }
}

Devrait fonctionner avec Java 5 et toutes les versions ultérieures.
Holger

5

Octave, 215 210 209 octets

Enregistré 5 octets grâce à Luis Mendo. J'ai sauvé 4 octets grâce à Luis Mendo, mais changer l'approche m'aide à en sauver un de plus

fprintf('%s: %s%s\n',[k=num2cell(65:90);k;regexp('lfaBravoCharlieDeltaEchoFoxtrotGolfHotelIndiaJulietKiloLimaMikeNovemberOscarPapaQuebecRomeoSierraTangoUniformVictorWhiskeyXrayYankeeZulu','[A-Z]','split')]{:})

Essayez-le en ligne!

Si je me débarrassais des espaces, j'économiserais 25 octets, mais je devrais alors utiliser une expression régulière. Le regex lui-même coûterait pas mal d'octets, et il supprimerait également la majuscule de tous les mots, me laissant avec les mots lfa, ravoetc. Je devrais donc concaténer les nouvelles chaînes avec les caractères principaux. Tout cela coûte des octets.

Ancienne explication:

fprintf('%s: %s\n',      % Print a string with the format "str: str\n"
num2cell(65:90)          % Create a cell array with the numbers 65 - 90, one in each cell
strsplit('Alfa ...       % Split the string on the default delimiter: space
[num2cell();strsplit()]  % Concatenate cell arrays, leaving us with
                         % {'A',    'B'
                         %  'Alfa', 'Bravo'}
[...]{:}                 % Convert the cell array to a comma-delimited vector
                         % 'A', 'Alfa', 'B', 'Bravo' ...

Merci! C'était un peu plus compliqué! et trois octets de plus ...
Stewie Griffin

Ah, oui, ce 'split'serait plus long ici
Luis Mendo

'split'était plus courte: 209 :)
Stewie Griffin

Je vois! Bien joué!
Luis Mendo

Vous pouvez diviser les espaces et économiser 5 octets supplémentaires
Luis Mendo

5

PHP, 202 227 196 187 octets

Merci à Dewi Morgan d' avoir économisé 9 octets

echo preg_replace('/([A-Z])[a-z]+/',"$1: $0\n",AlfaBravoCharlieDeltaEchoFoxtrotGolfHotelIndiaJulietKiloLimaMikeNovemberOscarPapaQuebecRomeoSierraTangoUniformVictorWhiskeyXrayYankeeZulu);

https://repl.it/GMkH/1


Versions plus anciennes

Merci à manatwork et à insertusernamehere d' avoir économisé 31 octets!

foreach(preg_split('/\B(?=[A-Z])/',AlfaBravoCharlieDeltaEchoFoxtrotGolfHotelIndiaJulietKiloLimaMikeNovemberOscarPapaQuebecRomeoSierraTangoUniformVictorWhiskeyXrayYankeeZulu)as$k)echo"$k[0]: $k\n";

https://eval.in/749541

Merci à insertusernamehere d' avoir remarqué que la sortie était incorrecte avec la version précédente.

$a=preg_split('/(?=[A-Z])/',AlfaBravoCharlieDeltaEchoFoxtrotGolfHotelIndiaJulietKiloLimaMikeNovemberOscarPapaQuebecRomeoSierraTangoUniformVictorWhiskeyXrayYankeeZulu,-1,PREG_SPLIT_NO_EMPTY);foreach($a as $k)echo "$k[0]: $k\n";

https://repl.it/GKS8/3

$a=preg_split('/(?=[A-Z])/',AlfaBravoCharlieDeltaEchoFoxtrotGolfHotelIndiaJulietKiloLimaMikeNovemberOscarPapaQuebecRomeoSierraTangoUniformVictorWhiskeyXrayYankeeZulu);foreach($a as $k)echo"$k[0]: $k\n";

https://repl.it/GKS8/2


Pourquoi variable $a? Déplacez simplement l' preg_split()appel entier dans foreachle paramètre de. Ensuite, aucun des espaces autour asne sera plus nécessaire.
manatwork

Au lieu de constante PREG_SPLIT_NO_EMPTY, mieux utiliser sa valeur: 1. Mais personnellement , je tweak plutôt l'expression régulière: /\B(?=[A-Z])/.
manatwork

1
Merci @insertusernameici je ferai cette modification maintenant :DJe m'habitue toujours au codegolf
ʰᵈˑ

Ce serait un octet plus court avec un tableau simple au lieu de preg_split.
Titus

1
10 caractères plus courts:echo preg_replace('/([A-Z])[a-z]+/',"$1 = $0\n",Alfa...Zulu);
Dewi Morgan

4

Brachylog , 178 octets

"Alfa Bravo Charlie Delta Echo Foxtrot Golf Hotel India Juliet Kilo Lima Mike November Oscar Papa Quebec Romeo Sierra Tango Uniform Victor Whiskey Xray Yankee Zulu"ṇ₁{hw": "w?ẉ}ᵐ

Essayez-le en ligne!

Explication

"…"ṇ₁               Split the string on spaces
     {         }ᵐ   Map on each word:
      hw              Write the first letter
        ": "w         Write ": "
             ?ẉ       Write the word followed by a new line

4

PHP, 188 186 180 174 octets

pas d'espaces de fuite, une nouvelle ligne de tête

<?=preg_filter("#[A-Z]#","
$0: $0",AlfaBravoCharlieDeltaEchoFoxtrotGolfHotelIndiaJulietKiloLimaMikeNovemberOscarPapaQuebecRomeoSierraTangoUniformVictorWhiskeyXrayYankeeZulu);

remplace simplement toutes les lettres majuscules de la chaîne compressée par
<newline><letter><colon><space><letter>


Cette fois, compétitif ? ;)
Christoph

-13 octets avec gzinflate-ing le résultat de gzdeflate(Alfa...Zulu).
Titus

Malheureusement, aucune nouvelle ligne de tête n'est autorisée, seule une (seule) nouvelle ligne de fin
partir du

@aross: voir le commentaire de l'OP d'hier:and for your other question, yes, but just one.
Titus

4

Assemblage x86, 512 octets

Compilé avec NASM et testé avec QEMU. Pour démarrer, vous devez mettre une signature de démarrage de 2 octets à la fin du secteur de démarrage (510 octets dans le fichier), j'ai donc perdu 317 octets en remplissant le code compilé avec des zéros. Ceci est mon premier golf, je dois donc m'excuser pour toute erreur gigantesque.

[org 7c00h]     ;So NASM can change the labels into memory locations correctly.

cld             ;Tells lodsb to look forward in memory

mov bh, 65      ;Moves the ASCII value of A into the BH register
mov si, NATO    ;Moves the first byte of NATO into the si register
call print      ;Call the 'print' subroutine

jmp $            ;Loops forever

print:
    mov ah, 0eh ;Moves the hex value 0E into the AH register. Tells interrupt 10h that we want subfucntion 0E
    lodsb       ;Load a byte of SI into AL and increments a register (DL i think) that tells it the offset to look at

    cmp al, 3   ;Compares the AL register that now has a byte from our string to ASCII value 3 (Enf Of Text)
    je R        ;If AL == 3 then jump to R

    cmp al, 0   ;Comapre AL to ASCII 0 (NULL)
    je newWord  ;If AL == 0 hump to newWord
    int 10h     ;Execute interrupt 10h Subfunction 0Eh (stored in AH register) which prints character value in AL
    jmp print   ;Jump to print

newWord:
    mov al, 10  ;Move ASCII 10 (New Line) into AL
    int 10h     ;Print character

    mov al, 13  ;Move ASCII 13 (Carriage Return) into AL
    int 10h     ;Print character

    mov al, bh  ;Move BH (which has our starting letter) into AL
    int 10h     ;Print Character

    mov al, 58  ;Move ASCII 58 (:) into AL
    int 10h     ;Print Character

    mov al, 32  ;Move ASCII 32 (Space) into AL
    int 10h     ;Print Character

    mov al, bh  ;Move BH into AL
    int 10h     ;Print Character

    inc bh      ;Increments BH by one (BH++)
    jmp print   ;Jump to print

R:
    ret         ;Returns from a subroutine

;Below defines bytes (db) of our string to print. I used 0 as word seperators and 3 to end the string.
NATO: db 0,"lfa",0,"ravo",0,"harlie",0,"elta",0,"cho",0,"oxtrot",0,"olf",0,"otel",0,"ndia",0,"uliet",0,"ilo",0,"ima",0,"ike",0,"ovember",0,"scar",0,"apa",0,"uebec",0,"omeo",0,"ierra",0,"ango",0,"niform",0,"ictor",0,"hiskey",0,"ray",0,"ankee",0,"ulu",3

times 0200h - 2 - ($ - $$) db 0 ;Zerofill the file with upto 510 bytes (This is where all my bytes are)
dw 0AA55H   ;Write the bootsignature

Sortie

C'est ce que le code ci-dessus produit. Comme vous pouvez le voir A: Alfa est manquant et c'est parce que l'invite fait 25 lignes de haut ... Sortie des codes ci-dessus

Pour prouver que j'ai imprimé A: Alfa j'ai remplacé 0,"ulu"par 32,"Z: Zulu"pour que Zulu soit un sur la même ligne que Yankee. Code modifié

J'apprécierais que quelqu'un me dise si je serais en mesure de soustraire les 317 octets de zerofill de mon code, ce serait donc 195 octets. De plus, si cela est même valable car la sortie ne tient pas sur l'écran.


4

Python 2 , 186 182 octets

print''.join('\n%s: '%c*('['>c)+c for c in'AlfaBravoCharlieDeltaEchoFoxtrotGolfHotelIndiaJulietKiloLimaMikeNovemberOscarPapaQuebecRomeoSierraTangoUniformVictorWhiskeyXrayYankeeZulu')

Essayez-le en ligne!


2
voir les commentaires sur la question: une nouvelle ligne principale est (maintenant) acceptée
Titus

Bienvenue chez PPCG! Jolies choses.
Jonathan Allan

4

C (MinGW, Clang), 218 octets

Merci à @gastropner!

i;f(){char s[]="lfa:ravo:harlie:elta:cho:oxtrot:olf:otel:ndia:uliet:ilo:ima:ike:ovember:scar:apa:uebec:omeo:ierra:ango:niform:ictor:hiskey:ray:ankee:ulu";for(i=64;++i<91;)printf("%c: %c%s\n",i,i,strtok(i^65?0:s,":"));}

Essayez-le en ligne!

C, 259 236 octets

i;f(){char*s="lfa\0ravo\0harlie\0elta\0cho\0oxtrot\0olf\0otel\0ndia\0uliet\0ilo\0ima\0ike\0ovember\0scar\0apa\0uebec\0omeo\0ierra\0ango\0niform\0ictor\0hiskey\0ray\0ankee\0ulu";for(i=64;++i<91;s+=strlen(s)+1)printf("%c: %c%s\n",i,i,s);}

Essayez-le en ligne!


Comment pourrais-je compiler cela?
Itay Grudev

1
@ItayGrudev, GCC et Clang devraient tous deux le compiler tel quel. gcc src.cou clang src.c. Voici un exemple d'exécution avec une fonction principale ajoutée afin que le code soit effectivement lié et exécuté: ideone.com/4Eowlh
chris

@chris Ensuite, au détriment de 4 octets, ne devrait pas fêtre remplacé par maindonc le code est valide, ou ai-je raté une convention de golf.
Itay Grudev

2
@ItayGrudev, D'après moi, la question ne demandait que la fonctionnalité, pas un programme complet et autonome.
chris

1
218 avec strtok () et quelques bidouilles avec la chaîne On ne i;f(){char s[]="lfa:ravo:harlie:elta:cho:oxtrot:olf:otel:ndia:uliet:ilo:ima:ike:ovember:scar:apa:uebec:omeo:ierra:ango:niform:ictor:hiskey:ray:ankee:ulu";for(i=64;++i<91;)printf("%c: %c%s\n",i,i,strtok(i^65?0:s,":"));}sait pas si cela fonctionne partout: TIO segfaults mais fonctionne au moins dans MinGW. Je ne vois pas beaucoup de raisons pour lesquelles cela ne fonctionnerait pas .
gastropner

3

Gema, 168 caractères

\A=@subst{?<J>=\?: \$0\\n;AlfaBravoCharlieDeltaEchoFoxtrotGolfHotelIndiaJulietKiloLimaMikeNovemberOscarPapaQuebecRomeoSierraTangoUniformVictorWhiskeyXrayYankeeZulu}@end

Exemple d'exécution:

bash-4.3$ gema '\A=@subst{?<J>=\?: \$0\\n;AlfaBravoCharlieDeltaEchoFoxtrotGolfHotelIndiaJulietKiloLimaMikeNovemberOscarPapaQuebecRomeoSierraTangoUniformVictorWhiskeyXrayYankeeZulu}@end' | head
A: Alfa
B: Bravo
C: Charlie
D: Delta
E: Echo
F: Foxtrot
G: Golf
H: Hotel
I: India
J: Juliet

3

Bash , 224 205 188 180 180 octets

Merci à Digital Trauma pour avoir supprimé 17 octets et à Manatwork pour 8 octets.

set {A..Z}
for i in lfa ravo harlie elta cho oxtrot olf otel ndia uliet ilo ima ike ovember scar apa uebec omeo ierra ango niform ictor hiskey ray ankee ulu;{ echo $1: $1$i;shift;}

Essayez-le en ligne!



Le tableau d'indexation aest trop long. set {A..Z};for i in lfa … ulu;{ echo $1: $1$i;shift;}
manatwork

2

Python 2 , 198 octets

for x in'Alfa Bravo Charlie Delta Echo Foxtrot Golf Hotel India Juliet Kilo Lima Mike November Oscar Papa Quebec Romeo Sierra Tango Uniform Victor Whiskey Xray Yankee Zulu'.split():print x[0]+': '+x

Essayez-le en ligne!

Pas excitant ou intelligent. Il suffit de parcourir la liste et d'imprimer la première lettre puis «:» puis le mot entier.


2

PHP, 184 octets 179 octets 178

<?=preg_filter('/(.)[a-z]+/',"$1: $0
",AlfaBravoCharlieDeltaEchoFoxtrotGolfHotelIndiaJulietKiloLimaMikeNovemberOscarPapaQuebecRomeoSierraTangoUniformVictorWhiskeyXrayYankeeZulu);

enregistré un seul octet en utilisant preg_filter au lieu de preg_replace.


Réponse originale 184 octets 179 octets

for($c=A;$s=[lfa,ravo,harlie,elta,cho,oxtrot,olf,otel,ndia,uliet,ilo,ima,ike,ovember,scar,apa,uebec,omeo,ierra,ango,niform,ictor,hiskey,ray,ankee,ulu][+$i++];$c++)echo"$c: $c$s
";

utilise le fait qu'il est trié pour générer le premier caractère à la volée.

5 octets enregistrés par @Titus.


2
Jouez votre original à 180-1 avec for($c=A;$s=[lfa,...,ulu][+$i++];$c++)echo"$c: $c$s\n";. Nice regex cependant.
Titus

@Titus J'avais en tête qu'il devait y avoir un meilleur moyen mais je suis passé à preg. Merci pour le conseil !
Christoph

2

SOGL , 91 octets

╗D↕«∙φā¡75↔TI.½!γΜΧ…¡%<F┼0h╔κy|▓@TņV≈%⁹cr_σy░mgļΕžΕ⅝ »τ{M╔|«▼↔»aΓ²⁹┘′⅓G…└g↔bFΞ‽‘θ{KUtƧ: ooo

Explication:

...‘θ{KUtƧ: ooo  that gibberish is a compressed string                 
...‘             push the compressed string of the words
    θ            split on spaces
     {           for each
      K          pop the 1st letter off & push it
       U         uppercase it
        t        output in newline a copy of the letter
         Ƨ: o    append ": "
             o   append the alphabet letter
              o  append the rest of the word

2

GNU sed , 165 octets

Ce script est basé sur la réponse Retina de Martin Ender.

s/$/AlfaBravoCharlieDeltaEchoFoxtrotGolfHotelIndiaJulietKiloLimaMikeNovemberOscarPapaQuebecRomeoSierraTangoUniformVictorWhiskeyXrayYankeeZulu/
s/[A-Z]/\n&: &/g
s/.//

Essayez-le en ligne!

Explication:

s/$/AlfaBravoCharlieDeltaEchoFoxtrotGolfHotelIndiaJulietKiloLimaMikeNovemberOscarPapaQuebecRomeoSierraTangoUniformVictorWhiskeyXrayYankeeZulu/
   # generate the alphabet words in concatenated form
s/[A-Z]/\n&: &/g
   # prepend '\nUL: ' before each upper-case letter (UL), getting the needed format
s/.//
   # delete the leading newline, plus implicit printing at the end

2

Bash , 184 octets

printf '%c: %s
' {Alfa,Bravo,Charlie,Delta,Echo,Foxtrot,Golf,Hotel,India,Juliet,Kilo,Lima,Mike,November,Oscar,Papa,Quebec,Romeo,Sierra,Tango,Uniform,Victor,Whiskey,Xray,Yankee,Zulu}{,}

Essayez-le en ligne!


+1. L' {,}astuce dans l'extension de l'accolade est un moyen très intelligent de doubler chaque membre de la liste!
Digital Trauma

2

Lua, 278 260 octets

Merci encore à Manatwork pour avoir économisé 18 octets!

function f(w)print(w.sub(w,0,1)..": "..w)end
f"Alfa"f"Bravo"f"Charlie"f"Delta"f"Echo"f"Foxtrot"f"Golf"f"Hotel"f"India"f"Juliet"f"Kilo"f"Lima"f"Mike"f"November"f"Oscar"f"Papa"f"Quebec"f"Romeo"f"Sierra"f"Tango"f"Uniform"f"Victor"f"Whiskey"f"Xray"f"Yankee"f"Zulu"

Essayez-le en ligne


Versions plus anciennes

a={"Alfa","Bravo","Charlie","Delta","Echo","Foxtrot","Golf","Hotel","India","Juliet","Kilo","Lima","Mike","November","Oscar","Papa","Quebec","Romeo","Sierra","Tango","Uniform","Victor","Whiskey","Xray","Yankee","Zulu"}
for i=1,26 do print(a[i].sub(a[i],0,1) .. ": " .. a[i]) end

https://repl.it/GK8J

La première fois que je fais Lua, je peux probablement jouer plus au golf, mais j'ai pensé que je l'ajouterais quand même.


Ma question peut devenir ennuyeuse, mais encore une fois: pourquoi variable a? ;) Vous pouvez déplacer la déclaration de tableau entière à l'intérieur du for. Et la syntaxe for.. inaide à éviter d'écrire ces index de tableau long: pastebin.com/rxck79md Chose bizarre Lua: si vous déclarez une fonction et l'appelez 26 fois «manuellement» (je veux dire, pas dans une boucle) est plus courte: pastebin. com / FMF9GmLJ
manatwork

¯\_(ツ)_/¯pour la simple raison que je n'ai jamais utilisé Lua auparavant, je suivais simplement le manuel pour essayer de le faire fonctionner, aha. Merci @manatwork pour l'info, je n'en savais rien.
ʰᵈˑ

2

Lua , 177 octets

print(("AlfaBravoCharlieDeltaEchoFoxtrotGolfHotelIndiaJulietKiloLimaMikeNovemberOscarPapaQuebecRomeoSierraTangoUniformVictorWhiskeyXrayYankeeZulu"):gsub('%u',"\n%1: %1"):sub(2))

Essayez-le en ligne!

Sans retour à la ligne, 180 octets:

io.write(("AlfaBravoCharlieDeltaEchoFoxtrotGolfHotelIndiaJulietKiloLimaMikeNovemberOscarPapaQuebecRomeoSierraTangoUniformVictorWhiskeyXrayYankeeZulu"):gsub('%u',"\n%1: %1"):sub(2))

Explication

str = "AlfaBravoCharlieDeltaEchoFoxtrotGolfHotelIndiaJulietKiloLimaMikeNovemberOscarPapaQuebecRomeoSierraTangoUniformVictorWhiskeyXrayYankeeZulu"
str = str:gsub('%u',"\n%1: %1") -- returns "\nA: Alfa...". %u matches uppercase letters, %1 returns matched letter in this case.
str = str:sub(2) -- remove added newline in the beginning
print(str) -- native print command

Il utilise la fonction de substitution string.gsub de Lua pour faire correspondre les motifs aux lettres majuscules. Les lettres sont ensuite remplacées par le format demandé (plus les lettres elles-mêmes). Des sauts de ligne sont également ajoutés sur la même passe.

La sous-fonction à la fin supprime simplement la nouvelle ligne depuis le début et fonctionne également bien pour masquer la deuxième valeur de retour de gsub, qui aurait été le nombre de remplacements.


2

PowerShell , 187185 octets

0..25|%{($a=[char]($_+65))+": $a"+(-split'lfa ravo harlie elta cho oxtrot olf otel ndia uliet ilo ima ike ovember scar apa uebec omeo ierra ango niform ictor hiskey ray ankee ulu')[$_]}

Essayez-le en ligne!

Boucles de 0à 25, chaque itération formant $ale capital correspondant char. Ensuite, la chaîne est concaténée avec : $a(c'est-à-dire la lettre espace-deux-points). Ensuite, cette chaîne est concaténée avec une chaîne qui est formée par indexation dans un tableau créé en -splittant la chaîne phonétique sur les espaces. Chacune de ces 26 chaînes est laissée sur le pipeline, et unWrite-Output se produit à la fin du programme, insérant une nouvelle ligne entre les éléments.

Enregistré deux octets grâce à @Matt.


Agréable. Supprimer le premier caractère de chaque mot ne m'est même pas venu à l'esprit. Vous pouvez couper 2 octets en faisant ceci:0..25|%{($a=[char]($_+65))+": $a"+(-split'lfa ravo harlie elta cho oxtrot olf otel ndia uliet ilo ima ike ovember scar apa uebec omeo ierra ango niform ictor hiskey ray ankee ulu')[$_]}
Matt

@Matt Oh, bien sûr, cela a du sens. Merci!
AdmBorkBork

2

C, 216 215 212 octets

i=64,l;f(){for(char*s="lfAravOharliEeltAchOoxtroTolFoteLndiAulieTilOimAikEovembeRscaRapAuebeComeOierrAangOniforMictoRhiskeYraYankeEulU";++i<91;printf("%c: %c%.*s%c\n",i,i,l,s,s[l]+32),s+=l+1)for(l=0;s[++l]>90;);}

Essayez-le en ligne!

Une version détaillée, lisible par l'homme, bien commentée et parfaitement valide (aucun avertissement du compilateur) du programme peut être trouvée ci-dessous:

#include <stdio.h>

int main() {
    // Uppercase characters designate the last character of a word
    char*s="lfAravOharliEeltAchOoxtroTolFoteLndiAulieTilOimAikEovembeRscaRapAuebeComeOierrAangOniforMictoRhiskeYraYankeEulU";

    int i = 64; // Consecutive character
    int l; // Word length

    // Loop `i` from A to Z; Shift `s` with word length
    // `s` always points to the beginning of a word
    for( ; ++i < 91; s += l + 1 ) {
        // Increment `l` until you reach the next capital letter
        for( l = 0; s[++l] > 90 ;);
        // Print the current character, the word without it's last letter
        // and the last letter lowercased
        printf( "%c: %c%.*s%c\n", i, i, l, s, s[l]+32 );
    }
}

1
Bienvenue chez PPCG! Bon premier post!
Rɪᴋᴇʀ

@ceilingcat Non seulement le char*smais aussi printfpourrait y entrer. Ainsi, vous économisez encore 3 octets - un point-virgule et 2 accolades car nous n'en avons plus besoin car il n'y a qu'une seule instruction dans son corps - l'autre forboucle.
Itay Grudev

2

JavaScript ES6, 216 187 184 184 180 174 octets

"AlfaBravoCharlieDeltaEchoFoxtrotGolfHotelIndiaJulietKiloLimaMikeNovemberOscarPapaQuebecRomeoSierraTangoUniformVictorWhiskeyXrayYankeeZulu".replace(/[A-Z]/g,`
$&: $&`).trim()

Enregistré un octet grâce à Neil. 5 octets enregistrés grâce à ETHproductions.

console.log("AlfaBravoCharlieDeltaEchoFoxtrotGolfHotelIndiaJulietKiloLimaMikeNovemberOscarPapaQuebecRomeoSierraTangoUniformVictorWhiskeyXrayYankeeZulu".replace(/[A-Z]/g,`
$&: $&`).trim());

Japt , 127 octets

`AlfaBŸvoC•r¦eDeltaE®oFoxÉ•GolfHÇUI˜iaJªietKiloL‹aMikeNovem¼rOs¯rPapaQue¼cRo´oSi€ŸTÂ
UnifŽmVÅ¡rW–skeyXŸyY„keeZªu`r"%A""
$&: $&

Essayez-le en ligne!

Enregistré 2 octets grâce à obarakon.


Je me demandais comment vous pourriez vous débarrasser de cette nouvelle ligne principale - cela aurait en fait été un octet moins cher que votre approche précédente pour ajouter manuellement A: Aà la chaîne. Mais vous pouvez toujours enregistrer un autre octet en utilisant un caractère de nouvelle ligne au lieu de \n.
Neil

Bonnes réponses. Vous pouvez également utiliser une nouvelle ligne littérale dans Japt. En outre, replace accepte une chaîne pour son deuxième argument et remplace tout $&s qu'il contient par la correspondance, vous pouvez donc faire par exemple "\n$&: $&"pour les deux langages au lieu d'utiliser des fonctions.
ETHproductions

Vous pouvez changer @"\n{X}: {X}"}dans Japt pour "\n$&: $&":-)
ETHproductions

@ETHproductions Merci pour l'aide!
Tom

Bonne réponse! Vous pouvez enregistrer quelques octets en supprimant le " xet en insérant un -xindicateur dans l'entrée. Notez que l'indicateur ajoute 1 octet au total d'octets.
Oliver

2

PHP, 175 171 164 162 octets

Remarque: ne nécessite plus de fichier compressé, utilise le codage IBM-850.

for($l=A;$c=LfaRavoHarlieEltaChoOxtrotOlfOtelNdiaUlietIloImaIkeOvemberScarApaUebecOmeoIerraAngoNiformIctorHiskeyRayAnkeeUlu[$i++];)echo$c<a?"
$l: ".$l++:"",$c|~▀;

Courez comme ceci:

php -nr 'for($l=A;$c=LfaRavoHarlieEltaChoOxtrotOlfOtelNdiaUlietIloImaIkeOvemberScarApaUebecOmeoIerraAngoNiformIctorHiskeyRayAnkeeUlu[$i++];)echo$c<a?"
$l: ".$l++:"",$c|~▀;';echo

Explication

Imprime chaque caractère individuellement (en minuscule par OU avec un espace). Si un caractère majuscule est rencontré, il imprime d'abord une chaîne de la forme "\ nA: A".

Tweaks

  • Enregistré 4 octets en utilisant une autre stratégie de compression
  • 7 octets enregistrés en utilisant un délimiteur différent (pour combiner l'affectation de $lavec le paramètre exploser) et sans empêcher une nouvelle ligne
  • Enregistré 2 octets avec une nouvelle méthode

1

Japt, 216 214 octets

`A: Alfa
B: Bvo
C: Cr¦e
D: Delta
E: E®o
F: FoxÉ
G: Golf
H: HÇU
I: Iia
J: Jªiet
K: Kilo
L: La
M: Mike
N: Novem¼r
O: Os¯r
P: Papa
Q: Que¼c
R: Ro´o
S: Si
T: TÂ
U: Unifm
V: VÅ¡r
W: Wskey
X: Xy
Y: Ykee
Z: Zªu

Explication: Il y a très probablement une bien meilleure façon de le faire, mais comme je suis nouveau, je ne le sais pas. J'ai essentiellement compressé la chaîne avec Oc "et mis cette chaîne à décompresser en utilisant Od"

Si quelqu'un veut m'aider à économiser des octets en utilisant quelque chose de différent des sauts de ligne, je serais heureux d'apprendre!

edit: Sauvegardé 2 octets en utilisant `au lieu de Od"


Utilisation Essayez-le en ligne! cela ne donne pas le résultat souhaité:/
ʰᵈˑ

@ ʰᵈˑoui ça pourrait l'être, je n'ai pas eu assez de temps pour tout vérifier avant de devoir aller travailler. Je pourrais le refaire (et mieux) après le travail.
Martijn Vissers

1
@ ʰᵈˑ La chaîne contient des caractères non imprimables qui n'apparaissent pas dans le Markdown. Essayez-le en ligne!
ETHproductions

@ETHproductions ah merci pour ça, je ne savais pas
ʰᵈˑ

1

Pyke, 89 octets

.d⻵㡺ᐒଆຳ뼙΋ÒΗ䊊繎ㅨڨǔᯍⰬᐓ❤ᄵ㤉ተ᤬䆰髨⨈性dc Fl5DhRJ": 

Ces caractères se trouvent-ils dans un jeu de caractères spécifique à un octet?
2017

TIO donne une mauvaise erreur d'évaluation et signale 161 octets dans le message. Soit Pyke doit pousser là-bas, soit quelque chose s'est mal passé avec un copier-coller ici. @ Adám si c'était 1-1, ce serait 41 octets, utf-8 serait 88, mais quelque chose semble définitivement un peu différent.
Jonathan Allan

@JonathanAllan ce devrait être UTF-8. TIO l'exécute pas en UTF-8. Je pense que le nombre d'octets peut être faux car il est mesuré en UTF-8
Blue

1

Qbasic, 383 octets

Pas impressionnant, mais pour ce que ça vaut:

dim a(1to 26)as string
a(1)="lfa
a(2)="ravo
a(3)="harlie
a(4)="elta
a(5)="cho
a(6)="oxtrot
a(7)="olf
a(8)="otel
a(9)="ndia
a(10)="uliet
a(11)="ilo
a(12)="ima
a(13)="ike
a(14)="ovember
a(15)="scar
a(16)="apa
a(17)="uebec
a(18)="omeo
a(19)="ierra
a(20)="ango
a(21)="niform
a(22)="ictor
a(23)="hiskey
a(24)="ray
a(25)="ankee
a(26)="ulu
for i=1to 26
?chr$(i+64);": ";chr$(i+64);a(i)
next

Anciennes mémoires BASIC… Ne peuvent-elles pas être stockées dans une datainstruction, puis readdans la boucle for.. next?
manatwork

@manatwork, c'est une bonne idée; Je n'y avais pas pensé!
anonymous2

Ne serait-ce pas simplement ?"A: Alfa"et ainsi de suite que 360 ​​octets?
oerkelens

@oerkelens, vous pourriez avoir raison. Je n'ai même pas envisagé la possibilité. :)
anonymous2

1

/// , 220 octets

/;/: /A;Alfa
B;Bravo
C;Charlie
D;Delta
E;Echo
F;Foxtrot
G;Golf
H;Hotel
I;India
J;Juliet
K;Kilo
L;Lima
M;Mike
N;November
O;Oscar
P;Papa
Q;Quebec
R;Romeo
S;Sierra
T;Tango
U;Uniform
V;Victor
W;Whiskey
X;Xray
Y;Yankee
Z;Zulu

Essayez-le en ligne!

-20 octets grâce à @ETHproductions.


Ce n'est pas difficile et cela économise 20 octets: essayez-le en ligne!
ETHproductions

@ETHproductions Je comprends ... pour une raison quelconque, j'y pensais trop. Je mettrai à jour la réponse.
Camarade SparklePony
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.