Napisz funkcję / metodę, która pobiera ciąg znaków i literuje to słowo za pomocą alfabetu fonetycznego NATO. Titlecase opcjonalny

17

Napisz program, który pobiera ciąg znaków i literuje to słowo za pomocą alfabetu fonetycznego NATO.

Mapowanie wygląda następująco:

'A' -> 'Alfa'
'B' -> 'Bravo'
'C' -> 'Charlie'
'D' -> 'Delta'
'E' -> 'Echo'
'F' -> 'Foxtrot'
'G' -> 'Golf'
'H' -> 'Hotel'
'I' -> 'India'
'J' -> 'Juliett'
'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'

Przykład:

'Hello World' -> ['Hotel', 'Echo', 'Lima', 'Lima', 'Oscar', 'Whiskey', 'Oscar', 'Romeo', 'Lima', 'Delta']

Dane wejściowe mogą być dowolnym ciągiem, ale zawsze będą się składać tylko z liter i spacji. Wielkość liter nie ma znaczenia w danych wyjściowych, ale dane wejściowe mogą zawierać litery pisane wielkimi i małymi literami lub oba. Spacje powinny być ignorowane w danych wyjściowych.

Możesz generować w dowolnym rozsądnym formacie, ale musi to być ograniczony zestaw znaków wywoławczych NATO.

Jrod
źródło
4
Witamy w PPCG! To pytanie zostało już zadane. Ale prawdopodobnie i tak zostałby zamknięty z kilku innych powodów: 1) O ile nie ma ku temu dobrego powodu, zwykle nie odpowiada się na pytanie w określony sposób (funkcja) w określonym języku. 2) Wyzwania muszą być samodzielne: należy wyjaśnić, czym dokładnie jest alfabet fonetyczny NATO w treści pytania. 3) W obecnej formie wygląda jak zadanie domowe. Jeśli tak, możesz znaleźć pomoc dotyczącą przepełnienia stosu, pod warunkiem, że podasz to, co zrobiłeś do tej pory i wyjaśnisz, gdzie utknąłeś.
Arnauld
4
Opowiadałbym się za ponownym otwarciem, jeśli punkty podniesione powyżej przez @Arnauld zostały rozwiązane, ponieważ nie ma ograniczenia źródła ani sprawdzania poprawności powiązanego wyzwania.
Kudłaty
1
Zredagowałem to, aby można je było ponownie otworzyć, ponieważ nie ma ograniczeń co do postaci. Czy wszystkie moje zmiany są odpowiednie? Szczególnie sprawdź ograniczenia wejściowe.
Rɪᴋᴇʀ
10
To jest alfabet ICAO; alfabet NATO używa Alphai Julietzamiast tego.
Neil
2
Whiskyw tym przykładzie nie jest równe Whiskeyodwzorowaniu.
mazzy

Odpowiedzi:

13

sfk , 78 59 57 bajtów

+filt
+spell -nato
+xed _ph_f_ _et_ett_ _-__ "*: [keep]""

Wypróbuj online!

Wystarczy użyć odpowiedniego narzędzia.

Wyjście to fonetyka oddzielona jedną lub więcej spacjami.

Obrzydliwe
źródło
6

Zestaw IBM PC DOS 8088, 208 204 197 194 192 bajty

be80 00ad 8ac8 ac51 24df 8ad0 2c40 3c1b 7321 8af0 b024 b18b 9090 bf37 01f2 aefe
ce75 fab4 02cd 218b d7b4 09cd 21b2 20b4 02cd 2159 e2d0 c324 6c66 6124 7261 766f
2468 6172 6c69 6524 656c 7461 2463 686f 246f 7874 726f 7424 6f6c 6624 6f74 656c
246e 6469 6124 756c 6965 7474 2469 6c6f 2469 6d61 2469 6b65 246f 7665 6d62 6572
2473 6361 7224 6170 6124 7565 6265 6324 6f6d 656f 2469 6572 7261 2461 6e67 6f24
6e69 666f 726d 2469 6374 6f72 2468 6973 6b65 7924 7261 7924 616e 6b65 6524 756c
7524

Pobierz plik wykonywalny DOS NATO.COM:

Wypróbuj offline! (w DOSBox itp.)

        TITLE NATO3
_TEXT   SEGMENT
        ASSUME CS:_TEXT,DS:_TEXT,ES:_TEXT,SS:_TEXT
        ORG     100H

START:
    MOV  SI, 80H            ; point SI to DOS PSP
    LODSW                   ; load arg length into AL, advance SI to 82H
    MOV  CL, AL             ; set up loop counter
