NATO Phonetic Alphabetを使用して、文字列を取り込み、その単語を綴る関数/メソッドを記述します。オプションのタイトルケース


17

NATO Phonetic Alphabetを使用して、文字列を取り込み、その単語を綴るプログラムを作成します。

マッピングは次のとおりです。

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

例:

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

入力には任意の文字列を使用できますが、常に文字とスペースのみで構成されます。出力では大文字と小文字は区別されませんが、入力には大文字、小文字、またはその両方の文字が含まれる場合があります。出力ではスペースを無視する必要があります。

任意の妥当な形式で出力できますが、NATOコールサインの区切りセットである必要があります。


4
PPCGへようこそ!この質問はすでに尋ねられています。しかし、おそらくそれは他のいくつかの理由でおそらく閉じられていただろう:1)そうする十分な理由がない限り、特定の言語で特定の方法(関数)で答えることを求めることは通常眉をひそめられます。2)課題は自己完結型である必要があります。NATO音声アルファベットが質問の本文に正確に含まれているものを正確に説明する必要があります。3)現在のフォームでは、宿題のように見えます。もしそうなら、あなたがこれまでにやったことを含めて、あなたが立ち往生している場所を説明すれば、Stack Overflowの助けを見つけるかもしれません。
アーナウルド

4
上記の@Arnauldがリンクされたチャレンジのソース制限または入力検証を持たないため、上記のポイントに対処した場合、これを再開することに賛成です。
シャギー

1
文字に制限がないため、これを編集して、おそらく再び開くことができるようにしました。すべての変更は適切ですか?特に入力制限を確認してください。
Rɪᴋᴇʀ

10
これはICAOアルファベットです。NATOアルファベットはAlphaandをJuliet代わりに使用します。
ニール

2
Whisky例ではWhiskey、マッピングと等しくありません。
ジャジーな

回答:



6

IBM PC DOS 8088アセンブリ、 208 204 197 194 192バイト

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

DOS NATO.COM実行可能ファイルをダウンロードします。

オフラインでお試しください!(DOSBoxなどで)

        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

テスト出力:

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 

単語リスト配列から最初の文字を削除するように更新されました(ただし、追加の必要なコードのために11バイトしか保存されません)。


NOPパディングをオフにする方法を考え出すか、それを行わない別のバージョンを使用すると、2バイトを節約できます。ML.EXEを使用しましたが、パディングは行われません。$区切り文字を削除し、代わりに最初の文字を大文字にして単語を区切ることにより、さらに18バイトを節約できます(最初の文字は既に省略されているため、最初は2番目を意味します)。(圧縮を解除するのに必要なコードの長さが圧縮の利点を上回る前に、おそらくより高いレベルの圧縮に到達することができますが、大文字の文字区切り文字の単純なスキームは良い出発点です。)
Deadcode

1
MASM 5を使用して、ALIGNとEVENのすべてのバリエーションを試し、REPNZの前にパディングするのが本当に好きなものに関係なく、指示を移動しました。$区切り文字は、配列区切り文字列と文字列区切り文字の両方を使用するための安価な方法であったため、INT 21H:09を使用でき、文字ごとにループ構造を出力する必要はありません。「LfaRavoHarlie」のような、区切り文字として大文字を使用するというあなたのアイデアが好きですか?仕様によると、大文字と小文字は無関係なので、ALfaまたはCHarlieを出力することは完全に受け入れられます。素晴らしいアイデア!コーディングして、サイズの差分が最終的にどうなるかを確認する必要があります。
640KB

どうやらMASM 9は/ ATオプション(.MODEL TINYの場合)があった最後のバージョンであり、コードでのテストではNOPパディングを実行していませんでした。ML.EXE /?出力は述べていますMicrosoft (R) Macro Assembler Version 9.00.30729.01。うん、「LfaRavoHarlie」はまさに私が意味したものです。:)「OR AL、20H」を実行して、出力で再び小文字にしますが、それはあなた次第です。
デッドコード

ところで、組み立てられていないビューにヘッダーとフッターを含めてみませんか?MASM 9はそれなしではコンパイルできません。.MODEL TINY .CODE ORG 100H START:最初とEND START最後を意味します。これをMASM 5でコンパイルする必要はありませんでしたか?
デッドコード

MASMボイラープレートは、アセンブルされたコードの一部ではないため、通常は含めません(MASMのバージョンとすべてに応じて、複数の方法で同じバイトコードを取得できます)。MASM 1.1でテストするのが好きなので、「古い」構文を使用します。:) NOPの問題を発見したと思います。少なくとも1.1〜5の間に存在するMASMバグである可能性があります。コードまたはハードコード08BHの上にLNATO EQUを配置すると、2つのNOPは挿入されません。ただし、LNATO EQUはコードの下にあるため、pass1とpass2の間で実行される内容に違いがあり、そのスペースがそこに残ります。奇妙な!
640KB

5

05AB1E102 96 95 バイト

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

出力は、タイトルケースNATOワードのリストです。

オンラインでお試しください。

説明:

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

