Escreva uma função / método que use uma string e soletre essa palavra usando o Alfabeto Fonético da OTAN. Titlecase opcional

17

Escreva um programa que use uma sequência e soletre essa palavra usando o Alfabeto Fonético da OTAN.

O mapeamento é o seguinte:

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

Exemplo:

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

A entrada pode ser qualquer sequência, mas sempre será composta apenas de letras e espaços. Letras maiúsculas e minúsculas são irrelevantes na saída, mas a entrada pode conter letras maiúsculas, minúsculas ou ambas. Os espaços devem ser ignorados na saída.

Você pode produzir em qualquer formato razoável, mas deve ser um conjunto delimitado de indicativos de chamada da OTAN.

Jrod
fonte
4
Bem-vindo ao PPCG! Esta pergunta já foi feita. Mas provavelmente teria sido fechado de qualquer maneira por várias outras razões: 1) A menos que haja uma boa razão para fazê-lo, geralmente é desaprovado pedir para responder de uma maneira específica (uma função) em um idioma específico. 2) Os desafios devem ser independentes: você deve explicar o que exatamente o alfabeto fonético da OTAN está dentro do corpo da pergunta. 3) Na sua forma atual, parece uma tarefa de casa. Se for, você pode encontrar ajuda no Stack Overflow, desde que inclua o que fez até agora e explique onde está preso.
Arnauld
4
Eu seria a favor de reabrir isso se os pontos levantados por @Arnauld acima fossem abordados, pois ele não tem restrição de origem ou validação de entrada do desafio vinculado.
Shaggy
1
Eu editei isso para que possa ser reaberto, pois ele não tem restrição de caracteres. Todas as minhas alterações são apropriadas? Verifique especialmente as restrições de entrada.
Rɪᴋᴇʀ
10
Este é o alfabeto da ICAO; o alfabeto da OTAN usa Alphae em Julietvez disso.
Neil
2
Whiskyno exemplo não é igual a Whiskeyno mapeamento.
mazzy 27/01

Respostas:

13

sfk , 78 59 57 bytes

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

Experimente online!

Basta usar a ferramenta certa.

Saída é a fonética separada por um ou mais espaços.

Furioso
fonte
6

Montagem IBM PC DOS 8088, 208 204 197 194 192 bytes

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

Faça o download do executável DOS NATO.COM:

Experimente offline! (no DOSBox, etc.)

        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

Saída de teste:

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 

Atualizado para remover o primeiro caractere da matriz da lista de palavras (embora apenas salve 11 bytes devido ao código adicional necessário).

640KB
fonte
Você pode economizar 2 bytes, descobrindo como desativar o preenchimento NOP ou usando uma versão diferente que não o faça. Eu usei o ML.EXE e ele não funciona. Você pode salvar outros 18 bytes, removendo os $delimitadores e separando as palavras, colocando em maiúscula a primeira letra (e primeiro quero dizer o segundo, porque você já deixou a primeira). (Um maior nível de compressão provavelmente poderia ser alcançado antes do comprimento do código necessário para descomprimir seria superam a vantagem da compressão, mas o esquema simples de capitais letras-delimitadores seria um bom começo.)
Deadcode
1
Usando o MASM 5, tentei todas as variações de ALIGN e EVEN, movendo as instruções e não importa o que realmente goste de colocar antes do REPNZ. O delimitador $ era uma maneira barata de delimitar um array e um delimitador de strings para que eu pudesse usar o INT 21H: 09 e não precisar escrever uma estrutura de loop para imprimi-lo char por char. Gosto da sua ideia de usar maiúsculas como delimitadores, algo como 'LfaRavoHarlie', sim? De acordo com as especificações, o case é irrelevante, portanto a saída de ALfa ou CHarlie seria perfeitamente aceitável. Ótimas ideias! Será necessário codificá-lo e ver qual é a diferença de tamanho.
640KB 26/01
Aparentemente, o MASM 9 foi a última versão que tinha uma opção / AT (para .MODEL TINY) e, no meu teste com o seu código, ele não executou o preenchimento NOP. A ML.EXE /?saída diz Microsoft (R) Macro Assembler Version 9.00.30729.01. Sim, 'LfaRavoHarlie' é exatamente o que eu quis dizer. :) Eu faria o "OR AL, 20H" para torná-lo em minúsculas novamente na saída, mas depende de você.
Deadcode
BTW, por que não incluir o cabeçalho e rodapé em sua exibição desmontada? O MASM 9 não o compilaria para mim sem isso. Quero dizer, .MODEL TINY .CODE ORG 100H START:no começo e END STARTno fim. Você não precisava disso para compilá-lo com o MASM 5?
Deadcode
Normalmente, não incluo o clichê do MASM porque ele não faz parte do código montado (você pode obter o mesmo código de bytes de várias maneiras, dependendo da sua versão do MASM e tudo). Eu uso a sintaxe "antiga" porque gosto de testá-la no MASM 1.1. :) Acredito que encontrei o problema do NOP e provavelmente é um bug do MASM que existia pelo menos entre 1.1 e 5. Se você colocar o LNATO EQU acima do código ou do código rígido 08BH no local, ele não inserirá os dois NOPs. No entanto, como o LNATO EQU está abaixo do código, há uma diferença no que ele faz entre pass1 e pass2, deixando esse espaço lá. Bizarro!
640KB 26/01
5

