Charlie, Oscar, Delta, Echo


30

Dużą część komunikacji radiowej stanowi alfabet fonetyczny NATO , który koduje litery jako słowa, aby ułatwić ich zrozumienie przez komunikatory. Twoim zadaniem, jeśli chcesz to zaakceptować, jest wydrukowanie ich jeden po drugim.

Musisz wydrukować ten dokładny ciąg na standardowe wyjście:

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

Zasady:

  • Twój program nie przyjmuje danych wejściowych
  • Standardowe luki są niedozwolone .
  • Jeśli w twoim języku są jakieś wbudowane elementy, które zmieniają litery w ekwiwalenty NATO, nie możesz ich użyć (patrzę na ciebie Mathematica).
  • Możesz mieć końcowe spacje i jedną końcową nową linię.


4
Zamykam to jako duplikat, ponieważ nie ma on żadnej możliwej do wykorzystania struktury, która pozwalałaby niestandardowym schematom kompresji działać lepiej niż wbudowana kompresja, a wyzwanie docelowe jest naszym de facto standardowym wyzwaniem dla wbudowanej kompresji.
Mego

1
Blisko związane. W ogóle nazwałbym to duplikatem tego, ale pozwoliło to ludziom na wybranie własnych słów, dzięki czemu kompresja była o wiele bardziej możliwa.
Martin Ender,

3
nie powinien być pierwszy A: Alpha?
SeanC

3
@SeanC: Według wikipedii (patrz odnośnik w pytaniu), no. To ATIS, nie NATO. Ale tak powinno być Juliett, Julieta nie X-rayzamiast Xray.
Tytus

Odpowiedzi:


18

Python 2 , 189 186 bajtów

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

Wypróbuj online!


Poprzedni: (to było fajne, ale zdałem sobie sprawę, że prostsza wersja może być krótsza o bajt)

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

12

Galaretka , 76 bajtów

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

Wypróbuj online!

W jaki sposób?

Prawie tylko wartości słownikowe i kompresja. Kod pomiędzy i »jest tylko skompresowaną wartością, która utworzy ciąg "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", wyszukując wszystkie słowa (z pojedynczymi prefiksami spacji, z wyjątkiem "Alfa") w słowniku Jelly (z wyjątkiem " Xray"których nie ma w słowniku, więc bezpośrednia wartość ciągu " X"i słownik "ray"zamiast tego używane są wpisy ).

Reszta kodu zajmuje się resztą:

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

(UWAGA: Nigdy nie programowałem w Galaretce.) Kiedy widzę twój kod, zastanawiam się nad dwiema rzeczami: 1. Obecnie przeglądasz alfabet i łączysz je ze słowami. Czy w Galaretce można uzyskać pierwszy znak ciągu, więc zamiast alfabetu zapętlamy słowa i łączymy je za pomocą first_letter_of_word + ":" + word? I 2. Pobierasz wszystkie słowa, w tym spacje, a następnie dzielisz spacją. Czy możliwe jest rozdzielenie według wiodących wielkich liter? Nie mam pojęcia, czy te przestrzenie dają nawet dodatkowe bajty w postaci skompresowanej, czy nie, i czy można je zmniejszyć za pomocą mojego opisu z 2.
Kevin Cruijssen

1
@KevinCruijssen (1) tak, można użyć pierwszej litery każdego słowa, jednak nie będzie ona tak krótka, ponieważ wydajność alfabetu jest dwubajtowym atomem. (2) tak, możliwe jest dzielenie na wielkie litery, ale nieoczekiwanie kompresja ciągu bez spacji jest w rzeczywistości dłuższa (wiele słów z wiodącymi spacjami znajduje się w słowniku, podobnie jak wszystkie z wielkimi literami).
Jonathan Allan,

2
Słownik nie zawiera wiodących spacji. Jednak podczas dekompresji wielu słów z rzędu domyślnie są one rozdzielane spacjami; pierwsze słowo nie będzie miało spacji wiodącej, ale wszystkie następne słowa będą.
Dennis

11

Siatkówka , 156 bajtów

Liczba bajtów zakłada kodowanie ISO 8859-1.


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

Wypróbuj online!


11

05AB1E , 102 98 bajtów

Zaoszczędzono 4 bajty dzięki Erikowi Outgolfer

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

Wypróbuj online!

Wyjaśnienie

Używa kompresji słownika dla słów w słowniku 05AB1E.
Używa częściowej kompresji słownika, gdy jest to możliwe dla innych słów.
Słowa w postaci zwykłego tekstu, gdy żadne z nich nie jest możliwe.

