Charlie, Oscar, Delta, Eco


30

Una grande parte della comunicazione radio è l' alfabeto fonetico della NATO , che codifica le lettere come parole per renderle più facili da comprendere rispetto alle comunicazioni. Il tuo lavoro, se desideri accettarlo, è di stamparli uno per uno.

È necessario stampare questa stringa esatta su 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

Regole:

  • Il tuo programma non accetta input
  • Le scappatoie standard sono vietate .
  • Se ci sono dei builtin nella tua lingua che trasformano le lettere nei loro equivelanti NATO, non puoi usarli (ti sto guardando Mathematica).
  • Potresti avere spazi finali e una nuova riga finale.


4
Sto chiudendo questo come un duplicato perché non ha alcuna struttura sfruttabile che consentirebbe agli schemi di compressione personalizzati di funzionare meglio della compressione incorporata, e la sfida del bersaglio è la nostra sfida standard di fatto per la compressione integrata.
Mego

1
Strettamente correlato. Semmai lo definirei un duplicato di questo, ma ha permesso alle persone di scegliere le proprie parole, il che ha reso la compressione molto più possibile.
Martin Ender,

3
il primo non dovrebbe essere A: Alpha?
SeanC

3
@SeanC: Secondo Wikipedia (vedi link in questione), n. Questo è ATIS, non la NATO. Ma poi dovrebbe essere Juliett, non Juliete X-rayinvece di Xray.
Titus

Risposte:


18

Python 2 , 189 186 byte

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

Provalo online!


Precedente: (è stato bello, ma ho capito che la versione più semplice poteva essere accorciata di un byte)

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

12

Gelatina , 76 byte

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

Provalo online!

Come?

Praticamente solo valori di dizionario e compressione. Il codice tra ed »è solo un valore compresso che formerà la stringa "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"cercando tutte le parole (con prefissi di spazio singolo, eccetto "Alfa") nel dizionario di Jelly (tranne per il " Xray"quale non è nel dizionario, quindi il valore di stringa diretto " X"e il dizionario "ray"invece vengono usate le voci ).

Il resto del codice fa il resto:

“...»ḲØ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

(NOTA: non ho mai programmato in Jelly.) Quando vedo il tuo codice, mi chiedo due cose: 1. Attualmente fai un giro sull'alfabeto e li unisci con le parole. In Jelly è possibile ottenere il primo carattere di una stringa, quindi cerchi le parole invece dell'alfabeto e le unisci a first_letter_of_word + ":" + word? E 2. Recuperi tutte le parole compresi gli spazi e poi dividi per spazio. È possibile dividere la divisione in base alle maiuscole? Non ho idea se questi spazi forniscano o meno byte extra nella loro forma compressa e se possano essere ridotti con la mia descrizione a 2.
Kevin Cruijssen

1
@KevinCruijssen (1) sì, è possibile utilizzare la prima lettera di ogni parola, tuttavia non sarà così breve poiché la resa in alfabeto è un atomo a due byte. (2) sì, è possibile dividere le lettere maiuscole, ma sorprendentemente la compressione della stringa senza spazi è in realtà più lunga (molte parole con spazi iniziali sono effettivamente nel dizionario, così come tutte queste con lettere maiuscole).
Jonathan Allan,

2
Il dizionario non contiene spazi iniziali. Tuttavia, quando si decomprimono più parole di fila, il valore predefinito è separarle per spazi; la prima parola non avrà uno spazio iniziale, ma tutte le parole seguenti lo faranno.
Dennis,

11

Retina , 156 byte

Il conteggio dei byte presuppone la codifica ISO 8859-1.


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

Provalo online!


11

05AB1E , 102 98 byte

Salvato 4 byte grazie a Erik the Outgolfer

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

Provalo online!

Spiegazione

Utilizza la compressione del dizionario per le parole nel dizionario 05AB1E.
Utilizza la compressione parziale del dizionario quando possibile per altre parole.
Parole in testo semplice dove nessuno dei due è possibile.

#          # 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
Scarica fino a 98 utilizzando questa stringa compressa invece: ”AlfaІvo¼¯¤œ®È¨›trotŠˆƒ‹Š™ÈŸt Kilo´àma—……ÍЗŽêpa¼°«Äoµ†Çâgo¸šÉµ Whiskey Xrayµ‹nkeeâ¸lu”.
Erik the Outgolfer

@EriktheOutgolfer: grazie! Ero sicuro di aver cercato pae linel dizionario, ma devo averli persi. Non ho considerato yae zucome parole :)
Emigna,

6

Rubino, 169 caratteri

(Fortemente basata su Jonathan Allan s' Python 2 soluzione. Se vi piace l'idea, si prega di upvote la risposta originale.)

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

