Scrivi una funzione / metodo che includa una stringa e scriva quella parola usando l'alfabeto fonetico della NATO. Titlecase opzionale


17

Scrivi un programma che includa una stringa e scriva quella parola usando l'alfabeto fonetico della NATO.

La mappatura è la seguente:

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

Esempio:

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

L'input può essere qualsiasi stringa, ma sarà sempre composto solo da lettere e spazi. Il caso è irrilevante nell'output, ma l'input può contenere lettere maiuscole, minuscole o entrambe. Gli spazi devono essere ignorati nell'output.

Puoi produrre in qualsiasi formato ragionevole, ma deve essere un insieme delimitato di nominativi NATO.


4
Benvenuti in PPCG! Questa domanda è già stata posta. Ma probabilmente sarebbe stato chiuso comunque per diversi altri motivi: 1) A meno che non ci sia una buona ragione per farlo, chiedere di rispondere in un modo specifico (una funzione) in una lingua specifica è solitamente disapprovato. 2) Le sfide devono essere autosufficienti: dovresti spiegare quale sia esattamente l'alfabeto fonetico della NATO all'interno del corpo della domanda. 3) Nella sua forma attuale, sembra un compito a casa. In tal caso, potresti trovare aiuto su Stack Overflow, a condizione che includa ciò che hai fatto finora e spieghi dove sei bloccato.
Arnauld,

4
Sarei a favore di riaprirlo se i punti sollevati da @Arnauld sopra fossero stati affrontati in quanto non ha la restrizione di origine o la convalida dell'input della sfida collegata.
Shaggy

1
Ho modificato questo per essere eventualmente riapribile, dal momento che non ha restrizioni sui personaggi. Tutte le mie modifiche sono appropriate? Soprattutto controllare le restrizioni di input.
Rɪᴋᴇʀ

10
Questo è l'alfabeto ICAO; l'alfabeto NATO usa Alphae Julietinvece.
Neil,

2
Whiskynell'esempio non è uguale a Whiskeynella mappatura.
mazzy,

Risposte:


13

sfk , 78 59 57 byte

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

Provalo online!

Usa lo strumento giusto.

L'output è la fonetica separata da uno o più spazi.


6

IBM PC DOS 8088 assembly, 208 204 197 194 192 byte

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

Scarica l'eseguibile DOS NATO.COM:

Provalo offline! (in DOSBox, ecc.)

        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

Uscita di prova:

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 

Aggiornato per rimuovere il primo carattere dall'array dell'elenco di parole (anche se salva solo 11 byte a causa del codice aggiuntivo richiesto).


Puoi salvare 2 byte scoprendo come disattivare il pad NOP o usando una versione diversa che non lo fa. Ho usato ML.EXE e non fa il riempimento. Puoi salvare altri 18 byte circa rimuovendo i $delimitatori e separando le parole capitalizzando invece la loro prima lettera (e per prima intendo la seconda, perché hai già lasciato la prima). (Probabilmente si potrebbe raggiungere un livello più elevato di compressione prima che la lunghezza del codice necessario per decomprimerlo superi il vantaggio della compressione, ma il semplice schema di delimitatori di lettere maiuscole sarebbe un buon inizio.)
Deadcode

1
Usando MASM 5, ho provato tutte le varianti di ALIGN ed EVEN, e ho spostato le istruzioni e indipendentemente da ciò che gli piace veramente pad prima del REPNZ. Il $ delimitatore era un modo economico per avere sia un delimitatore di array che un delimitatore di stringhe in modo da poter usare INT 21H: 09 e non dover scrivere una struttura ad anello per stamparlo a caratteri. Mi piace la tua idea sull'uso delle maiuscole come delimitatori, qualcosa come "LfaRavoHarlie", sì? Secondo le specifiche, il caso è irrilevante, quindi l'output di ALfa o CHarlie sarebbe perfettamente accettabile. Grandi idee! Dovrà codificarlo e vedere quale sarà la dimensione della differenza.
640 KB