#          # 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
Dostać go w dół do 98 przy użyciu tego sprężonego ciąg zamiast: ”AlfaІvo¼¯¤œ®È¨›trotŠˆƒ‹Š™ÈŸt Kilo´àma—……ÍЗŽêpa¼°«Äoµ†Çâgo¸šÉµ Whiskey Xrayµ‹nkeeâ¸lu”.
Erik the Outgolfer

@EriktheOutgolfer: Dzięki! Byłem pewien, że szukał pai liw słowniku, ale musi je przegapić. Nie zastanawiałem się yai zujak słowa :)
Emigna

6

Ruby, 169 znaków

(Mocno oparty na Jonathan Allan „s Python 2 rozwiązania. Jeśli podoba Ci się pomysł, proszę upvote oryginalną odpowiedź.)

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

Przykładowy przebieg:

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 bajtów

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

Wyjaśnienie:

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

Kod testowy:

Wypróbuj tutaj.

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

Powinien współpracować z Javą 5 i wszystkimi kolejnymi wersjami.
Holger,

5

Oktawa, 215 210 209 bajtów

Zaoszczędź 5 bajtów dzięki Luisowi Mendo. Zaoszczędziłem 4 bajty dzięki Luisowi Mendo, ale zmiana podejścia pomaga mi uratować jeszcze jeden

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

Wypróbuj online!

Gdybym pozbył się spacji, zapisałbym 25 bajtów, ale musiałbym użyć wyrażenia regularnego. Sam regex kosztowałby sporo bajtów, a także usunąłby wielką literę wszystkich słów, pozostawiając mnie ze słowami lfa, ravoitp. W związku z tym musiałbym połączyć nowe ciągi z wiodącymi znakami. Wszystkie te koszty bajtów.

Stare wyjaśnienie:

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

Dzięki! To było trochę bałagan! i trzy bajty dłużej ...
Stewie Griffin

Ach, tak, 'split'byłoby tu dłużej
Luis Mendo

'split'był krótszy: 209 :)
Stewie Griffin

Widzę! Dobra robota!
Luis Mendo,

Możesz podzielić na spacje i zaoszczędzić 5 dodatkowych bajtów
Luis Mendo

5

PHP, 202 227 196 187 bajtów

Dzięki Dewi Morgan za oszczędność 9 bajtów

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

https://repl.it/GMkH/1


starsza wersja

Dzięki manatwork i inserttusernamethere do zaoszczędzenia 31 bajtów!

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

https://eval.in/749541

Dzięki inserttusernamehere za zauważenie, że dane wyjściowe były nieprawidłowe w poprzedniej wersji.

$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


Dlaczego zmienna $a? Wystarczy przenieść całe preg_split()wywołanie w foreachparametrze. Wówczas żadna przestrzeń dookoła asnie będzie już potrzebna.
manatwork

Zamiast stałej PREG_SPLIT_NO_EMPTY, lepsze wykorzystanie jego wartości: 1. Ale osobiście chciałbym podkręcić wyrażenie regularne zamiast: /\B(?=[A-Z])/.
manatwork

1
Dzięki @insertusernamethere zrobię teraz edycję :DNadal przyzwyczajam się do codegolfing
ʰᵈˑ

Byłby to jeden bajt krótszy z prostą tablicą zamiast preg_split.
Tytus

1
10 znaków krótszych:echo preg_replace('/([A-Z])[a-z]+/',"$1 = $0\n",Alfa...Zulu);
Dewi Morgan

4

Brachylog , 178 bajtów

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

Wypróbuj online!

Wyjaśnienie

"…"ṇ₁               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 bajtów

brak spacji końcowych, jedna wiodąca nowa linia

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

po prostu zamienia wszystkie wielkie litery w skompresowanym ciągu na
<newline><letter><colon><space><letter>


Tym razem konkurencyjny ? ;)
Christoph

-13 bajtów z gzinflate-ing wyniku gzdeflate(Alfa...Zulu).
Tytus

Niestety, żadna wiodąca nowa linia nie jest dozwolona, ​​tylko (pojedyncza) nowa linia
aross

@aross: patrz komentarz OP z wczoraj:and for your other question, yes, but just one.
Tytus

4

Zestaw x86, 512 bajtów

Skompilowany z NASM i przetestowany z QEMU. Aby uruchomić, musisz umieścić 2-bajtową sygnaturę rozruchową na końcu bootsectora (510 bajtów w pliku), więc straciłem 317 bajtów, wypełniając skompilowany kod zerami. To jest mój pierwszy golf, więc muszę przeprosić za gigantyczne błędy.