05AB1E , 102 96 95 bytes

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

O resultado é uma lista de palavras da OTAN denominadas em titulo.

Experimente online.

Explicação:

á              # 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)

Veja esta dica 05AB1E meu (seção Como usar o dicionário? ) Para entender por que ”AlfaІvo¼¯¤œ®È¨›trotŠˆƒ‹Š™ÈŸtt Kilo´àma—……ÍЗŽêpa¼°«Äoµ†Çâgo¸šÉµ Whiskey Xrayµ‹nkeeâ¸lu”é "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". O crédito dessa string de dicionário compactada vai para @ErikTheGolfer neste comentário (com um acréscimo tpara em Juliettvez de Juliet).

Kevin Cruijssen
fonte
Pode usar interpolação e compactação para diminuir a contagem de bytes das palavras inexistentes (trot, tt Kilo, Whiskey Xray). Exemplo mestiço: Experimente online! Eu já fiz isso antes, mas foi para uma GRANDE quantidade de palavras, pois isso economizaria no máximo 1 byte se você passasse algum tempo.
Magic Octopus Urn
4

Geléia ,  80  77 bytes

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

Experimente online! (O rodapé formata a lista juntando-se a espaços para evitar impressões de esmagamento implícitas quando executado como um programa completo)

Jonathan Allan
fonte
3

JavaScript (ES6), 181 189 bytes

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

Como o caso de saída não importa, podemos salvar bytes executando palavras juntas:

... GolFoxtroTangO ...

Experimente online!

Rick Hitchcock
fonte
2

Python 3 , 250 191 bytes

-47 bytes graças a @Jo King, -2 mais graças a @ Jonathan Allen

Ele percorre todos os caracteres não espaciais da entrada e, para cada um deles, seleciona a frase relevante para a letra, que pode ser reduzida um pouco porque a primeira letra de cada frase é o próprio caractere. Divide uma corda, em vez de armazenar as frases como uma matriz para salvar os bytes de desnecessários 's e ,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]

Experimente online!

Solução original

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()]

Experimente online!

Neil A.
fonte
191 comif' '<c
Jonathan Allan
2

Vermelho , 210 193 bytes

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]]

Experimente online!

Explicação:

foreachitera sobre a sequência depois que todos os espaços em branco são removidos por trim/all. prinimprime o caractere (sem nova linha). printimprime um símbolo, picked a partir da lista de get-word! s (símbolos), usando o caractere mapeado para o intervalo de 1 a 26 como um índice.

Galen Ivanov
fonte
2

Limpo , 218 bytes

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

Experimente online!

Furioso
fonte
2

C # (compilador interativo do Visual C #) , 218 bytes

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

Experimente online!

Versão alternativa usando Split (), 194 bytes

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+"")

Experimente online!

Modalidade de ignorância
fonte
2

C ++, 229 228 bytes

[](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<<' ';}}

Experimente online!

Ungolfed:

[](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 << ' ';
        }
    }
}

Resultado:

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 

Versão em maiúsculas limpas ( 234 bytes ):

[](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<<' ';}}

Experimente online!

Resultado:

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
fonte
2

Linguagem de máquina IBM PC DOS 8088, 165 bytes