Esecuzione di esempio:

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 byte

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);}

Spiegazione:

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

Codice di prova:

Provalo qui.

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();
  }
}

Dovrebbe funzionare con Java 5 e tutte le versioni successive.
Holger

5

Ottava, 215 210 209 byte

5 byte salvati grazie a Luis Mendo. Ho salvato 4 byte grazie a Luis Mendo, ma cambiare l'approccio mi aiuta a salvarne uno in più

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

Provalo online!

Se mi liberassi degli spazi, risparmierei 25 byte, ma poi dovrei usare una regex. La stessa regex costerebbe un bel po 'di byte e rimuoverebbe anche la lettera maiuscola di tutte le parole, lasciandomi con le parole lfa, ravoecc. Dovrei quindi concatenare le nuove stringhe con i personaggi principali. Tutto questo costa byte.

Vecchia spiegazione:

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' ...


Ah, sì, 'split'sarebbe più lungo qui
Luis Mendo il

'split'era più corto: 209 :)
Stewie Griffin il

Vedo! Molto bene!
Luis Mendo,

Puoi dividere gli spazi e salvare altri 5 byte
Luis Mendo il

5

PHP, 202 227 196 187 byte

Grazie a Dewi Morgan per aver salvato 9 byte

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

https://repl.it/GMkH/1


Versioni precedenti

Grazie a manatwork e insertusernamehere per il salvataggio di 31 byte!

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

https://eval.in/749541

Grazie a insertusernamehere per aver notato che l'output era errato con la versione precedente.

$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


Perché variabile $a? Basta spostare l'intera preg_split()chiamata nel foreachparametro di. Quindi nessuno degli spazi intorno assarà più necessario.
arte

Invece di costante PREG_SPLIT_NO_EMPTY, meglio usare il suo valore: 1. Ma personalmente avrei modificare l'espressione regolare invece: /\B(?=[A-Z])/.
arte

1
Grazie @inserireusernamehere farò quella modifica ora :DMi
sto

Sarebbe più corto di un byte con un array semplice anziché preg_split.
Tito

1
10 caratteri più brevi:echo preg_replace('/([A-Z])[a-z]+/',"$1 = $0\n",Alfa...Zulu);
Dewi Morgan

4

Brachylog , 178 byte

"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?ẉ}ᵐ

Provalo online!

Spiegazione

"…"ṇ₁               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 byte

nessuno spazio finale, una nuova riga principale

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

sostituisce semplicemente tutte le lettere maiuscole nella stringa compressa con
<newline><letter><colon><space><letter>


Questa volta competitivo ? ;)
Christoph

-13 byte con gzinflate-ing il risultato di gzdeflate(Alfa...Zulu).
Tito

Sfortunatamente, non è consentita nessuna nuova riga iniziale, ma solo una (singola) riga finale
trascorsa

@aross: vedi il commento dell'OP di ieri:and for your other question, yes, but just one.
Titus

4

x86 Assembly, 512 byte

Compilato con NASM e testato con QEMU. Per avviare è necessario inserire una firma di avvio a 2 byte alla fine del bootector (510 byte nel file), quindi ho perso 317 byte riempiendo il codice compilato con zeri. Questo è il mio primo golf, quindi devo scusarmi per eventuali errori giganteschi.

[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

Produzione

Questo è ciò che genera il codice sopra. Come puoi vedere A: Alfa è mancante e questo perché il prompt è alto 25 righe ... Uscita sopra i codici

Per dimostrare che ho stampato A: Alfa ho sostituito 0,"ulu"con in 32,"Z: Zulu"modo che Zulu sia uno sulla stessa linea di Yankee. Codice modificato

Gradirei se qualcuno mi dicesse che sarei in grado di sottrarre i 317 byte di zerofill dal mio codice in modo che siano 195 byte. Anche se questo è valido anche perché l'output non si adatta allo schermo.


4

Python 2 , 186 182 byte

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

Provalo online!


2
vedere i commenti sulla domanda: una nuova linea principale è (ora) accettata
Tito

Benvenuti in PPCG! Bella roba.
Jonathan Allan,

4

C (MinGW, Clang), 218 byte

Grazie a @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,":"));}

Provalo online!

C, 259 236 byte

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);}

Provalo online!


Come lo compilerei?
Itay Grudev l'

1
@ItayGrudev, GCC e Clang dovrebbero entrambi compilare così com'è. gcc src.coppure clang src.c. Ecco un esempio di esecuzione con l'aggiunta di una funzione principale in modo che il codice si collegherà e verrà eseguito: ideone.com/4Eowlh
chris

@chris Quindi a spese di 4 byte, non dovrebbe fessere sostituito con mainquindi il codice è valido, o mi manca qualche convenzione di golf.
Itay Grudev l'