SEARCH:
    LODSB                   ; load next char from DS:SI into AL, advance SI 
    PUSH CX                 ; save outer loop position
    AND  AL, 0DFH           ; uppercase the input letter
    MOV  DL, AL             ; save for output
    SUB  AL, 'A'-1          ; convert letter to one-based index (A=1, Z=26, etc)
    CMP  AL, 27             ; if greater than 26, not a valid char
    JNC  NOTFOUND           ; if not, move to next
    MOV  DH, AL             ; DH is loop counter
    MOV  AL, '$'            ; search for string delimiter
    MOV  CL, LNATO          ; repeat search through length of word data
    MOV  DI, OFFSET NATO    ; re-point SCASB to beginning of word data
SCANLOOP:
    REPNZ SCASB             ; search until delimiter in AL is found ES:DI, advance DI
    DEC  DH                 ; delimiter found, decrement counter
    JNZ  SCANLOOP           ; if counter reached 0, index has been found
    MOV  AH, 02H            ; display first char
    INT  21H
    MOV  DX, DI             ; put found string memory location to DX for display
    MOV  AH, 09H            ; display string function
    INT  21H
    MOV  DL, ' '            ; display a space between words
    MOV  AH, 02H
    INT  21H
NOTFOUND:
    POP  CX                 ; restore outer loop counter
    LOOP SEARCH             ; move to next char in input
    RET
NATO    DB  '$lfa$ravo$harlie$elta$cho$oxtrot$olf$otel$ndia$'
        DB  'uliett$ilo$ima$ike$ovember$scar$apa$uebec$omeo$'
        DB  'ierra$ango$niform$ictor$hiskey$ray$ankee$ulu$'
LNATO   EQU $-NATO

_TEXT ENDS
END START

Wyjście testowe:

A>NATO abc aaa
Alfa Bravo Charlie Alfa Alfa Alfa 
A>NATO abc DefG1HIJ
Alfa Bravo Charlie Delta Echo Foxtrot Golf Hotel India Juliett 
A>NATO Alfa Bravo!
Alfa Lima Foxtrot Alfa Bravo Romeo Alfa Victor Oscar 

Zaktualizowano, aby usunąć pierwszy znak z tablicy listy słów (chociaż zapisuje tylko 11 bajtów z powodu dodatkowego wymaganego kodu).

640 KB
źródło
Możesz zapisać 2 bajty, zastanawiając się, jak wyłączyć dopełnianie NOP lub używając innej wersji, która tego nie robi. Użyłem ML.EXE i nie wypełnia. Możesz zaoszczędzić kolejne 18 bajtów, usuwając $separatory i oddzielając słowa, zamiast tego umieszczając wielką literę w pierwszej kolejności (a przez pierwszą mam na myśli drugą, ponieważ już pominąłeś pierwszą). (Wyższy poziom kompresji może być prawdopodobnie osiągnięty przed długość kodu potrzebne do dekompresji to przewyższają korzyści z kompresją, ale prosty schemat kapitałowych-literowym ograniczników byłby dobry początek.)
Deadcode
1
Korzystając z MASM 5, wypróbowałem wszystkie odmiany ALIGN i NAWET oraz zmieniając instrukcje i bez względu na to, co naprawdę lubi padać przed REPNZ. Separator $ był tanim sposobem na ograniczenie zarówno tablicy, jak i separatora ciągów, dzięki czemu mogłem używać INT 21H: 09 i nie musiałem pisać struktury pętli, aby wypisać go char za pomocą char. Podoba mi się twój pomysł używania wielkich liter jako ograniczników, coś w stylu „LfaRavoHarlie”, tak? Zgodnie ze specyfikacją wielkość liter nie ma znaczenia, więc wyjście ALfa lub CHarlie byłoby całkowicie dopuszczalne. Świetne pomysły! Będę musiał to zakodować i przekonać się, jaki jest rozmiar różnic.
640 KB
Najwyraźniej MASM 9 był ostatnią wersją, która miała opcję / AT (dla .MODEL TINY), aw moim teście z twoim kodem nie wypełniła NOP. Dane ML.EXE /?wyjściowe mówią Microsoft (R) Macro Assembler Version 9.00.30729.01. Tak, „LfaRavoHarlie” jest dokładnie tym, co miałem na myśli. :) Zrobiłbym „OR AL, 20H”, aby znowu był mały na wyjściu, ale to zależy od ciebie.
Deadcode
BTW, dlaczego nie dołączyć nagłówka i stopki do niezmontowanego widoku? MASM 9 nie skompilowałbym go bez tego. Mam na myśli .MODEL TINY .CODE ORG 100H START:na początku i END STARTna końcu. Czy nie potrzebujesz tego, aby skompilować go z MASM 5?
Deadcode
Zwykle nie dołączam kafelka MASM, ponieważ nie jest on częścią złożonego kodu (możesz uzyskać ten sam bajtowy kod na wiele sposobów, w zależności od wersji MASM i wszystkich). Używam „starej” składni, ponieważ lubię ją testować w MASM 1.1. :) Wydaje mi się, że znalazłem problem NOP i prawdopodobnie jest to błąd MASM, który istniał co najmniej między 1.1 a 5. Jeśli umieścisz LNATO EQU powyżej kodu lub kodu stałego 08BH na miejscu, nie wstawi on dwóch NOP. Jednak ponieważ LNATO EQU znajduje się poniżej kodu, istnieje różnica w tym, co robi między pass1 i pass2, pozostawiając tam miejsce. Dziwaczny!
640 KB
5

