Charlie, Oscar, Delta, Echo


30

Una gran parte de la comunicación por radio es el alfabeto fonético de la OTAN , que codifica las letras como palabras para que sean más fáciles de entender a través de las comunicaciones. Su trabajo, si desea aceptarlo, es imprimirlos uno por uno.

Debe imprimir esta cadena exacta para 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

Reglas:

  • Su programa no tiene entrada
  • Las lagunas estándar no están permitidas .
  • Si hay algún texto incorporado en su idioma que convierte las letras en sus equivalentes de la OTAN, no puede usarlos (lo estoy mirando a usted, Mathematica).
  • Puede tener espacios finales y una nueva línea final.


44
Estoy cerrando esto como un engaño porque no tiene ninguna estructura explotable que permita que los esquemas de compresión personalizados funcionen mejor que la compresión incorporada, y el desafío objetivo es nuestro desafío estándar de facto para la compresión incorporada.
Mego

1
Estrechamente relacionada. En todo caso, lo llamaría un engaño de este, pero permitió a las personas elegir sus propias palabras, lo que realmente hizo que la compresión fuera mucho más posible.
Martin Ender

3
¿No debería ser el primero A: Alpha?
SeanC

3
@SeanC: Según wikipedia (ver enlace en cuestión), no. Eso es ATIS, no OTAN. Pero entonces, debería ser Juliett, no Juliety en X-raylugar de Xray.
Titus

Respuestas:


18

Python 2 , 189 186 bytes

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

Pruébalo en línea!


Anterior: (esto fue genial, pero me di cuenta de que la versión más simple podría acortarse por un byte)

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

12

Jalea , 76 bytes

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

Pruébalo en línea!

¿Cómo?

Prácticamente solo valores de diccionario y compresión. El código entre y »es solo un valor comprimido que formará la cadena "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"al buscar todas las palabras (con prefijos de espacio único, excepto "Alfa") en el diccionario de Jelly (excepto " Xray"que no está en el diccionario, por lo que el valor de cadena directa " X"y el diccionario la entrada "ray"se usa en su lugar).

El resto del código hace el 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: nunca programé en Jelly.) Cuando veo su código, me pregunto dos cosas: 1. Actualmente, pasa el alfabeto y se une con las palabras. ¿Es posible en Jelly obtener el primer carácter de una cadena, por lo que debe recorrer las palabras en lugar del alfabeto y unirlas con first_letter_of_word + ":" + word? Y 2. Recuperas todas las palabras, incluidos los espacios, y luego las divides por espacios. ¿Es posible una división inclusiva por las letras mayúsculas principales? No tengo idea de si estos espacios incluso dan bytes adicionales en su forma comprimida o no, y si se pueden reducir con mi descripción en 2.
Kevin Cruijssen

1
@KevinCruijssen (1) sí, es posible usar la primera letra de cada palabra, sin embargo, no será tan corta ya que el rendimiento del alfabeto es un átomo de dos bytes. (2) sí, es posible dividir en mayúsculas, pero sorprendentemente la compresión de la cadena sin espacios es en realidad más larga (muchas palabras con espacios iniciales están en el diccionario, al igual que todas estas con mayúsculas).
Jonathan Allan

2
El diccionario no contiene espacios iniciales. Sin embargo, al descomprimir varias palabras seguidas, lo predeterminado es separarlas por espacios; la primera palabra no tendrá un espacio inicial, pero todas las palabras siguientes sí.
Dennis

11

Retina , 156 bytes

El recuento de bytes asume la codificación ISO 8859-1.


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

Pruébalo en línea!


11

05AB1E , 102 98 bytes

Guardado 4 bytes gracias a Erik the Outgolfer

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

Pruébalo en línea!

Explicación

Utiliza la compresión del diccionario para las palabras del diccionario 05AB1E.
Utiliza la compresión parcial del diccionario siempre que sea posible para otras palabras.
Palabras de texto sin formato donde ninguna de las dos es posible.

#          # 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
Bajarlo a 98 el uso de esta cadena comprimida en su lugar: ”AlfaІvo¼¯¤œ®È¨›trotŠˆƒ‹Š™ÈŸt Kilo´àma—……ÍЗŽêpa¼°«Äoµ†Çâgo¸šÉµ Whiskey Xrayµ‹nkeeâ¸lu”.
Erik the Outgolfer

@EriktheOutgolfer: ¡Gracias! Estaba seguro de que busqué pay lien el diccionario, pero debo haberlos extrañado. No lo consideré yay zu, sin embargo, como palabras :)
Emigna

6

Ruby, 169 caracteres

