Écrivez une fonction / méthode qui prend une chaîne et épelle ce mot en utilisant l'alphabet phonétique de l'OTAN. Titlecase en option

17

Écrivez un programme qui prend une chaîne et épelle ce mot en utilisant l'alphabet phonétique de l'OTAN.

Le mappage est le suivant:

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

Exemple:

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

L'entrée peut être n'importe quelle chaîne, mais sera toujours composée uniquement de lettres et d'espaces. La casse n'est pas pertinente dans la sortie, mais l'entrée peut contenir des lettres en majuscules, en minuscules ou les deux. Les espaces doivent être ignorés dans la sortie.

Vous pouvez émettre dans n'importe quel format raisonnable, mais il doit s'agir d'un ensemble délimité d'indicatifs d'appel OTAN.

Jrod
la source
4
Bienvenue chez PPCG! Cette question a déjà été posée. Mais il aurait probablement été fermé de toute façon pour plusieurs autres raisons: 1) À moins qu'il n'y ait une bonne raison de le faire, demander à répondre d'une manière spécifique (une fonction) dans une langue spécifique est généralement mal vu. 2) Les défis doivent être autonomes: vous devez expliquer en quoi consiste exactement l'alphabet phonétique OTAN dans le corps de la question. 3) Dans sa forme actuelle, cela ressemble à un devoir. Si c'est le cas, vous pourriez trouver de l'aide sur Stack Overflow, à condition d'inclure ce que vous avez fait jusqu'à présent et d'expliquer où vous êtes bloqué.
Arnauld
4
Je serais en faveur de la réouverture si les points @Arnauld soulevés ci-dessus étaient traités car il n'a pas la restriction de source ou la validation d'entrée du défi lié.
Shaggy
1
J'ai modifié cela pour qu'il soit possible de le rouvrir, car il n'a pas de restriction sur les caractères. Tous mes changements sont-ils appropriés? Vérifiez particulièrement les restrictions d'entrée.
Rɪᴋᴇʀ
10
Ceci est l'alphabet de l'OACI; l'alphabet de l'OTAN utilise Alphaet à la Julietplace.
Neil
2
Whiskydans l'exemple n'est pas égal à Whiskeydans le mappage.
mazzy

Réponses:

13

sfk , 78 59 57 octets

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

Essayez-le en ligne!

Utilisez simplement le bon outil.

La sortie est la phonétique séparée par un ou plusieurs espaces.

Οurous
la source
6

Assemblage IBM PC DOS 8088, 208 204 197 194 192 octets

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

Téléchargez l'exécutable DOS NATO.COM:

Essayez-le hors ligne! (dans 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

Sortie de test:

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 

Mis à jour pour supprimer le premier caractère du tableau de la liste de mots (bien qu'il n'économise que 11 octets en raison du code supplémentaire requis).

640 Ko
la source
Vous pouvez économiser 2 octets en déterminant comment désactiver le remplissage NOP, ou en utilisant une version différente qui ne le fait pas. J'ai utilisé ML.EXE et il ne fait pas le rembourrage. Vous pouvez enregistrer environ 18 octets supplémentaires en supprimant les $délimiteurs et en séparant les mots en mettant à la place leur première lettre en majuscule (et en premier je veux dire en second, car vous avez déjà omis la première). (Un niveau de compression plus élevé pourrait probablement être atteint avant que la longueur de code nécessaire pour le décompresser ne l'emporte sur l'avantage de la compression, mais le schéma simple de délimiteurs de majuscules serait un bon début.)
Deadcode
1
En utilisant MASM 5, j'ai essayé toutes les variantes de ALIGN et EVEN, ainsi que des instructions de déplacement et peu importe ce qu'il aime vraiment remplir avant le REPNZ. Le délimiteur $ était un moyen bon marché d'avoir à la fois un tableau délimité et un délimiteur de chaîne afin que je puisse utiliser INT 21H: 09 et ne pas avoir à écrire une structure de boucle pour l'imprimer char par char. J'aime votre idée d'utiliser des majuscules comme délimiteurs, quelque chose comme «LfaRavoHarlie», oui? Selon la spécification, le cas n'est pas pertinent, donc la sortie de ALfa ou CHarlie serait parfaitement acceptable. Bonnes idées! Il faudra le coder et voir quelle sera la différence de taille.
640 Ko
Apparemment MASM 9 était la dernière version qui avait une option / AT (pour .MODEL TINY), et dans mon test avec votre code, il n'a pas fait le remplissage NOP. La ML.EXE /?sortie dit Microsoft (R) Macro Assembler Version 9.00.30729.01. Oui, «LfaRavoHarlie» est exactement ce que je voulais dire. :) Je ferais le "OR AL, 20H" pour le rendre à nouveau en minuscules dans la sortie, mais c'est à vous.
Deadcode
BTW, pourquoi ne pas inclure l'en-tête et le pied de page dans votre vue non assemblée? MASM 9 ne le compilerait pas sans cela. Je veux dire .MODEL TINY .CODE ORG 100H START:au début et END STARTà la fin. N'en aviez-vous pas besoin pour le compiler avec MASM 5?
Deadcode
Je n'inclue généralement pas le passe-partout MASM car il ne fait pas partie du code assemblé (vous pouvez accéder au même code d'octets de plusieurs manières en fonction de votre version de MASM et de tous). J'utilise la "vieille" syntaxe car j'aime la tester sur MASM 1.1. :) Je crois que j'ai trouvé le problème NOP et il s'agit probablement d'un bogue MASM qui existait au moins entre 1.1 et 5. Si vous placez le LNATO EQU au-dessus du code ou du code dur 08BH en place, il n'insère pas les deux NOP. Cependant, puisque le LNATO EQU est en dessous du code, il y a une différence dans ce qu'il fait entre pass1 et pass2, laissant cet espace là. Bizarre!
640 Ko le
5