05AB1E , 102 96 95 bajtów

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

Dane wyjściowe to lista słów NATO z tytułami.

Wypróbuj online.

Wyjaśnienie:

á              # Only leave the letters of the (implicit) input
 l             # Convert it to lowercase
  S            # Split it to a list of characters
   A           # Push the alphabet
    ”...”      # Push all the NATO words in titlecase and space-delimited
         #     # Split the string by spaces
              # Transliterate; map all letters in the lowercase input with this
               # list at the same indices (and output the resulting list implicitly)

Zobacz moją wskazówkę 05AB1E (sekcja Jak korzystać ze słownika? ), Aby zrozumieć, dlaczego tak ”AlfaІvo¼¯¤œ®È¨›trotŠˆƒ‹Š™ÈŸtt Kilo´àma—……ÍЗŽêpa¼°«Äoµ†Çâgo¸šÉµ Whiskey Xrayµ‹nkeeâ¸lu”jest "Alfa Bravo Charlie Delta Echo Foxtrot Golf Hotel India Juliett Kilo Lima Mike November Oscar Papa Quebec Romeo Sierra Tango Uniform Victor Whiskey Xray Yankee Zulu". Credit tego sprężonego słowniku ciąg idzie @ErikTheGolfer w tym komentarzu (z dodatkowym tdla Juliettzamiast Juliet).

Kevin Cruijssen
źródło
Może być w stanie użyć interpolacji i kompresji, aby obniżyć liczbę bajtów nieistniejących słów (kłus, tt Kilo, Whisky Xray). Półprzykładowy przykład: wypróbuj online! Zrobiłem to wcześniej, ale było to dla DUŻEJ liczby słów, dzięki czemu zaoszczędziłby co najmniej 1 bajt, gdybyś spędził czas.
Magic Octopus Urn
4

Galaretka ,  80  77 bajtów

