Schreiben Sie eine Funktion / Methode, die eine Zeichenfolge aufnimmt und dieses Wort mit dem phonetischen NATO-Alphabet buchstabiert. Titelfach optional

17

Schreiben Sie ein Programm, das eine Zeichenfolge einliest und dieses Wort mit dem phonetischen Alphabet der NATO buchstabiert.

Das Mapping sieht wie folgt aus:

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

Beispiel:

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

Die Eingabe kann eine beliebige Zeichenfolge sein, besteht jedoch immer nur aus Buchstaben und Leerzeichen. Die Groß- / Kleinschreibung spielt in der Ausgabe keine Rolle, die Eingabe kann jedoch Groß- und Kleinbuchstaben oder beides enthalten. Leerzeichen sollten in der Ausgabe ignoriert werden.

Sie können in jedem vernünftigen Format ausgeben, es muss sich jedoch um eine begrenzte Anzahl von NATO-Rufzeichen handeln.

Jrod
quelle
4
Willkommen bei PPCG! Diese Frage wurde bereits gestellt. Aber es wäre wahrscheinlich trotzdem aus mehreren anderen Gründen geschlossen worden: 1) Wenn es keinen guten Grund dafür gibt, wird das Bitten, auf eine bestimmte Weise (eine Funktion) in einer bestimmten Sprache zu antworten, normalerweise verpönt. 2) Herausforderungen müssen in sich geschlossen sein: Sie sollten erklären, was das phonetische NATO-Alphabet genau im Kern der Frage ist. 3) In seiner jetzigen Form sieht es aus wie eine Hausaufgabe. In diesem Fall finden Sie möglicherweise Hilfe zum Stapelüberlauf, vorausgesetzt, Sie geben an, was Sie bisher getan haben, und erläutern, wo Sie steckengeblieben sind.
Arnauld
4
Ich würde es begrüßen, wenn die oben angesprochenen Punkte von @Arnauld erneut geöffnet würden, da es keine Quellenbeschränkung oder Eingabevalidierung für die verknüpfte Herausforderung gibt.
Shaggy
1
Ich habe dies so bearbeitet, dass es möglicherweise wieder geöffnet werden kann, da es keine Zeichenbeschränkung gibt. Sind alle meine Änderungen angemessen? Überprüfen Sie insbesondere die Eingabebeschränkungen.
4.
10
Dies ist das ICAO-Alphabet. das NATO-Alphabet verwendet Alphaund Julietstattdessen.
Neil
2
Whiskyim Beispiel ist nicht gleich Whiskeyim Mapping.
mazzy

Antworten:

13

sfk , 78 59 57 bytes

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

Probieren Sie es online!

Verwenden Sie einfach das richtige Werkzeug.

Ausgabe ist die Phonetik, die durch ein oder mehrere Leerzeichen getrennt ist.

Οurous
quelle
6

IBM PC DOS 8088 Baugruppe, 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

Laden Sie die ausführbare DOS-Datei NATO.COM herunter:

Probieren Sie es offline! (in DOSBox usw.)

        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

Testausgang:

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 

Aktualisiert, um das erste Zeichen aus dem Wortlisten-Array zu entfernen (spart jedoch nur 11 Byte aufgrund des zusätzlich erforderlichen Codes).

640 KB
quelle
Sie können 2 Bytes einsparen, indem Sie herausfinden, wie Sie die NOP-Auffüllung deaktivieren oder eine andere Version verwenden, die dies nicht tut. Ich habe ML.EXE benutzt und es füllt nicht auf. Sie können weitere ca. 18 Byte speichern, indem Sie die $Trennzeichen entfernen und die Wörter durch Großschreibung des ersten Buchstabens voneinander trennen (und erstens meine ich zweitens, da Sie das erste bereits weggelassen haben). (Eine höhere Komprimierungsstufe könnte wahrscheinlich erreicht werden, bevor die zum Dekomprimieren erforderliche Codelänge den Vorteil der Komprimierung überwiegt, aber das einfache Schema der Großbuchstabenbegrenzer wäre ein guter Anfang.)
Deadcode
1
Mit MASM 5 habe ich alle Variationen von ALIGN und EVEN ausprobiert und Anweisungen verschoben, unabhängig davon, was vor dem REPNZ wirklich gepuffert werden soll. Das $ -Trennzeichen war eine kostengünstige Möglichkeit, sowohl ein Array-Trennzeichen als auch ein Zeichenketten-Trennzeichen zu verwenden, sodass ich INT 21H: 09 verwenden und keine Schleifenstruktur schreiben musste, um es char für char zu drucken. Ihre Idee, Großbuchstaben als Trennzeichen zu verwenden, gefällt mir, so etwas wie "LfaRavoHarlie", ja? Laut Spezifikation ist der Fall irrelevant, sodass die Ausgabe von ALfa oder CHarlie durchaus akzeptabel wäre. Tolle Ideen! Muss es verschlüsseln und sehen, wie groß der Unterschied ist.
640 KB,
Anscheinend war MASM 9 die letzte Version, die eine / AT-Option (für .MODEL TINY) hatte, und in meinem Test mit Ihrem Code hat es die NOP-Auffüllung nicht durchgeführt. Die ML.EXE /?Ausgabe sagt Microsoft (R) Macro Assembler Version 9.00.30729.01. Ja, "LfaRavoHarlie" ist genau das, was ich meinte. :) Ich würde das "OR AL, 20H" tun, um es in der Ausgabe wieder in Kleinbuchstaben zu schreiben, aber es liegt an Ihnen.
Deadcode
Übrigens, warum nicht die Kopf- und Fußzeile in Ihre unzusammengesetzte Ansicht aufnehmen? MASM 9 würde es ohne das nicht für mich kompilieren. Ich meine das .MODEL TINY .CODE ORG 100H START:am Anfang und END STARTam Ende. Benötigten Sie dies nicht, um es mit MASM 5 zu kompilieren?
Deadcode
In der Regel wird das MASM-Boilerplate nicht mit einbezogen, da es nicht Teil des zusammengestellten Codes ist (Sie können je nach MASM-Version und allen auf verschiedene Arten auf denselben Bytecode zugreifen). Ich verwende die "alte" Syntax, weil ich sie gerne auf MASM 1.1 testen möchte. :) Ich glaube, ich habe das NOP-Problem gefunden und es ist wahrscheinlich ein MASM-Fehler, der mindestens zwischen 1.1 und 5 bestand. Wenn Sie das LNATO EQU über dem Code oder dem harten Code 08BH platzieren, werden die beiden NOPs nicht eingefügt. Da sich das LNATO EQU jedoch unterhalb des Codes befindet, gibt es einen Unterschied zwischen pass1 und pass2, wodurch dieser Raum dort belassen wird. Bizarr!
26.
5