(セクション鉱山のこの05AB1Eチップを参照してください。辞書を使用する方法?理由を理解すること”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"。この圧縮された辞書文字列の功績は、このコメントで@ErikTheGolferに送られます(ではなくtforが追加されJuliettますJuliet)。


存在しない単語(trot、tt Kilo、Whiskey Xray)のバイト数を減らすために、補間と圧縮を使用できる場合があります。半ば例:オンラインで試してみてください!私は前にそれをやったことがありますが、それは膨大な量の単語のためでした。これで、時間を費やせば最高で1バイト節約できます。
魔法のタコUr


3

JavaScript(ES6)、181 189バイト

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

出力の大文字小文字は関係ないので、単語を一緒に実行することでバイトを節約できます。

... GolFoxtroTangO ...

オンラインでお試しください!


2

Pythonの3250の 191バイト

@Jo Kingに-47バイト、@ Jonathan Allenに-2バイト

入力のスペース以外のすべての文字を調べ、それぞれに対して文字に関連するフレーズを選択します。各フレーズの最初の文字は文字そのものなので、少し減らすことができます。フレーズを配列として保存する代わりに文字列を分割して、不要な'sおよび,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]

オンラインでお試しください!

元のソリューション

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

オンラインでお試しください!



2

210 193バイト

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

オンラインでお試しください!

説明:

foreachによってすべての空白が削除された後、文字列を反復処理しますtrim/allprin文字を印刷します(改行なし)。範囲1..26にマッピングされた文字をインデックスとして使用して、get-word!s(シンボル)のリストから編集されprintたシンボルを出力しpickます。



2

C#(Visual C#Interactive Compiler)、218バイト

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

オンラインでお試しください!

Split()を使用した代替バージョン、194バイト

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

オンラインでお試しください!


2

C ++、229 228バイト

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

オンラインでお試しください!

ゴルフをしていない:

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

出力:

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 

大文字のクリーンバージョン(234バイト):

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

オンラインでお試しください!

出力:

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

IBM PC DOS 8088機械語、165バイト

これはgwaughの答えに直接基づいていますが$、「NATO」ワードテーブルから区切り文字を省略して26バイトを削減し、コマンドラインパラメーター文字列の最初の文字(常に/または したがって、プログラムでは無視されます)。プログラムは、この形式(単語は大文字のみで区切られ、各単語の2番目の文字でもあるという二重の目的を果たす)でテーブルを処理できるように、まったく同じ長さになりました。または2バイト出力の大文字化が以前と同じに保たれている場合は長くなります。テーブルは26バイト小さくなります。

次のプログラムダンプでは、byによる連結を:使用して、命令に対応する連続したバイトの各シーケンスを示しています。

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@

DOS NATO.COMが実行ダウンロード:
未補正大文字と(165バイト)
クリーン大文字で(167バイト)
入力と同じ各単語の最初の文字を大文字にボーナスバージョンを(167バイト)

組み立てられていない:

    .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

サンプル入力:

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

出力(165バイトバージョン):

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 

大文字のクリーンバージョン(167バイト):

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 

入力と同じ大文字(167バイト)を使用した大文字のクリーンバージョン:

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
いいですね!
640KB

1

、99バイト

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

オンラインでお試しください!リンクは、コードの詳細バージョンです。適切な場合の出力。説明:

   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バイト

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

オンラインでお試しください!

元のケースの最初の文字を大文字で出力します。文字列を圧縮します。これにより、単純なプレーンテキストよりも6バイトしか節約されません。

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

オンラインでお試しください!

説明:

*.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バイト

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

それを試してみてください

バックティックには圧縮された文字列が含まれます。

ovemberwscarwapawuebecwomeowierrawangowniformwictorwhiskeywraywankeewuluwlfawravowharlieweltawchowoxtrotwolfwotelwndiawuliettwilowimawike

1

PowerShell187183バイト

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

オンラインでお試しください!

テストスクリプト:

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

出力:

True
Hotel Echo Lima Lima Oscar Whiskey Oscar Romeo Lima Delta

1

PHP209 205 206バイト

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

オンラインでお試しください!

出力:

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

または、スペースが完全に削除されていない195バイト:

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

オンラインでお試しください!

出力:

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

いいですが、最新の編集でオフバイワンエラーが発生しました。それを修正する1つの方法は、2バイトのコストに[31&ord($l)]戻すこと[31&ord($l)-1]ですが、完全にスペルを入力することで1バイトで修正することもできますALfa
デッドコード

おっと!良いキャッチと非常に巧妙な修正。Thx @deadcode!
640KB

0

TSQL、313バイト

ゴルフ:

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 @

ゴルフをしていない:

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 @

やってみよう

出力はセミコロンで終了します


0

PowerShell、228 225バイト

@mazzyのおかげで-3バイト

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

オンラインでお試しください!

これは、おそらく私がこれまでに書いたコードの中で最もuい部分です。さらに、これは確かにかなり短くなる可能性があります。私の弁護では、私はまだ最終試験から回復しています。


-split'lfa ravo ...'「\ s」はデフォルトではスプリッタであるので、短いです:)
mazzy

0

PHP、212バイト

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

でパイプとして実行する-nR、オンラインで試してください

PHP 7.2で警告を生成します。配列要素を引用符で囲んで修正します。

スペースにアンダースコアを印刷します。



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.