ḟ⁶O%32ị“¡µQỤ(cɠṘwlṁ;Ɗœ<NẸ½ṗN¬ṙẋxḶb¤*O~ƃ¹.ß8Ḋ¡tJ|Ḷ<İİḂ^1eȷjċbY9TYƭ¹Ẉ¥¤K0¹f»Ḳ¤

Wypróbuj online! (Stopka formatuje listę, łącząc ją spacjami, aby uniknąć niejawnego rozbijania wydruku po uruchomieniu jako pełny program)

Jonathan Allan
źródło
3

JavaScript (ES6), 181 189 bajtów

s=>s.match(/\w/g).map(c=>'IndiAlfABravOscaRomeOQuebeCharliEchODeltAGolFoxtroTangOHoteLimAJulietTKilOZulUniforMikENovembeRPapASierrAVictoRWhiskeYankeEXraY'.match(c.toUpperCase()+'.*?[A-Z]'))

Ponieważ wielkość wyjściowa nie ma znaczenia, możemy zapisać bajty, uruchamiając słowa razem:

... GolFoxtroTangO ...

Wypróbuj online!

Rick Hitchcock
źródło
2

Python 3 , 250 191 bajtów

-47 bajtów dzięki @Jo King, -2 więcej dzięki @Jonathan Allen

Przechodzi przez wszystkie znaki spacji na wejściu i dla każdego z nich wybiera odpowiednią frazę dla litery, którą można nieco zmniejszyć, ponieważ pierwszą literą każdej frazy jest sam znak. Dzieli ciąg zamiast zapisywać frazy jako tablicę, aby zapisać bajty od niepotrzebnych znaków 's i ,s.

lambda s:[c+"lfa ravo harlie elta cho oxtrot olf otel ndia uliett ilo ima ike ovember scar apa uebec omeo ierra ango niform ictor hiskey ray ankee ulu".split()[ord(c)%32-1]for c in s if' '<c]

Wypróbuj online!

Oryginalne rozwiązanie

lambda s:[c+['lfa','ravo','harlie','elta','cho','oxtrot','olf','otel','ndia','uliett','ilo','ima','ike','ovember','scar','apa','uebec','omeo','ierra','ango','niform','ictor','hiskey','ray','ankee','ulu'][ord(c)-65]for c in s.replace(" ", "").upper()]

Wypróbuj online!

Neil A.
źródło
191 zif' '<c
Jonathan Allan
2

Czerwony , 210 193 bajtów

func[s][foreach c trim/all s[prin c print pick[:lfa:ravo:harlie:elta:cho:oxtrot:olf:otel:ndia:uliett:ilo:ima:ike:ovember:scar:apa:uebec:omeo:ierra:ango:niform:ictor:hiskey:ray:ankee:ulu]c% 32]]

Wypróbuj online!

Wyjaśnienie:

foreachprzechodzi przez ciąg po usunięciu wszystkich białych znaków trim/all. prinwypisuje znak (bez nowej linii). printwypisuje symbol, picked z listy get-word! s (symbole), używając znaku zamapowanego na zakres 1..26 jako indeksu.

Galen Iwanow
źródło
2

Czysty , 218 bajtów

import StdEnv
$s=[takeWhile((<=)c)(dropWhile((<)c)['ZuluYankeeXrayWhiskeyVictorUniformTangoSierraRomeoQuebecPapaOscarNovemberMikeLimaKiloJuliettIndiaHotelGolfFoxtrotEchoDeltaCharlieBravoAlfa'])\\c<-map toUpper s|c>' ']

Wypróbuj online!

Obrzydliwe
źródło
2

C # (interaktywny kompilator Visual C #) , 218 bajtów

n=>n.ToUpper().Select(x=>"AlfaBravoCharlieDeltaEchoFoxtrotGolfHotelIndiaJuliettKiloLimaMikeNovemberOscarPapaQuebecRomeoSierraTangoUniformVictorWhiskeyXrayYankeeZulu".SkipWhile(k=>x!=k).TakeWhile((k,l)=>l<1|k>96&k<123))

Wypróbuj online!

Alternatywna wersja wykorzystująca Split (), 194 bajty

n=>n.ToUpper().Select(x=>x>64?x+"lfa,ravo,harlie,elta,cho,oxtrot,olf,otel,ndia,uliett,ilo,ima,ike,ovember,scar,apa,uebec,omeo,ierra,ango,niform,ictor,hiskey,ray,ankee,ulu".Split(',')[x%65]:x+"")

Wypróbuj online!

Wcielenie ignorancji
źródło
2

C ++, 229 228 bajtów

[](auto s){for(;auto t=*s?"LfaRavoHarlieEltaChoOxtrotOlfOtelNdiaUliettIloImaIkeOvemberScarApaUebecOmeoIerraAngoNiformIctorHiskeyRayAnkeeUlu":0;s++)if(int c=*s&31){for(cout<<*s;*t>96||--c;t++);for(;cout<<*t,*++t>96;);cout<<' ';}}

Wypróbuj online!

Nie golfowany:

[](const char *s)
{
    const char *table = "LfaRavoHarlieEltaChoOxtrotOlfOtelNdiaUliettIloImaIkeOvemberScarApaUebecOmeoIerraAngoNiformIctorHiskeyRayAnkeeUlu";
    for (; *s; s++)
    {
        char c = *s & 0x1F;
        if (c != 0)
        {
            cout << *s;
            const char *w = table;
            while (*w >= 'a' || --c)
                w++;
            do
                cout << *w;
            while (*++w >= 'a');
            cout << ' ';
        }
    }
}

Wynik:

TAngo hOtel eCho qUebec uNiform iNdia cHarlie kIlo bRavo rOmeo oScar wHiskey nOvember fOxtrot oScar xRay jUliett uNiform mIke pApa eCho dElta oScar vIctor eCho rOmeo tAngo hOtel eCho lIma aLfa zUlu yAnkee dElta oScar gOlf 
JUliett aLfa cHarlie kIlo dElta aLfa wHiskey sIerra lIma oScar vIctor eCho mIke yAnkee bRavo iNdia gOlf sIerra pApa hOtel iNdia nOvember xRay oScar fOxtrot qUebec uNiform aLfa rOmeo tAngo zUlu 

Wersja czystych wielkich liter ( 234 bajty ):

[](auto s){for(;auto t=*s?"LfaRavoHarlieEltaChoOxtrotOlfOtelNdiaUliettIloImaIkeOvemberScarApaUebecOmeoIerraAngoNiformIctorHiskeyRayAnkeeUlu":0;s++)if(int c=*s&31){for(cout<<*s;*t>96||--c;t++);for(;putchar(*t|32),*++t>96;);cout<<' ';}}

Wypróbuj online!

Wynik:

Tango hotel echo quebec uniform india charlie kilo bravo romeo oscar whiskey november foxtrot oscar xray juliett uniform mike papa echo delta oscar victor echo romeo tango hotel echo lima alfa zulu yankee delta oscar golf 
Juliett alfa charlie kilo delta alfa whiskey sierra lima oscar victor echo mike yankee bravo india golf sierra papa hotel india november xray oscar foxtrot quebec uniform alfa romeo tango zulu 
Deadcode
źródło
2

Język maszynowy IBM PC DOS 8088, 165 bajtów

Jest to bezpośrednio oparte na odpowiedzi gwaugh , ale ogoliłem 26 bajtów, pomijając $ograniczniki z tabeli słów „NATO” i dodatkowy 1 bajt, nie pomijając pierwszego znaku ciągu parametrów wiersza poleceń (który zawsze będzie albo/ albo i tak i tak zostanie zignorowany przez program). Program ma dokładnie taką samą długość, aby móc przetwarzać tabelę w tym formacie (w którym słowa są rozdzielane tylko wielkimi literami, które służą podwójnemu celowi, będąc jednocześnie drugą literą każdego słowa) lub 2 bajtami dłużej, jeśli wielkość liter jest taka sama jak poprzednio. Tabela jest o 26 bajtów mniejsza.

W poniższym zrzucie programu, konkatenacja przez :służy do wyświetlenia każdej sekwencji kolejnych bajtów odpowiadającej instrukcji:

0000  BE:80:00 AC 91 AC 24:DF 8A:D0 2C:40 3C:1A 77:21  ······$···,@<·w!
0010  8A:F0 B4:02 CD:21 56 BE:34:01 AC A8:20 75:FB FE: ·····!V·4··· u··
0020 :CE 75:F7 8A:D0 CD:21 AC A8:20 75:F7 B2:20 CD:21  ·u····!·· u·· ·!
0030  5E E2:D2 C3 4C 66 61 52 61 76 6F 48 61 72 6C 69  ^···LfaRavoHarli
0040  65 45 6C 74 61 43 68 6F 4F 78 74 72 6F 74 4F 6C  eEltaChoOxtrotOl
0050  66 4F 74 65 6C 4E 64 69 61 55 6C 69 65 74 74 49  fOtelNdiaUliettI
0060  6C 6F 49 6D 61 49 6B 65 4F 76 65 6D 62 65 72 53  loImaIkeOvemberS
0070  63 61 72 41 70 61 55 65 62 65 63 4F 6D 65 6F 49  carApaUebecOmeoI
0080  65 72 72 61 41 6E 67 6F 4E 69 66 6F 72 6D 49 63  erraAngoNiformIc
0090  74 6F 72 48 69 73 6B 65 79 52 61 79 41 6E 6B 65  torHiskeyRayAnke
00A0  65 55 6C 75 40                                   eUlu@

Pobierz plik wykonywalny DOS NATO.COM:
Z nieskorygowaną wielkimi literami (165 bajtów)
Z czystą wielkimi literami (167 bajtów)
Wersja , w której pierwsza litera każdego słowa jest (167 bajtów)

Niezmontowane:

    .MODEL TINY            ; .COM program, maximum addressing space 65536 bytes
    .CODE
    ORG 100h
start:
    MOV  SI, 80h           ; Point SI to DOS PSP (Program Segment Prefix).
    LODSB                  ; Load command-line parameter (input string) length
                           ; into AL; assume AX=0 before this, which is true
                           ; in most versions of DOS; advance SI to first char
                           ; of parameter, which is either '/' or ' '.
    XCHG CX, AX            ; Set up loop counter with length of input string.
search:
    LODSB                  ; Load next character from [SI] into AL; advance SI.
    AND  AL, NOT ('A' XOR 'a')  ; Make this character uppercase.
    MOV  DL, AL            ; Save character for output. Move this before the
                           ; AND instruction to capitalize the first letter of
                           ; each word identically to how it is in the input.
    SUB  AL, 'A'-1         ; convert letter to one-based index (A=1, Z=26, etc)
    CMP  AL, 'Z'-'A'+1     ; Is this an alphabetical character?
    JA   notFound          ; If not, move to next character.
    MOV  DH, AL            ; Set up DH as our word-finding loop counter.
    MOV  AH, 02h           ; AH=02h, INT 21h: Write character to STDOUT
    INT  21h               ; Display first character of this NATO word.
    PUSH SI                ; Save our current position in the input string.
    MOV  SI, OFFSET table  ; Point LODSB to beginning of word data.
scanLoop:                  ; Find the word in the table corresponding to our
                           ; current character.
    LODSB                  ; Load next character from [SI] into AL; advance SI.
    TEST AL, 'A' XOR 'a'   ; Is this character uppercase?
    JNZ  scanLoop          ; If not, move to next character.
    DEC  DH                ; Delimiter (uppercase) found; decrement counter.
    JNZ  scanLoop          ; Keep looping until counter reaches 0.
    OR   AL, 'A' XOR 'a'   ; Make this character lowercase. This is not
                           ; required by the challenge's specification, and
                           ; this instruction can be removed.
wordLoop:
    MOV  DL, AL            ; Display next character from NATO word.
    INT  21h               ; (We still have AH=02h from before.)
    LODSB
    TEST AL, 'A' XOR 'a'   ; Is this character lowercase?
    JNZ  wordLoop          ; If so, continue the loop.
    MOV  DL, ' '           ; Display a space between words.
    INT  21h               ; (We still have AH=02h from before.)
    POP  SI                ; Restore our current position in the input string.
notFound:
    LOOP search            ; Move to next character in input string.
    RET
table   DB  'LfaRavoHarlieEltaChoOxtrotOlfOtelNdia'
        DB  'UliettIloImaIkeOvemberScarApaUebecOmeo'
        DB  'IerraAngoNiformIctorHiskeyRayAnkeeUlu'
        DB  '@'            ; Terminate the list to make sure that uninitialized
                           ; memory doesn't cause a problem.
    END start

Przykładowe dane wejściowe:

>NATO The quick brown fox jumped over the lazy dog.
>NATO Jackdaws love my big sphinx of quartz.

Wyjście (wersja 165-bajtowa):

TAngo hOtel eCho qUebec uNiform iNdia cHarlie kIlo bRavo rOmeo oScar wHiskey nOvember fOxtrot oScar xRay jUliett uNiform mIke pApa eCho dElta oScar vIctor eCho rOmeo tAngo hOtel eCho lIma aLfa zUlu yAnkee dElta oScar gOlf 
JUliett aLfa cHarlie kIlo dElta aLfa wHiskey sIerra lIma oScar vIctor eCho mIke yAnkee bRavo iNdia gOlf sIerra pApa hOtel iNdia nOvember xRay oScar fOxtrot qUebec uNiform aLfa rOmeo tAngo zUlu 

Wersja czystych wielkich liter (167 bajtów):

Tango Hotel Echo Quebec Uniform India Charlie Kilo Bravo Romeo Oscar Whiskey November Foxtrot Oscar Xray Juliett Uniform Mike Papa Echo Delta Oscar Victor Echo Romeo Tango Hotel Echo Lima Alfa Zulu Yankee Delta Oscar Golf 
Juliett Alfa Charlie Kilo Delta Alfa Whiskey Sierra Lima Oscar Victor Echo Mike Yankee Bravo India Golf Sierra Papa Hotel India November Xray Oscar Foxtrot Quebec Uniform Alfa Romeo Tango Zulu 

Wersja czystych wielkich liter z taką samą wielkością jak dane wejściowe (167 bajtów):

Tango hotel echo quebec uniform india charlie kilo bravo romeo oscar whiskey november foxtrot oscar xray juliett uniform mike papa echo delta oscar victor echo romeo tango hotel echo lima alfa zulu yankee delta oscar golf 
Juliett alfa charlie kilo delta alfa whiskey sierra lima oscar victor echo mike yankee bravo india golf sierra papa hotel india november xray oscar foxtrot quebec uniform alfa romeo tango zulu 
Deadcode
źródło
1
Dobra robota!
640 KB
1

Węgiel drzewny , 99 bajtów

EΦ↥S№αι⁺ι§⪪”&⌊%w⁸D⦃σν:…ⅈ$|@H¦χT⸿]ECrΣM^¿←←&⁵↘⁼s(JF8X´▷⧴⎚P0V÷AWχπ¶⌈≧\"dJ^ZU{M≔⁴|<¶⁹B⊞⊟1LPH⪪∨Y3`”j⌕αι

Wypróbuj online! Link jest do pełnej wersji kodu. Wyjścia w odpowiednim przypadku. Wyjaśnienie:

   S                    Input string
  ↥                     Uppercased
 Φ                      Filtered where
     α                  Predefined uppercase alphabet
    №                   Contains
      ι                 Current character
E                       Mapped over characters
        ι               Current character
       ⁺                Concatenated with
           ”...”        Compressed string
          ⪪             Split on
                j       Literal string `j`
         §              Indexed by
                 ⌕      Index of
                   ι    Current character
                  α     In uppercase alphabet
                        Implicitly print each word on its own line
Neil
źródło
1

Perl 6 , 176 170 166 bajtów

*.comb>>.&{$_~:128[q`>$RbD[Orlo~Q1nX,OVq8x9'6%h'1.I$83ua7	vsD=s-{W}{>iQ:Js37py)hNN,i{Pt\~#f4<>`.ords].base(35).split('J')[.ord%32]}.words

Wypróbuj online!

Wydruki pisane wielkimi literami z pierwszą literą w oryginalnej kopercie. Kompresuje ciąg, który zapisuje tylko 6 bajtów na prostszym zwykłym tekście:

*.comb>>.&{$_~ <lfa ravo harlie elta cho oxtrot olf otel ndia uliett ilo ima ike ovember scar apa uebec omeo ierra ango niform ictor hiskey ray ankee ulu>[.ord%32-1]if ' 'ne$_}

Wypróbuj online!

Wyjaśnienie:

*.comb>>.&{                 }         # Map each letter to
           $_~                        # The letter plus
              <...>[.ord%32]          # The letter indexed into the list of words
                             .words   # And remove the extra spaces
Jo King
źródło
1

Japt, 108 106 bajtów

¸®¬Ë+u cg`ovem¼rws¯r°pawue¼cÙ o±ØǯfmØtØkeyÙ°nkeewªuwlfaæ1ÃÉr¦e³ltawÖoxÉwolfÙ*lÙAawªieâ-¹µ±ke`qw

Spróbuj

Backticks zawiera skompresowany ciąg:

ovemberwscarwapawuebecwomeowierrawangowniformwictorwhiskeywraywankeewuluwlfawravowharlieweltawchowoxtrotwolfwotelwndiawuliettwilowimawike
Kudłaty
źródło
1

PowerShell , 187 183 bajtów

$args|% t*y|%{'AlfaBravoCharlieDeltaEchoFoxtrotGolfHotelIndiaJuliettKiloLimaMikeNovemberOscarPapaQuebecRomeoSierraTangoUniformVictorWhiskeyXrayYankeeZulu'-csplit'(?=[A-Z])'-like"$_*"}

Wypróbuj online!

Skrypt testowy:

$f = {
$args|% t*y|%{'AlfaBravoCharlieDeltaEchoFoxtrotGolfHotelIndiaJuliettKiloLimaMikeNovemberOscarPapaQuebecRomeoSierraTangoUniformVictorWhiskeyXrayYankeeZulu'-csplit'(?=[A-Z])'-like"$_*"}
}

@(
    ,('Hello World', 'Hotel', 'Echo', 'Lima', 'Lima', 'Oscar', 'Whiskey', 'Oscar', 'Romeo', 'Lima', 'Delta')
) | % {
    $s,$expected = $_
    $result = &$f $s
    "$result"-eq"$expected"
    "$result"
}

Wynik:

True
Hotel Echo Lima Lima Oscar Whiskey Oscar Romeo Lima Delta
mazzy
źródło
1

PHP ,209 205 206 bajtów

while($l=$argv[1][$x++])echo$l!=' '?$l.preg_split('/([A-Z][a-z]*)/',ALfaRavoHarlieEltaChoOxtrotOlfOtelNdiaUliettIloImaIkeOvemberScarApaUebecOmeoIerraAngoNiformIctorHiskeyRayAnkeeUlu,0,3)[31&ord($l)].' ':'';

Wypróbuj online!

Wynik:

"Hello World" => "HOtel eCho lIma lIma oScar WHiskey oScar rOmeo lIma dElta"

Lub 195 bajtów, ze spacjami nie do końca usuniętymi:

while($l=$argv[1][$x++])echo$l,preg_split('/([A-Z][a-z]*)/',ALfaRavoHarlieEltaChoOxtrotOlfOtelNdiaUliettIloImaIkeOvemberScarApaUebecOmeoIerraAngoNiformIctorHiskeyRayAnkeeUlu,0,3)[31&ord($l)].' ';

Wypróbuj online!

Wynik:

"Hello World" => "HOtel eCho lIma lIma oScar   WHiskey oScar rOmeo lIma dElta"
640 KB
źródło
Fajnie, ale twoja najnowsza edycja wprowadziła błąd off-by-one. Jednym ze sposobów, aby to naprawić, jest [31&ord($l)]powrót do niego [31&ord($l)-1], co kosztuje dwa bajty, ale można to również naprawić w jednym bajcie, całkowicie wypisując ALfa.
Deadcode
Ups! Dobry chwyt i bardzo sprytna naprawa. Thx @deadcode!
640 KB
0

TSQL, 313 bajtów

Gra w golfa:

DECLARE @ varchar(max)='Hello World' 

DECLARE @x INT=len(@)WHILE @x>0SELECT @=stuff(@,@x,1,substring(@,@x,1)+choose(ascii(substring(@,@x,1))%32,'lfa','eta','harlie','elta','cho','oxtrot','olf','otel','ndia','uliett','ilo','ima','ike','ovember','scar','apa','uebec','omeo','ierra','ango','niform','ictor','hiskey','ray','ankee','ulu')+';'),@x-=1PRINT @

Nie golfowany:

DECLARE @ varchar(max)='Hello World' 

DECLARE @x INT=len(@)
WHILE @x>0
  SELECT @=stuff(@,@x,1,substring(@,@x,1)+choose(ascii(substring(@,@x,1))%32,
    'lfa','eta','harlie','elta','cho','oxtrot','olf','otel','ndia','uliett','ilo',
    'ima','ike','ovember','scar','apa','uebec','omeo','ierra','ango','niform',
    'ictor','hiskey','ray','ankee','ulu')+';'),
    @x-=1

PRINT @

Wypróbuj to

Wyjście kończy się średnikiem

t-clausen.dk
źródło
0

PowerShell, 228 225 bajtów

-3 bajty dzięki @mazzy

"$args".ToLower()-replace' '|% T*y|%{$a+=$_+((-split"lfa ravo harlie elta cho oxtrot olf otel ndia uliett ilo ima ike ovember scar apa uebec omeo ierra ango niform ictor hiskey ray ankee ulu")[('a'..'z').IndexOf($_)])+' '};$a

Wypróbuj online!

Jest to prawdopodobnie najbrzydszy fragment kodu, jaki kiedykolwiek napisałem. Ponadto z pewnością może to być znacznie krótsze. W mojej obronie wciąż dochodzę do siebie po egzaminach końcowych.

Gabriel Mills
źródło
-split'lfa ravo ...'jest krótszy, ponieważ „\ s” jest domyślnie
dzielony
0

PHP, 212 bajtów

while($c=ord($argn[$i++]))echo[_,Alpha,Bravo,Charlie,Delta,"Echo",Foxtrot,Golf,Hotel,India,Juliett,Kilo,Lima,Mike,November,Oscar,Papa,Quebec,Romeo,Sierra,Tango,Uniform,Victor,Whiskey,Xray,Yankee,Zulu][$c&31]," ";

Uruchom jako potok z -nRlub spróbuj online .

Daje ostrzeżenia w PHP 7.2; wstaw elementy tablicy w cudzysłów, aby to naprawić.

Wydrukuje znak podkreślenia dla spacji.

Tytus
źródło
0

C (clang) , 309 bajtów

#define L toupper(v[1][i])
main(j,v)char**v;{int i=0;char*k[]={"lfa","ravo","harlie","elta","cho","oxtrot","olf","otel","ndia","uliett","ilo","ima","ike","ovember","scar","apa","uebec","omeo","ierra","ango","niform","ictor","hiskey","ray","ankee","ulu"};for(;L;i++)j=L-65,j>=0&j<=26?printf("%c%s ",L,k[j]):0;}

Wypróbuj online!

kamienny pajęczak
źródło
294 bajty
pułap pułapu
0

JavaScript, 179 bajtów

s=>s.match(/\w/g).map(c=>c+'LfaRavoHarlieEltaChoOxtrotOlfOtelNdiaUliettIloImaIkeOvemberScarApaUebecOmeoIerraAngoNiformIctorHiskeyRayAnkeeUlu'.match(/.[a-z]+/g)[parseInt(c,36)-10])

Wypróbuj online!

Yair Rand
źródło