(Fuertemente basada en Jonathan Allan 's Python 2 solución. Si te gusta la idea, por favor Upvote la respuesta original).

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

Ejecución de muestra:

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 bytes

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

Explicación:

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

Código de prueba:

Pruébalo aquí.

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

Debería funcionar con Java 5 y todas las versiones posteriores.
Holger

5

Octava, 215 210 209 bytes

Guardado 5 bytes gracias a Luis Mendo. Ahorré 4 bytes gracias a Luis Mendo, pero cambiar el enfoque me ayudó a guardar uno más

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

Pruébalo en línea!

Si me deshago de los espacios, ahorraría 25 bytes, pero luego tendría que usar una expresión regular. La expresión regular en sí misma costaría unos pocos bytes, y también eliminaría la letra mayúscula de todas las palabras, dejándome con las palabras, lfa, ravoetc. Por lo tanto, tendría que concatenar las nuevas cadenas con los caracteres principales. Todo esto cuesta bytes.

Vieja explicación:

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

¡Gracias! ¡Esto fue un poco más desordenado! , y tres bytes más ...
Stewie Griffin

Ah, sí, 'split'estaría más tiempo aquí
Luis Mendo

'split'fue más corto: 209 :)
Stewie Griffin

¡Veo! ¡Bien hecho!
Luis Mendo

Puede dividirse en espacios y ahorrar 5 bytes más
Luis Mendo

5

PHP, 202 227 196 187 bytes

Gracias a Dewi Morgan por guardar 9 bytes

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

https://repl.it/GMkH/1


versiones anteriores

¡Gracias a manatwork e insertusernamehere por guardar 31 bytes!

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

https://eval.in/749541

Gracias a insertusernamehere por notar que la salida era incorrecta con la versión anterior.

$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


¿Por qué variable $a? Simplemente mueva toda la preg_split()llamada en foreachel parámetro de. Entonces ya no asserá necesario ninguno de los espacios alrededor .
manatwork

En lugar de constante PREG_SPLIT_NO_EMPTY, utilizar mejor su valor: 1. Pero personalmente me gustaría modificar la expresión regular en su lugar: /\B(?=[A-Z])/.
manatwork

1
Gracias @insertusernamehere Haré esa edición ahora :DTodavía me estoy acostumbrando a codegolfing
ʰᵈˑ

Eso sería un byte más corto con una matriz simple en lugar de preg_split.
Tito

1
10 caracteres más cortos:echo preg_replace('/([A-Z])[a-z]+/',"$1 = $0\n",Alfa...Zulu);
Dewi Morgan

4

Brachylog , 178 bytes

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

Pruébalo en línea!

Explicación

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

sin espacios finales, una nueva línea principal

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

simplemente reemplaza todas las letras mayúsculas en la cadena comprimida con
<newline><letter><colon><space><letter>


Esta vez competitivo ? ;)
Christoph

-13 bytes con gzinflate-ing el resultado de gzdeflate(Alfa...Zulu).
Titus

Por desgracia, no se permite el salto de línea que lleva, solamente un (único) salto de línea final
aross

@aross: vea el comentario del OP de ayer:and for your other question, yes, but just one.
Titus

4

Asamblea x86, 512 bytes

Compilado con NASM y probado con QEMU. Para arrancar, debe poner una firma de arranque de 2 bytes al final del sector de arranque (510 bytes en el archivo), por lo que perdí 317 bytes llenando el código compilado con ceros. Este es mi primer golf, así que tengo que disculparme por cualquier error gigantesco.

[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

Salida

Esto es lo que genera el código anterior. Como puede ver A: falta Alfa y eso se debe a que el indicador tiene 25 líneas de alto ... Salida de códigos anteriores

Para demostrar que imprimí A: Alfa I reemplazó 0,"ulu"con el 32,"Z: Zulu"fin de que Zulu es una en la misma línea que el Yankee. Código modificado

Agradecería que alguien me dijera si podría restar los 317 bytes de zerofill de mi código para que sean 195 bytes. Además, si esto es válido porque la salida no cabe en la pantalla.


4

Python 2 , 186 182 bytes

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

Pruébalo en línea!


2
ver comentarios sobre la pregunta: una nueva línea principal es (ahora) aceptada
Titus

Bienvenido a PPCG! Lindas cosas.
Jonathan Allan

4

C (MinGW, Clang), 218 bytes

Gracias 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,":"));}

Pruébalo en línea!

C, 259 236 bytes

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

Pruébalo en línea!


¿Cómo compilaría esto?
Itay Grudev