[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

Wydajność

To właśnie wyświetla powyższy kod. Jak widać A: Alfa brakuje, a to dlatego, że podpowiedź ma 25 linii wysokości ... Above codes output

Aby udowodnić, że drukowane A: Alfa Wymieniłem 0,"ulu"z32,"Z: Zulu" tak, że Zulu jest na tej samej linii co Yankee. Changed code

Byłbym wdzięczny, gdyby ktoś powiedział mi, czy będę w stanie odjąć 317 bajtów zerofill od mojego kodu, więc byłoby to 195 bajtów. Również jeśli jest to ważne, ponieważ wyjście nie zmieści się na ekranie.


4

Python 2 , 186 182 bajtów

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

Wypróbuj online!


2
patrz komentarze do pytania: jedna wiodąca nowa linia jest (teraz) zaakceptowana
Tytus

Witamy w PPCG! Niezłe rzeczy.
Jonathan Allan,

4

C (MinGW, Clang), 218 bajtów

Dzięki @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,":"));}

Wypróbuj online!

C, 259 236 bajtów

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

Wypróbuj online!


Jak mam to skompilować?
Itay Grudev

1
@ItayGrudev, GCC i Clang powinny oba kompilować tak, jak jest. gcc src.club clang src.c. Oto przykładowy przebieg z dodaną funkcją główną, dzięki czemu kod faktycznie się połączy i uruchomi: ideone.com/4Eowlh
Chris

@chris Zatem kosztem 4 bajtów nie należy fgo zastępować, mainaby kod był prawidłowy, czy też brakuje mi jakiejś konwencji golfa.
Itay Grudev

2
@ ItayGrudev, Z mojego punktu widzenia pytanie dotyczyło tylko funkcjonalności, a nie pełnego, samodzielnego programu.
Chris

1
218 z funkcją strtok () i trochę majstrowania przy ciągu Nie jest 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,":"));}jasne, czy działa wszędzie: TIO segfaultuje, ale działa przynajmniej w MinGW. Nie widzę powodu, dla którego to nie działałoby.
gastropner

3

Gema, 168 znaków

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

Przykładowy przebieg:

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 bajtów

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

Wypróbuj online!

Nie ekscytujące ani sprytne. Po prostu przegląda listę i wypisuje pierwszą literę, a następnie „:”, a następnie całe słowo.


2

PHP, 184 bajty 179 bajtów 178

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

zapisał jeden bajt za pomocą preg_filter zamiast preg_replace.


Oryginalna odpowiedź 184 bajty 179 bajtów

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

wykorzystuje fakt, że jest posortowany, aby wygenerować pierwszy znak w locie.

5 bajtów zapisanych przez @Titus.


2
Golf oryginalny dół 180-1 z for($c=A;$s=[lfa,...,ulu][+$i++];$c++)echo"$c: $c$s\n";. Ładne wyrażenie regularne.
Tytus

@Titus Miałem na myśli, że musi być lepszy sposób, ale przestawiłem się na preg. Dzięki za wskazówkę !
Christoph

2

SOGL , 91 bajtów

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

Wyjaśnienie:

...‘θ{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 bajtów

Ten skrypt jest oparty na odpowiedzi Retiny autorstwa Martina Endera.

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

Wypróbuj online!

Wyjaśnienie:

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 bajty

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

Wypróbuj online!


+1. {,}Trik w interpretacji nawiasów jest bardzo sprytny sposób, aby podwoić każdy członek listy!
Cyfrowa trauma

2

Lua, 278 260 bajtów

Jeszcze raz dziękuję Manatwork za uratowanie 18 bajtów!

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"

Wypróbuj online


starsza wersja

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

First time doing Lua, do probably can golf more, but thought I'd add it as an answer anyways.


My question may become boring, but again: Why variable a? ;) You can move the entire array declaration inside the for. And the for..in syntax helps to avoid writing those long array indices: pastebin.com/rxck79md Weird Lua thing: if you declare a function and call it 26 times “manually” (I mean, not in a loop) is shorter: pastebin.com/FMF9GmLJ
manatwork

¯\_(ツ)_/¯ for the simple reason that I never used Lua before so I was just following the manual to try make it work, aha. Thanks @manatwork for the info, I didn't know about that.
ʰᵈˑ

2

Lua, 177 bytes

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

Try it online!

Without trailing newline, 180 bytes:

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

Explanation

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