Isso é diretamente baseado na resposta de gwaugh , mas reduzi 26 bytes ao omitir os $delimitadores da tabela de palavras "NATO" e um byte extra por não ignorar o primeiro caractere da cadeia de parâmetros da linha de comando (que sempre será /ou e assim será ignorado pelo programa de qualquer maneira). O programa acabou sendo exatamente do mesmo tamanho para poder processar a tabela nesse formato (no qual as palavras são delimitadas apenas por caracteres maiúsculos, que servem ao duplo objetivo de também ser a segunda letra de cada palavra) ou 2 bytes mais se a capitalização do produto for mantida igual a antes. A tabela é 26 bytes menor.

No despejo de programa a seguir, a concatenação de :é usada para mostrar cada sequência de bytes consecutivos correspondentes a uma instrução:

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@

Faça o download do executável DOS NATO.COM:
Com letras maiúsculas não corrigidas (165 bytes)
Com
letras maiúsculas limpas (167 bytes) Versão bônus que coloca em maiúscula a primeira letra de cada palavra igual à entrada (167 bytes)

Desmontado:

    .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

Entrada de amostra:

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

Saída (versão de 165 bytes):

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 

Versão em maiúsculas limpas (167 bytes):

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 

Versão de capitalização limpa com a mesma capitalização que a entrada (167 bytes):

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
fonte
1
Bom trabalho lá!
640KB
1

Carvão , 99 bytes

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

Experimente online! Link é a versão detalhada do código. Saídas no caso apropriado. Explicação:

   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
fonte
1

Perl 6 , 176 170 166 bytes

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

Experimente online!

Saídas em maiúsculas com a primeira letra no estojo original. Compacta a string, que salva apenas 6 bytes sobre o texto simples:

*.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$_}

Experimente online!

Explicação:

*.comb>>.&{                 }         # Map each letter to
           $_~                        # The letter plus
              <...>[.ord%32]          # The letter indexed into the list of words
                             .words   # And remove the extra spaces
Brincadeira
fonte
1

Japonês, 108 106 bytes

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

Tente

Os backticks contêm a cadeia compactada:

ovemberwscarwapawuebecwomeowierrawangowniformwictorwhiskeywraywankeewuluwlfawravowharlieweltawchowoxtrotwolfwotelwndiawuliettwilowimawike
Shaggy
fonte
1

PowerShell , 187 183 bytes

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

Experimente online!

Script de teste:

$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"
}

Resultado:

True
Hotel Echo Lima Lima Oscar Whiskey Oscar Romeo Lima Delta
confuso
fonte
1

PHP ,209 205 206 bytes

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

Experimente online!

Resultado:

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

Ou 195 bytes, com espaços não totalmente removidos:

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

Experimente online!

Resultado:

"Hello World" => "HOtel eCho lIma lIma oScar   WHiskey oScar rOmeo lIma dElta"
640KB
fonte
Bom, mas sua edição mais recente apresentou um erro de um por um. Uma maneira de corrigi-lo é [31&ord($l)]voltar a [31&ord($l)-1]custar dois bytes, mas você também pode corrigi-lo em apenas um byte, digitando-o completamente ALfa.
Deadcode
Ops! Boa captura e correção muito inteligente. Thx @deadcode!
640 KB
0

TSQL, 313 bytes

Golfe:

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 @

Ungolfed:

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 @

Experimente

A saída termina com ponto e vírgula

t-clausen.dk
fonte
0

PowerShell, 228 225 bytes

-3 bytes graças a @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

Experimente online!

É possivelmente o código mais feio que eu já escrevi. Além disso, isso certamente pode ficar muito mais curto. Em minha defesa, ainda estou me recuperando dos exames finais.

Gabriel Mills
fonte
-split'lfa ravo ...'é mais curto porque '\ s' é divisor por padrão :)
mazzy 27/01
0

PHP, 212 bytes

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

Execute como pipe -nRou experimente online .

Gera avisos no PHP 7.2; coloque elementos de matriz entre aspas para corrigir.

Irá imprimir um sublinhado para espaços.

Titus
fonte
0

C (clang) , 309 bytes

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

Experimente online!

um aracnídeo de pedra
fonte
294 bytes
ceilingcat
0

JavaScript, 179 bytes

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

Experimente online!

Yair Rand
fonte