1
@ItayGrudev, GCC y Clang deberían compilar eso tal cual. gcc src.co clang src.c. Aquí hay una muestra de ejecución con una función principal agregada para que el código realmente se vincule y ejecute: ideone.com/4Eowlh
chris

@chris Entonces, a expensas de 4 bytes, no fdebería reemplazarse por mainlo que el código es válido, o me estoy perdiendo alguna convención de golf.
Itay Grudev

2
@ItayGrudev, tal como lo veo, la pregunta solo preguntaba por la funcionalidad, no por un programa completo y autónomo.
Chris

1
218 con strtok () y algunos retoques con la cadena 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,":"));}No está claro si funciona en todas partes: TIO segfaults pero funciona en MinGW al menos. No puedo ver muchas razones por las que no funcionaría.
Gastropner

3

Gema, 168 caracteres

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

Ejecución de muestra:

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


2

Python 2 , 198 bytes

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

Pruébalo en línea!

No es emocionante ni inteligente. Simplemente recorre la lista e imprime la primera letra, luego ':' y luego la palabra completa.


2

PHP, 184 bytes 179 bytes 178

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

guardó un solo byte usando preg_filter en lugar de preg_replace.


Respuesta original 184 bytes 179 bytes

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

utiliza el hecho de que está ordenado para generar el primer personaje sobre la marcha.

5 bytes guardados por @Titus.


2
Golf su original hasta 180-1 con for($c=A;$s=[lfa,...,ulu][+$i++];$c++)echo"$c: $c$s\n";. Bonita expresión regular sin embargo.
Titus

@Titus Tenía en mente que debe haber una mejor manera, pero cambió a preg. Gracias por el consejo !
Christoph

2

SOGL , 91 bytes

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

Explicación:

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

Este guión se basa en la respuesta Retina de Martin Ender.

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

Pruébalo en línea!

Explicación:

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 bytes

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

Pruébalo en línea!


+1. ¡El {,}truco en la expansión de llaves es una forma muy inteligente de duplicar cada miembro de la lista!
Trauma digital

2

Lua, 278 260 bytes

¡Gracias de nuevo a Manatwork por guardar 18 bytes!

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"

Pruébalo en línea


versiones anteriores

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 primera vez que hago Lua, probablemente pueda jugar más al golf, pero de todos modos pensé en agregarlo como respuesta.


Mi pregunta puede volverse aburrida, pero de nuevo: ¿por qué variable a? ;) Puede mover toda la declaración de matriz dentro de for. Y el for.. insintaxis ayuda a evitar escribir esas largas índices de matriz: pastebin.com/rxck79md cosa extraña Lua: si se declara una función y llamar 26 veces “manualmente” (quiero decir, no en un bucle) es más corto: Pastebin. com / FMF9GmLJ
manatwork

¯\_(ツ)_/¯por la sencilla razón de que nunca había usado Lua antes, así que solo estaba siguiendo el manual para intentar que funcionara, jaja. Gracias @manatwork por la información, no lo sabía.
ʰᵈˑ

2

Lua , 177 bytes

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

Pruébalo en línea!

Sin nueva línea final, 180 bytes:

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

Explicación

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

Utiliza la función de sustitución string.gsub de Lua para que el patrón coincida con las letras mayúsculas. Las letras se reemplazan con el formato solicitado (más las letras en sí). Las nuevas líneas también se agregan en el mismo pase.

La subfunción al final solo recorta la nueva línea desde el principio y también funciona muy bien para ocultar el segundo valor de retorno de gsub, que habría sido la cantidad de reemplazos.


2

PowerShell , 187 185 bytes

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

Pruébalo en línea!

Bucles desde 0hasta 25, cada iteración formando $ael capital correspondiente char. Luego concatenado con cadenas : $a(es decir, la letra del espacio de dos puntos). Luego, esa cadena se concatena con una cadena que se forma indexando en una matriz creada al -splitvincular la cadena fonética en los espacios. Cada una de esas 26 cadenas se deja en la tubería, y Write-Outputsucede implícitamente al finalizar el programa, insertando una nueva línea entre los elementos.

Ahorró dos bytes gracias a @Matt.


Agradable. Eliminar el primer carácter de cada palabra ni siquiera se me ocurrió. Puede cortar 2 bytes haciendo esto: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, claro, eso tiene sentido. ¡Gracias!
AdmBorkBork

2

C, 216 215 212 bytes

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

Pruébalo en línea!

A continuación se puede encontrar una versión detallada, legible para los humanos, bien comentada y perfectamente válida (sin advertencias del compilador):

#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
Bienvenido a PPCG! Bonito primer post!
Rɪᴋᴇʀ