2
@ItayGrudev, Per come la vedo io, la domanda ha posto solo la funzionalità, non un programma completo e autonomo.
chris

1
218 con strtok () e alcuni giocherellano con la stringa 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,":"));}Unclear se funziona ovunque: TIO segfaults ma funziona almeno in MinGW. Non riesco a vedere molte delle ragioni per cui non funzionerebbe.
Gastropner

3

Gema, 168 caratteri

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

Esecuzione di esempio:

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 byte

Grazie a Digital Trauma per la rimozione di 17 byte e manatwork per 8 byte.

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;}

Provalo online!



L'array di indicizzazione aè troppo lungo. set {A..Z};for i in lfa … ulu;{ echo $1: $1$i;shift;}
arte

2

Python 2 , 198 byte

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

Provalo online!

Non eccitante o intelligente. Passa semplicemente attraverso l'elenco e stampa la prima lettera, quindi ":" quindi l'intera parola.


2

PHP, 184 byte 179 byte 178

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

salvato un singolo byte usando preg_filter invece di preg_replace.


Risposta originale 184 byte 179 byte

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
";

usa il fatto che è ordinato per generare al volo il primo carattere.

5 byte salvati da @Titus.


2
Golf il tuo originale fino a 180-1 con for($c=A;$s=[lfa,...,ulu][+$i++];$c++)echo"$c: $c$s\n";. Bella regex però.
Tito

@Titus Avevo in mente che doveva esserci un modo migliore ma sono passato a preg. Grazie per il consiglio !
Christoph

2

SOGL , 91 byte

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

Spiegazione:

...‘θ{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 byte

Questo script si basa sulla risposta Retina di Martin Ender.

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

Provalo online!

Spiegazione:

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 byte

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}{,}

Provalo online!


+1. Il {,}trucco dell'espansione del controvento è un modo molto intelligente per raddoppiare ogni membro della lista!
Trauma digitale

2

Lua, 278 260 byte

Grazie ancora a Manatwork per aver salvato 18 byte!

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"

Provalo online


Versioni precedenti

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 prima volta che faccio Lua, probabilmente posso giocare a golf di più, ma ho pensato di aggiungerlo comunque come risposta.


La mia domanda può diventare noiosa, ma ancora: perché variabile a? ;) È possibile spostare l'intera dichiarazione dell'array all'interno di for. E la sintassi for.. inaiuta a evitare di scrivere quei lunghi indici di array: pastebin.com/rxck79md Cosa strana di Lua: se dichiari una funzione e la chiami 26 volte "manualmente" (intendo, non in un ciclo) è più breve: pastebin. com / FMF9GmLJ
arte

¯\_(ツ)_/¯per la semplice ragione che non avevo mai usato Lua prima, quindi stavo solo seguendo il manuale per provare a farlo funzionare, aha. Grazie @manatwork per le informazioni, non lo sapevo.
ʰᵈˑ

2

Lua , 177 byte

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

Provalo online!

Senza trascinamento newline, 180 byte:

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

Spiegazione

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

Utilizza la funzione di sostituzione string.gsub di Lua per eseguire il pattern match con le lettere maiuscole. Le lettere vengono quindi sostituite con il formato richiesto (più le lettere stesse). Anche le nuove righe vengono aggiunte sullo stesso passaggio.

La sottofunzione alla fine ritaglia semplicemente la nuova riga dall'inizio e funziona anche bene per nascondere il secondo valore di ritorno di gsub, che sarebbe stata la quantità di sostituzioni.


2

PowerShell , 187 185 byte

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')[$_]}

Provalo online!

Passa da 0a 25, ogni formazione $adi iterazione del capitale corrispondente char. Quindi concatenato con stringhe : $a(ad esempio, la lettera spazio-due punti). Quindi quella stringa viene concatenata con una stringa che si forma indicizzando in una matrice creata -splitmettendo la stringa fonetica su spazi. Ognuna di quelle 26 stringhe viene lasciata sulla pipeline e una implicitaWrite-Output al completamento del programma si verifica , inserendo una nuova riga tra gli elementi.

Due byte salvati grazie a @Matt.


Bello. Rimuovere il primo carattere di ogni parola non mi è nemmeno venuto in mente. Puoi tagliare 2 byte in questo modo: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 certo, ha senso. Grazie!
AdmBorkBork

2

C, 216 215 212 byte

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;);}

Provalo online!

Di seguito è disponibile una versione dettagliata, leggibile, ben commentata e perfettamente valida (nessun avviso del compilatore):

#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
Benvenuti in PPCG! Bel primo post!
Rɪᴋᴇʀ