Apparentemente MASM 9 era l'ultima versione che aveva un'opzione / AT (per .MODEL TINY), e nel mio test con il tuo codice non ha fatto il pad NOP. L' ML.EXE /?output dice Microsoft (R) Macro Assembler Version 9.00.30729.01. Sì, "LfaRavoHarlie" è esattamente ciò che intendevo. :) Vorrei fare "OR AL, 20H" per renderlo nuovamente minuscolo nell'output, ma dipende da te.
Deadcode

A proposito, perché non includere l'intestazione e il piè di pagina nella vista non assemblata? MASM 9 non lo compilerebbe per me senza quello. Intendo .MODEL TINY .CODE ORG 100H START:all'inizio e END STARTalla fine. Non ti serviva per compilarlo con MASM 5?
Deadcode

In genere non includo il bollettino MASM perché non fa parte del codice assemblato (è possibile ottenere lo stesso codice byte in diversi modi a seconda della versione di MASM e di tutti). Uso la sintassi "vecchia" perché mi piace testarla su MASM 1.1. :) Credo di aver riscontrato il problema NOP ed è probabilmente un bug MASM che esisteva almeno tra 1.1 e 5. Se si posiziona LNATO EQU sopra il codice o il codice hard 08BH, non inserisce i due NOP. Tuttavia, poiché LNATO EQU è al di sotto del codice, c'è una differenza in ciò che fa tra pass1 e pass2, lasciando quello spazio lì. Bizzarro!
640 KB

5

05AB1E , 102 96 95 byte

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

L'output è un elenco di parole NATO titolate.

Provalo online.

Spiegazione:

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

Vedere questo suggerimento 05AB1E mio (sezione Come utilizzare il dizionario? ) Per capire il motivo per cui ”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". Il merito di questa stringa di dizionario compressa va a @ErikTheGolfer in questo commento (con l'aggiunta tdi Juliettinvece di Juliet).


Può essere in grado di utilizzare l'interpolazione e la compressione per ridurre il conteggio dei byte delle parole inesistenti (trotto, tt Kilo, Whiskey Xray). Esempio halfassed: provalo online! L'ho già fatto prima, ma era per una GRANDE quantità di parole, in questo si risparmiava al massimo 1 byte se si passava del tempo.
Magic Octopus Urn

4

Gelatina ,  80  77 byte

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