It uses Lua's string.gsub substitution function to pattern match the uppercase letters. The letters are then replaced with the requested format (plus the letters themselves). Newlines are also added on the same pass.

The sub-function at the end just trims out newline from the beginning and also works nicely to hide the second return value of gsub, which would have been the amount of replacements.


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

Try it online!

Loops from 0 to 25, each iteration forming $a of the corresponding capital char. Then string-concatenated with : $a (i.e., the colon-space-letter). Then that string is string-concatenated with an string that's formed by indexing into an array created by -splitting the phonetic string on spaces. Each of those 26 strings is left on the pipeline, and an implicit Write-Output happens at program completion, inserting a newline between elements.

Saved two bytes thanks to @Matt.


Nice. Removing the first character of each word didn't even occur to me. You can chop off 2 bytes doing this: 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 sure, that makes sense. Thanks!
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;);}

Try it online!

A detailed, human readable, well commented and perfectly valid (no compiler warnings) version of the program can be found below:

#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
Welcome to PPCG! Nice first post!
Rɪᴋᴇʀ

@ceilingcat Not only the char*s but the printf could go in there too. Thus saving another 3 bytes - a semicolon and 2 curly braces as we no longer need them since there is only one instruction in it's body - the other for loop.
Itay Grudev

2

JavaScript ES6, 216 187 184 180 174 bytes

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

Saved a byte thanks to Neil. Saved 5 bytes thanks to 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""
$&: $&

Try it online!

Saved 2 bytes thanks to obarakon.


I was wondering how else you could get rid of that leading newline - it would have actually been a byte cheaper than your previous approach to manually prepend A: A to the string. But you can still save another byte by using a literal newline character instead of \n.
Neil

Nice answers. You can use a literal newline in Japt as well. Also, replace accepts a string for its second argument and replaces any $&s in it with the match, so you can do e.g "\n$&: $&" for both langs instead of using functions.
ETHproductions

You can change @"\n{X}: {X}"} in Japt to just "\n$&: $&" :-)
ETHproductions

@ETHproductions Thanks for the help!
Tom

Nice answer! You can save a couple bytes by dropping the " x and inserting a -x flag into the input. Note that the flag adds 1 byte to the total bytes.
Oliver

2

PHP, 175 171 164 162 bytes

Note: no longer requires compressed file, uses IBM-850 encoding.

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

Run like this:

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

Explanation

Prints every character individually (lowercased by OR with a space). If an uppercase character is encountered, it first prints a string of the form "\nA: A".

Tweaks

  • Saved 4 bytes by using another compression strategy
  • Saved 7 bytes by using a different delimiter (to combine assignment of $l with explode param), and not preventing a leading newline
  • Saved 2 bytes with a new method

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

Explaination: There is most likely a much better way to do it, but since i'm new I don't know it. I basically compressed the string with Oc" and put that string to be decompressed using Od"

If someone wants to help me save bytes by using something different from line breaks, I'd be happy to learn!

edit: Saved 2 bytes using ` instead of Od"


Using Try it online! it doesn't give the desired result :/
ʰᵈˑ

@ʰᵈˑyes that could be, I didn't have enough time to check everything before I had to go to work. I might do it again (and better) after work.
Martijn Vissers

1
@ʰᵈˑ There are some unprintables in the string which don't show up in the Markdown. Try it online!
ETHproductions

@ETHproductions ah thanks for that, I didn't know
ʰᵈˑ

1

Pyke, 89 bytes

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

Do these characters happen to be in a specific single byte character set?
Adám

TIO gives a bad eval error and reports 161 bytes in the message. Either Pyke needs pushing there or something went wrong with a copy and paste here. @Adám if it was 1-1 it would be 41 bytes, utf-8 would be 88, but something definitely looks a bit off.
Jonathan Allan

@JonathanAllan it should be UTF-8. TIO runs it in not UTF-8. I think the byte-count might be wrong because it's measured as UTF-8
Blue

1

Qbasic, 383 bytes

Not impressive, but for what it's worth:

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

Old BASIC memories… Can't those be stored in a data statement then read inside the for..next loop?
manatwork

@manatwork, that's a good idea; I hadn't thought of it!
anonymous2

Wouldn't simply ?"A: Alfa" and so on be only 360 bytes?
oerkelens

@oerkelens, you could be right. I didn't even consider the possibility. :)
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

Try it online!

-20 bytes thanks to @ETHproductions.


It's not hard, and it saves 20 bytes: Try it online!
ETHproductions

@ETHproductions I get it... for some reason I was overthinking it. I will update the answer.
Comrade SparklePony
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.