@ceilingcat Non solo il char*sma printfpotrebbe entrare anche lì. Salvando così altri 3 byte - un punto e virgola e 2 parentesi graffe poiché non ne abbiamo più bisogno poiché c'è solo un'istruzione nel suo corpo - l'altro forciclo.
Itay Grudev,

2

JavaScript ES6, 216 187 184 180 174 byte

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

Salvataggio di un byte grazie a Neil. Risparmiato 5 byte grazie a ETHproductions.

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

Japt , 127 byte

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

Provalo online!

Salvato 2 byte grazie a obarakon.


Mi chiedevo in quale altro modo si potesse sbarazzarsi di quella nuova linea principale: sarebbe stato effettivamente un byte più economico del tuo precedente approccio per anteporre manualmente A: Aalla stringa. Ma puoi comunque salvare un altro byte usando un carattere letterale di nuova riga anziché \n.
Neil

Belle risposte. Puoi usare una nuova riga letterale anche in Japt. Inoltre, sostituisce accetta una stringa per il suo secondo argomento e sostituisce qualsiasi $&s in esso con la corrispondenza, quindi puoi fare ad esempio "\n$&: $&"per entrambi i lang invece di usare le funzioni.
ETHproductions

Puoi cambiare @"\n{X}: {X}"}in Japt solo a "\n$&: $&":-)
ETHproductions

@ETHproductions Grazie per l'aiuto!
Tom

Bella risposta! È possibile salvare un paio di byte rilasciando " xe inserendo un -xflag nell'input. Si noti che il flag aggiunge 1 byte ai byte totali.
Oliver

2

PHP, 175 171 164 162 byte

Nota: non richiede più file compresso, utilizza la codifica IBM-850.

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

Esegui in questo modo:

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

Spiegazione

Stampa ogni personaggio singolarmente (in minuscolo da OR con uno spazio). Se viene rilevato un carattere maiuscolo, viene prima stampata una stringa del formato "\ nA: A".

Ritocchi

  • Salvato 4 byte utilizzando un'altra strategia di compressione
  • Salvato 7 byte utilizzando un delimitatore diverso (per combinare l'assegnazione di $lcon il parametro esplodi) e non impedire una nuova riga iniziale
  • Salvato 2 byte con un nuovo metodo

1

Japt, 216 214 byte

`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

Spiegazione: Probabilmente esiste un modo molto migliore per farlo, ma dato che sono nuovo non lo so. Ho praticamente compresso la stringa con Oc "e ho messo quella stringa da decomprimere usando Od"

Se qualcuno vuole aiutarmi a salvare byte usando qualcosa di diverso dalle interruzioni di riga, sarei felice di imparare!

modifica: 2 byte salvati usando `invece di Od"


Usalo Provalo online! non dà il risultato desiderato:/
ʰᵈˑ

@Sì che potrebbe essere, non ho avuto abbastanza tempo per controllare tutto prima di andare al lavoro. Potrei farlo di nuovo (e meglio) dopo il lavoro.
Martijn Vissers

1
@ ʰᵈˑ Ci sono alcuni non stampabili nella stringa che non compaiono nel Markdown. Provalo online!
ETHproductions

@ETHproductions ah grazie per quello, non lo sapevo
ʰᵈˑ

1

Pyke, 89 byte

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

Questi personaggi si trovano in uno specifico set di caratteri a byte singolo?
Adám

TIO genera un errore di valutazione errato e segnala 161 byte nel messaggio. O Pyke ha bisogno di spingere lì o qualcosa è andato storto con una copia e incolla qui. @Adám se fosse 1-1 sarebbe 41 byte, utf-8 sarebbe 88, ma qualcosa sembra decisamente un po 'fuori.
Jonathan Allan,

@JonathanAllan dovrebbe essere UTF-8. TIO non lo esegue in UTF-8. Penso che il conteggio dei byte potrebbe essere sbagliato perché è misurato come UTF-8
Blue

1

Qbasic, 383 byte

Non impressionante, ma per quello che vale:

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

Vecchi ricordi BASIC ... Non possono essere archiviati in dataun'istruzione quindi readall'interno del ciclo for... next?
arte

@manatwork, è una buona idea; Non ci avevo pensato!
anonymous2

Semplicemente ?"A: Alfa"e così via non sarebbero solo 360 byte?
oerkelens,

@oerkelens, potresti avere ragione. Non ho nemmeno considerato la possibilità. :)
anonymous2

1

/// , 220 byte

/;/: /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

Provalo online!

-20 byte grazie a @ETHproductions.


Non è difficile e consente di risparmiare 20 byte: provalo online!
ETHproductions

@ETHproductions Ho capito ... per qualche ragione lo stavo pensando troppo. Aggiornerò la risposta.
Compagno SparklePony
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.