05AB1E , 102 96 95 octets

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

La sortie est une liste de mots OTAN titrés.

Essayez-le en ligne.

Explication:

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

Voir cette astuce de la mine de 05AB1E (section Comment utiliser le dictionnaire? ) Pour comprendre pourquoi ”AlfaІvo¼¯¤œ®È¨›trotŠˆƒ‹Š™ÈŸtt Kilo´àma—……ÍЗŽêpa¼°«Äoµ†Çâgo¸šÉµ Whiskey Xrayµ‹nkeeâ¸lu”est "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". Le crédit de cette chaîne de dictionnaire compressée va à @ErikTheGolfer dans ce commentaire (avec un ajout tpour Juliettau lieu de Juliet).

Kevin Cruijssen
la source
Peut utiliser l'interpolation et la compression pour réduire le nombre d'octets des mots inexistants (trot, tt Kilo, Whisky Xray). Exemple à demi-testé: essayez-le en ligne! Je l'ai déjà fait, mais c'était pour une GRANDE quantité de mots, cela économiserait au mieux 1 octet si vous passiez du temps.
Urne de poulpe magique
4

Gelée ,  80  77 octets

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

Essayez-le en ligne! (Le pied de page formate la liste en se joignant à des espaces pour éviter de briser l'impression implicite lorsqu'il est exécuté en tant que programme complet)

Jonathan Allan
la source
3

JavaScript (ES6), 181 189 octets

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

Étant donné que le cas de sortie n'a pas d'importance, nous pouvons économiser des octets en exécutant des mots ensemble:

... GolFoxtroTangO ...

Essayez-le en ligne!

Rick Hitchcock
la source
2

Python 3 , 250 191 octets

-47 octets grâce à @Jo King, -2 de plus grâce à @Jonathan Allen

Il passe en revue tous les caractères non spatiaux de l'entrée, et pour chacun d'eux, il sélectionne la phrase appropriée pour la lettre, qui peut être réduite un peu car la première lettre de chaque phrase est le caractère lui-même. Divise une chaîne au lieu de stocker les phrases sous forme de tableau pour enregistrer les octets des 's et ,s inutiles .

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]

Essayez-le en ligne!

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

Essayez-le en ligne!

Neil A.
la source
191 avecif' '<c
Jonathan Allan
2

Rouge , 210 193 octets

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

Essayez-le en ligne!

Explication:

foreachitère sur la chaîne une fois que tous les espaces sont supprimés par trim/all. prinimprime le caractère (pas de nouvelle ligne). printimprime un symbole, pickéd à partir de la liste des get-word! s (symboles) en utilisant le caractère mappé à la plage 1..26 comme index.

Galen Ivanov
la source
2

Nettoyer , 218 octets

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

Essayez-le en ligne!

Οurous
la source
2

C # (compilateur interactif Visual C #) , 218 octets

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

Essayez-le en ligne!

Version alternative utilisant Split (), 194 octets

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

Essayez-le en ligne!

Incarnation de l'ignorance
la source
2

C ++, 229 228 octets

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