Provalo online! (Il piè di pagina formatta l'elenco unendo gli spazi per evitare la stampa di distruzione implicita quando eseguito come programma completo)


3

JavaScript (ES6), 181 189 byte

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

Poiché il caso di output non ha importanza, possiamo salvare byte eseguendo le parole insieme:

... GolFoxtroTangO ...

Provalo online!


2

Python 3 , 250 191 byte

-47 byte grazie a @Jo King, -2 in più grazie a @Jonathan Allen

Attraversa tutti i caratteri non spaziali dell'input e per ciascuno di essi seleziona la frase pertinente per la lettera, che può essere ridotta un po 'perché la prima lettera di ogni frase è il carattere stesso. Divide una stringa invece di memorizzare le frasi come array byte per salvare le inutili '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]

Provalo online!

Soluzione originale

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

Provalo online!


191 conif' '<c
Jonathan Allan il

2

Rosso , 210 193 byte

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

Provalo online!

Spiegazione:

foreachscorre la stringa dopo che tutti gli spazi bianchi sono stati rimossi da trim/all. prinstampa il personaggio (nessuna nuova riga). printstampa un simbolo, pickeditato dall'elenco di get-word! s (simboli) usando il carattere mappato all'intervallo 1..26 come indice.


2

Pulito , 218 byte

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

Provalo online!


2

C # (compilatore interattivo Visual C #) , 218 byte

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

Provalo online!

Versione alternativa utilizzando Split (), 194 byte

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

Provalo online!


2

C ++, 229 228 byte

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

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

Produzione:

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 

Versione a capitalizzazione pulita ( 234 byte ):

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

Provalo online!

Produzione:

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 

2

Linguaggio macchina 8088 IBM PC DOS, 165 byte

Questo si basa direttamente sulla risposta di gwaugh , ma ho eliminato 26 byte omettendo i $delimitatori dalla tabella di parole "NATO" e un byte in più non saltando il primo carattere della stringa del parametro della riga di comando (che sarà sempre /o e quindi verrà comunque ignorato dal programma). Il programma ha finito per essere esattamente della stessa lunghezza per essere in grado di elaborare la tabella in questo formato (in cui le parole sono delimitate solo da caratteri maiuscoli, che hanno il doppio scopo di essere anche la seconda lettera di ogni parola), o 2 byte più a lungo se la capitalizzazione di output viene mantenuta la stessa di prima. La tabella è più piccola di 26 byte.

Nel seguente dump del programma, la concatenazione di :viene utilizzata per mostrare ciascuna sequenza di byte consecutivi corrispondenti a un'istruzione:

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@

Scarica l'eseguibile DOS NATO.COM:
con maiuscole non corrette (165 byte)
Con maiuscole pulite (167 byte)
Versione bonus che capitalizza la prima lettera di ogni parola nello stesso modo dell'input (167 byte)

smontato:

    .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

Input di esempio:

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

Uscita (versione 165 byte):

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 

Versione a capitalizzazione pulita (167 byte):

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 

Versione a capitalizzazione pulita con la stessa capitalizzazione dell'input (167 byte):

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 

1
Bel lavoro lì!
640 KB

1

Carbone , 99 byte

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

Provalo online! Il collegamento è alla versione dettagliata del codice. Uscite nel caso corretto. Spiegazione:

   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

1

Perl 6 , 176 170 166 byte

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

Provalo online!

Stampa in maiuscolo con la prima lettera nella custodia originale. Comprime la stringa, che salva solo 6 byte sul semplice testo semplice:

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

Provalo online!

Spiegazione:

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

1

Japt, 108 106 byte

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

Provalo

I backtick contengono la stringa compressa:

ovemberwscarwapawuebecwomeowierrawangowniformwictorwhiskeywraywankeewuluwlfawravowharlieweltawchowoxtrotwolfwotelwndiawuliettwilowimawike

1

PowerShell , 187 183 byte

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

Provalo online!

Script di prova:

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

Produzione:

True
Hotel Echo Lima Lima Oscar Whiskey Oscar Romeo Lima Delta

1

PHP ,209 205 206 byte

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

Provalo online!

Produzione:

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

O 195 byte, con spazi non completamente rimossi:

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

Provalo online!

Produzione:

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

Bene, ma la tua ultima modifica ha introdotto un errore fuori servizio. Un modo per risolverlo è [31&ord($l)]tornare a [31&ord($l)-1], costando due byte, ma è anche possibile risolverlo in un solo byte specificando completamente ALfa.
Deadcode

Ops! Buona cattura e correzione molto intelligente. Grazie @deadcode!
640 KB

0

TSQL, 313 byte

golfed:

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 @

Provalo

L'output termina con punto e virgola


0

PowerShell, 228 225 byte

-3 byte grazie 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

Provalo online!

Questo è probabilmente il pezzo di codice più brutto che abbia mai scritto. Inoltre, questo può certamente essere molto più breve. A mia difesa, mi sto ancora riprendendo dagli esami finali.


-split'lfa ravo ...'è più corto perché '\ s' è splitter di default :)
mazzy

0

PHP, 212 byte

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

Esegui come pipe -nRo provalo online .

Rende avvisi in PHP 7.2; mettere gli elementi dell'array tra virgolette da correggere.

Stampa un carattere di sottolineatura per gli spazi.


0

C (clang) , 309 byte

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

Provalo online!



0

JavaScript, 179 byte

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

Provalo online!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.