05AB1E , 102 96 95 Bytes

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

Die Ausgabe ist eine Liste von NATO-Wörtern mit Titel.

Probieren Sie es online aus.

Erläuterung:

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

Sehen Sie diese 05AB1E Spitze von mir (Abschnitt Wie das Wörterbuch benutzen? ) Zu verstehen , warum ”AlfaІvo¼¯¤œ®È¨›trotŠˆƒ‹Š™ÈŸtt Kilo´àma—……ÍЗŽêpa¼°«Äoµ†Çâgo¸šÉµ Whiskey Xrayµ‹nkeeâ¸lu”ist "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". Die Gutschrift für diesen komprimierten Wörterbuch-String geht in diesem Kommentar an @ErikTheGolfer (mit einem hinzugefügten tfür Juliettanstelle von Juliet).

Kevin Cruijssen
quelle
Ist möglicherweise in der Lage, Interpolation und Komprimierung zu verwenden, um die Byteanzahl der nicht vorhandenen Wörter (Trab, tt Kilo, Whiskey Xray) zu verringern. Halfassed Beispiel: Probieren Sie es online! Ich habe es schon einmal gemacht, aber es war für eine GROSSE Menge von Wörtern, in diesem Fall würde es bestenfalls 1 Byte sparen, wenn Sie Zeit verbringen würden.
Magic Octopus Urn
4

Jelly ,  80  77 Bytes

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

Probieren Sie es online! (In der Fußzeile wird die Liste durch Verbinden mit Leerzeichen formatiert, um ein implizites Zerschlagen des Ausdrucks zu vermeiden, wenn sie als vollständiges Programm ausgeführt wird.)

Jonathan Allan
quelle
3

JavaScript (ES6), 181 189 Byte

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

Da der Ausgabefall keine Rolle spielt, können wir Bytes sparen, indem wir Wörter zusammen ausführen:

... GolFoxtroTangO ...

Probieren Sie es online!

Rick Hitchcock
quelle
2

Python 3 , 250 191 Bytes

-47 Bytes dank @Jo King, -2 dank @Jonathan Allen

Es durchläuft alle Nicht-Leerzeichen der Eingabe und wählt für jedes von ihnen die relevante Phrase für den Buchstaben aus, die ein wenig reduziert werden kann, da der erste Buchstabe jeder Phrase das Zeichen selbst ist. Teilt eine Zeichenfolge, anstatt die Phrasen als Array zu speichern, um Bytes aus den unnötigen 's und ,s zu speichern .

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]

Probieren Sie es online!

Originelle Lösung

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

Probieren Sie es online!

Neil A.
quelle
191 mitif' '<c
Jonathan Allan
2

Rot , 210 bis 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]]

Probieren Sie es online!

Erläuterung:

foreachDurchläuft die Zeichenfolge, nachdem alle Leerzeichen von entfernt wurden trim/all. prindruckt das Zeichen (kein Zeilenumbruch). printdruckt ein Symbol pickaus der Liste der get-word! s (Symbole), wobei das dem Bereich 1..26 zugeordnete Zeichen als Index verwendet wird.

Galen Ivanov
quelle
2

Sauber , 218 Bytes

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

Probieren Sie es online!

Οurous
quelle
2

C # (Visual C # Interactive Compiler) , 218 Byte

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

Probieren Sie es online!