@ceilingcat No solo el char*ssino que también printfpodría entrar allí. Por lo tanto, guarda otros 3 bytes: un punto y coma y 2 llaves, ya que ya no los necesitamos, ya que solo hay una instrucción en su cuerpo: el otro forbucle.
Itay Grudev

2

JavaScript ES6, 216 187 184 180 174 bytes

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

Salvó un byte gracias a Neil. Guardado 5 bytes gracias a ETHproductions.

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

Japt , 127 bytes

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

Pruébalo en línea!

Guardado 2 bytes gracias a obarakon.


Me preguntaba cómo más podría deshacerse de esa nueva línea principal: en realidad, habría sido un byte más barato que su enfoque anterior para anteponer manualmente A: Ala cadena. Pero aún puede guardar otro byte utilizando un carácter literal de nueva línea en lugar de \n.
Neil

Buenas respuestas. También puede usar una nueva línea literal en Japt. Además, replace acepta una cadena para su segundo argumento y reemplaza cualquier $&s en ella con la coincidencia, por lo que puede hacer, por ejemplo, "\n$&: $&"para ambos langs en lugar de usar funciones.
ETHproductions

Puede cambiar @"\n{X}: {X}"}en Japt a solo "\n$&: $&":-)
ETHproductions

@ETHproductions ¡Gracias por la ayuda!
Tom

¡Buena respuesta! Puede guardar un par de bytes soltando " xe insertando una -xbandera en la entrada. Tenga en cuenta que la bandera agrega 1 byte al total de bytes.
Oliver

2

PHP, 175 171 164 162 bytes

Nota: ya no requiere un archivo comprimido, utiliza la codificación IBM-850.

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

Corre así:

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

Explicación

Imprime cada carácter individualmente (en minúscula por OR con un espacio). Si se encuentra un carácter en mayúscula, primero imprime una cadena de la forma "\ nA: A".

Ajustes

  • Guardado 4 bytes usando otra estrategia de compresión
  • Se guardaron 7 bytes usando un delimitador diferente (para combinar la asignación de $lcon el parámetro de explosión), y no evitando una nueva línea inicial
  • Guardado 2 bytes con un nuevo método

1

Japt, 216 214 bytes

`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

Explicación: Lo más probable es que haya una forma mucho mejor de hacerlo, pero como soy nuevo, no lo sé. Básicamente comprimí la cadena con Oc "y puse esa cadena para descomprimir usando Od"

Si alguien quiere ayudarme a guardar bytes usando algo diferente a los saltos de línea, ¡me encantaría saberlo!

editar: Guardado 2 bytes usando `en lugar de Od"


Uso Pruébelo en línea! no da el resultado deseado:/
ʰᵈˑ

@ Sí, eso podría ser, no tuve suficiente tiempo para revisar todo antes de ir a trabajar. Podría hacerlo nuevamente (y mejor) después del trabajo.
Martijn Vissers

1
@ ʰᵈˑ Hay algunos no imprimibles en la cadena que no aparecen en el Markdown. Pruébalo en línea!
ETHproductions

@ETHproductions ah gracias por eso, no lo sabía
ʰᵈˑ

1

Pyke, 89 bytes

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

¿Se encuentran estos caracteres en un conjunto de caracteres de un solo byte específico?
Adám

TIO da un error de evaluación incorrecto e informa 161 bytes en el mensaje. O Pyke necesita empujar allí o algo salió mal con copiar y pegar aquí. @ Adám si fuera 1-1 sería 41 bytes, utf-8 sería 88, pero algo definitivamente parece un poco extraño.
Jonathan Allan

@ JonathanAllan debería ser UTF-8. TIO lo ejecuta en no UTF-8. Creo que el recuento de bytes podría estar equivocado porque se mide como UTF-8
Blue

1

Qbasic, 383 bytes

No es impresionante, pero por lo que 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

Viejos recuerdos BÁSICOS ... ¿No se pueden almacenar en una datadeclaración y luego readdentro del for... nextbucle?
manatwork

@manatwork, esa es una buena idea; ¡No lo había pensado!
anonymous2

¿No sería simplemente, ?"A: Alfa"y así sucesivamente, solo 360 bytes?
Oerkelens

@oerkelens, podrías tener razón. Ni siquiera consideré la posibilidad. :)
anonymous2

1

/// , 220 bytes

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

Pruébalo en línea!

-20 bytes gracias a @ETHproductions.


No es difícil y ahorra 20 bytes: ¡ Pruébelo en línea!
ETHproductions

@ETHproductions Lo entiendo ... por alguna razón lo estaba pensando demasiado. Actualizaré la respuesta.
Camarada SparklePony
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.