Essayez-le en ligne!

Non golfé:

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

Production:

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 

Version à capitalisation propre ( 234 octets ):

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

Essayez-le en ligne!

Production:

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
la source
2

Langage machine IBM PC DOS 8088, 165 octets

Ceci est directement basé sur la réponse de gwaugh , mais j'ai rasé 26 octets en omettant le$ délimiteurs de la table de mots "OTAN" et 1 octet supplémentaire en ne sautant pas le premier caractère de la chaîne de paramètres de ligne de commande (qui sera toujours soit /ou et sera donc ignoré par le programme de toute façon). Le programme a fini par avoir exactement la même longueur pour pouvoir traiter la table dans ce format (dans lequel les mots ne sont délimités que par des caractères majuscules, qui servent le double but d'être également la deuxième lettre de chaque mot), ou 2 octets plus longtemps si la capitalisation de sortie est maintenue la même qu'auparavant. Le tableau est 26 octets plus petit.

Dans le vidage de programme suivant, la concaténation par :est utilisée pour afficher chaque séquence d'octets consécutifs correspondant à une instruction:

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@

Téléchargez l'exécutable DOS NATO.COM:
Avec une capitalisation non corrigée (165 octets)
Avec une capitalisation propre (167 octets)
Version bonus qui met en majuscule la première lettre de chaque mot de la même manière que l'entrée (167 octets)

Non assemblé:

    .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

Exemple d'entrée:

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

Sortie (version 165 octets):

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 

Version à capitalisation propre (167 octets):

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 

Version à capitalisation propre avec la même capitalisation en entrée (167 octets):

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
la source
1
Beau travail là-bas!
640KB
1

Charbon de bois , 99 octets

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

Essayez-le en ligne! Le lien est vers la version détaillée du code. Sorties dans le cas approprié. Explication:

   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
la source
1

Perl 6 , 176 170 170 166 octets

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

Essayez-le en ligne!

Sorties en majuscules avec la première lettre dans le cas d'origine. Compresse la chaîne, qui enregistre seulement 6 octets sur le texte brut plus simple:

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

Essayez-le en ligne!

Explication:

*.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
la source
1

Japt, 108 106 octets

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

Essayez-le

Les backticks contiennent la chaîne compressée:

ovemberwscarwapawuebecwomeowierrawangowniformwictorwhiskeywraywankeewuluwlfawravowharlieweltawchowoxtrotwolfwotelwndiawuliettwilowimawike
Hirsute
la source
1

PowerShell , 187 183 octets

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

Essayez-le en ligne!

Script de test:

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

Production:

True
Hotel Echo Lima Lima Oscar Whiskey Oscar Romeo Lima Delta
mazzy
la source
1

PHP ,209 205 206 octets

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

Essayez-le en ligne!

Production:

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

Ou 195 octets, avec des espaces pas complètement supprimés:

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

Essayez-le en ligne!

Production:

"Hello World" => "HOtel eCho lIma lIma oScar   WHiskey oScar rOmeo lIma dElta"
640 Ko
la source
Bien, mais votre dernière modification a introduit une erreur de coup par coup. Une façon de le corriger est de [31&ord($l)]revenir à [31&ord($l)-1], ce qui coûte deux octets, mais vous pouvez également le corriger en un seul octet en l'épelant complètement ALfa.
Deadcode
Oups! Bonne prise et solution très intelligente. Thx @deadcode!
640KB
0

TSQL, 313 octets

Golfé:

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 @

Non golfé:

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 @

Essaye le

La sortie se termine par un point-virgule

t-clausen.dk
la source
0

PowerShell, 228 225 octets

-3 octets grâce à @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

Essayez-le en ligne!

C'est probablement le morceau de code le plus laid que j'aie jamais écrit. De plus, cela peut certainement être beaucoup plus court. Pour ma défense, je me remets encore des examens finaux.

Gabriel Mills
la source
-split'lfa ravo ...'est plus court car '\ s' est splitter par défaut :)
mazzy
0

PHP, 212 octets

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

Exécuter en tant que pipe avec -nRou l' essayer en ligne .

Génère des avertissements en PHP 7.2; mettre les éléments du tableau entre guillemets à corriger.

Imprime un trait de soulignement pour les espaces.

Titus
la source
0

C (clang) , 309 octets

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

Essayez-le en ligne!

une arachnide de pierre
la source
294 octets
plafond du
0

JavaScript, 179 octets

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

Essayez-le en ligne!

Yair Rand
la source