Alternative Version mit 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+"")

Probieren Sie es online!

Verkörperung der Ignoranz
quelle
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<<' ';}}

Probieren Sie es 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 << ' ';
        }
    }
}

Ausgabe:

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 

Clean-Capitalization-Version ( 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<<' ';}}

Probieren Sie es online!

Ausgabe:

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

Maschinensprache IBM PC DOS 8088, 165 Byte

Dies basiert direkt auf der Antwort von gwaugh , aber ich habe 26 Byte durch Weglassen der $Trennzeichen aus der "NATO" -Worttabelle und ein zusätzliches Byte durch Nichtüberspringen des ersten Zeichens der Befehlszeilenparameterzeichenfolge (die immer entweder /oder sein wird) reduziert und wird daher vom Programm sowieso ignoriert). Das Programm hatte genau dieselbe Länge, um die Tabelle in diesem Format (in dem die Wörter nur durch Großbuchstaben begrenzt sind, die dem doppelten Zweck dienen, auch der zweite Buchstabe jedes Wortes zu sein) oder 2 Bytes verarbeiten zu können länger, wenn die Produktionskapitalisierung unverändert bleibt. Die Tabelle ist 26 Byte kleiner.

Im folgenden Programmabbild wird Verkettung durch :verwendet, um jede Folge aufeinanderfolgender Bytes anzuzeigen, die einem Befehl entsprechen:

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@

Laden Sie die ausführbare DOS-Datei NATO.COM herunter:
Mit unkorrigierter Großschreibung (165 Bytes)
Mit sauberer Großschreibung (167 Bytes)
Bonusversion, bei der der erste Buchstabe jedes Wortes genauso groß geschrieben wird wie die Eingabe (167 Bytes)

Zerlegt:

    .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

Beispieleingabe:

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

Ausgabe (165-Byte-Version):

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 

Clean-Capitalization-Version (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 

Clean-Capitalization-Version mit derselben Groß- / Kleinschreibung wie die Eingabe (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 
Deadcode
quelle
1
Gute Arbeit dort!
11.
1

Kohle , 99 Bytes

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

Probieren Sie es online! Link ist eine ausführliche Version des Codes. Ausgänge im richtigen Fall. Erläuterung:

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

Probieren Sie es online!

Ausgabe in Großbuchstaben mit dem ersten Buchstaben im Original. Komprimiert die Zeichenfolge, wodurch nur 6 Byte über dem einfacheren Nur-Text gespeichert werden:

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

Probieren Sie es online!

Erläuterung:

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

Japt, 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

Versuch es

Die Backticks enthalten den komprimierten String:

ovemberwscarwapawuebecwomeowierrawangowniformwictorwhiskeywraywankeewuluwlfawravowharlieweltawchowoxtrotwolfwotelwndiawuliettwilowimawike
Zottelig
quelle
1

PowerShell , 187 183 Byte

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

Probieren Sie es online!

Testskript:

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

Ausgabe:

True
Hotel Echo Lima Lima Oscar Whiskey Oscar Romeo Lima Delta
mazzy
quelle
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)].' ':'';

Probieren Sie es online!

Ausgabe:

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

Oder 195 Bytes, wobei Leerzeichen nicht vollständig entfernt wurden:

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

Probieren Sie es online!

Ausgabe:

"Hello World" => "HOtel eCho lIma lIma oScar   WHiskey oScar rOmeo lIma dElta"
640 KB
quelle
Schön, aber bei deiner letzten Bearbeitung ist ein Fehler aufgetreten. Eine Möglichkeit, das Problem zu beheben, besteht darin, [31&ord($l)]zurück zu wechseln [31&ord($l)-1], was zwei Byte kostet. Sie können es aber auch in nur einem Byte beheben, indem Sie es vollständig ausschreiben ALfa.
Deadcode
Hoppla! Guter Fang und sehr clevere Verlegenheit. Danke @deadcode!
2.
0

TSQL, 313 Bytes

Golf gespielt:

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 @

Versuch es

Die Ausgabe endet mit einem Semikolon

t-clausen.dk
quelle
0

PowerShell, 228 225 Byte

-3 Bytes dank @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

Probieren Sie es online!

Dies ist wahrscheinlich der hässlichste Code, den ich je geschrieben habe. Darüber hinaus kann dies sicherlich viel kürzer werden. Zu meiner Verteidigung habe ich mich immer noch von den Abschlussprüfungen erholt.

Gabriel Mills
quelle
-split'lfa ravo ...'ist kürzer, weil '\ s' standardmäßig Splitter ist :)
mazzy
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]," ";

Mit -nRoder als Pipe ausführen probieren Sie es online aus .

Gibt Warnungen in PHP 7.2 aus; Setzen Sie Array-Elemente in Anführungszeichen, um dies zu beheben.

Gibt einen Unterstrich für Leerzeichen aus.

Titus
quelle
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;}

Probieren Sie es online!

ein Stein Spinnentier
quelle
294 Bytes
Ceilingcat
0

JavaScript, 179 Bytes

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

Probieren Sie es online!

Yair Rand
quelle