Tulis fungsi / metode yang mengambil string dan mengeja kata itu menggunakan Alfabet Fonetik NATO. Titlecase opsional

17

Tulis program yang menggunakan string dan ucapkan kata itu menggunakan Alfabet Fonetik NATO.

Pemetaannya adalah sebagai berikut:

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

Contoh:

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

Input dapat berupa string apa saja, tetapi akan selalu terdiri dari hanya huruf dan spasi. Kasus tidak relevan dalam output, tetapi input mungkin berisi huruf dalam huruf besar, huruf kecil, atau keduanya. Spasi harus diabaikan dalam output.

Anda dapat menampilkan dalam format apa pun yang masuk akal, tetapi harus berupa serangkaian tanda panggilan NATO yang dibatasi.

Jrod
sumber
4
Selamat datang di PPCG! Pertanyaan ini sudah ditanyakan. Tapi itu mungkin akan ditutup karena beberapa alasan lain: 1) Kecuali ada alasan bagus untuk melakukannya, meminta untuk menjawab dengan cara tertentu (fungsi) dalam bahasa tertentu biasanya disukai. 2) Tantangan harus mandiri: Anda harus menjelaskan apa sebenarnya alfabet fonetik NATO dalam tubuh pertanyaan. 3) Dalam bentuk saat ini, sepertinya tugas rumah. Jika ya, Anda mungkin menemukan bantuan di Stack Overflow, asalkan Anda memasukkan apa yang telah Anda lakukan sejauh ini dan menjelaskan di mana Anda terjebak.
Arnauld
4
Saya akan mendukung pembukaan kembali ini jika poin @Arnauld yang diangkat di atas ditangani karena tidak memiliki batasan sumber atau validasi input dari tantangan terkait.
Shaggy
1
Saya telah mengedit ini agar dapat dibuka kembali, karena tidak ada batasan pada karakter. Apakah semua perubahan saya sesuai? Terutama periksa batasan input.
Rɪᴋᴇʀ
10
Ini adalah alfabet ICAO; alfabet NATO menggunakan Alphadan Julietsebagai gantinya.
Neil
2
Whiskydalam contoh tidak sama dengan Whiskeydi pemetaan.
mazzy

Jawaban:

13

sfk , 78 59 57 byte

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

Cobalah online!

Cukup gunakan alat yang tepat.

Keluaran adalah fonetik yang dipisahkan oleh satu ruang atau lebih.

Suram
sumber
6

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

Unduh DOS NATO.COM yang dapat dieksekusi:

Cobalah offline! (dalam DOSBox, dll.)

        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

Output tes:

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 

Diperbarui untuk menghapus karakter pertama dari susunan daftar kata (meskipun hanya menyimpan 11 byte karena kode tambahan yang diperlukan).

640KB
sumber
Anda dapat menyimpan 2 byte dengan mencari tahu cara mematikan pad NOP, atau menggunakan versi lain yang tidak melakukannya. Saya menggunakan ML.EXE dan tidak melakukan padding. Anda dapat menyimpan sekitar 18 byte atau lebih dengan menghapus $pembatas dan memisahkan kata-kata dengan huruf besar huruf pertama sebagai gantinya (dan pertama yang saya maksud kedua, karena Anda sudah meninggalkan yang pertama). (Tingkat kompresi yang lebih tinggi mungkin dapat dicapai sebelum panjang kode yang diperlukan untuk mendekompresnya akan lebih besar daripada keuntungan dari kompresi, tetapi skema sederhana pembatas huruf kapital akan menjadi awal yang baik.)
Deadcode
1
Menggunakan MASM 5, saya sudah mencoba semua variasi ALIGN dan BAHKAN, dan memindahkan instruksi dan tidak peduli apa yang benar-benar suka pad sebelum REPNZ. $ Delimiter adalah cara murah untuk memiliki array yang dibatasi dan string pembatas sehingga saya bisa menggunakan INT 21H: 09 dan tidak harus menulis struktur loop untuk mencetaknya char oleh char. Saya suka ide Anda tentang menggunakan ibukota sebagai pembatas, sesuatu seperti 'LfaRavoHarlie', ya? Per spec, case tidak relevan sehingga keluaran ALfa atau CHarlie akan sangat diterima. Ide bagus! Perlu kode itu dan melihat apa ukurannya akhirnya.
640KB
Rupanya MASM 9 adalah versi terakhir yang memiliki opsi / AT (untuk .MODEL TINY), dan dalam pengujian saya dengan kode Anda itu tidak melakukan padding NOP. The ML.EXE /?keluaran mengatakan Microsoft (R) Macro Assembler Version 9.00.30729.01. Yap, 'LfaRavoHarlie' tepat seperti yang saya maksud. :) Saya akan melakukan "ATAU AL, 20 H" untuk membuatnya menjadi huruf kecil lagi di output, tapi terserah Anda.
Deadcode
BTW, mengapa tidak menyertakan header dan footer dalam tampilan Anda yang belum dirangkai? MASM 9 tidak akan mengkompilasinya untuk saya tanpa itu. Maksud saya .MODEL TINY .CODE ORG 100H START:di awal dan END STARTdi akhir. Apakah Anda tidak memerlukan ini untuk dikompilasi dengan MASM 5?
Deadcode
Saya biasanya tidak memasukkan boilerplate MASM karena itu bukan bagian dari kode yang dirakit (Anda bisa mendapatkan kode byte yang sama beberapa cara tergantung pada versi MASM Anda dan semua). Saya menggunakan sintaks "lama" karena saya ingin mengujinya pada MASM 1.1. :) Saya percaya saya telah menemukan masalah NOP dan kemungkinan bug MASM yang ada setidaknya antara 1,1 dan 5. Jika Anda menempatkan LNATO EQU di atas kode atau kode keras 08BH, itu tidak memasukkan dua NOP. Namun karena LNATO EQU berada di bawah kode, ada perbedaan dalam apa yang terjadi antara pass1 dan pass2, meninggalkan ruang itu di sana. Aneh!
640KB
5

05AB1E , 102 96 95 byte

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

Output adalah daftar kata-kata NATO yang Dititrasi.

Cobalah online.

Penjelasan:

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

Lihat ini ujung 05AB1E saya (bagian Cara menggunakan kamus? ) Untuk memahami mengapa ”AlfaІvo¼¯¤œ®È¨›trotŠˆƒ‹Š™ÈŸtt Kilo´àma—……ÍЗŽêpa¼°«Äoµ†Çâgo¸šÉµ Whiskey Xrayµ‹nkeeâ¸lu”adalah "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". Kredit dari string kamus terkompresi ini pergi ke @ErikTheGolfer dalam komentar ini (dengan tambahan tuntuk Juliettbukan Juliet).

Kevin Cruijssen
sumber
Mungkin dapat menggunakan interpolasi, dan kompresi untuk menurunkan byte-count dari kata-kata yang tidak ada (trot, tt Kilo, Whiskey Xray). Contoh setengah: Coba online! Saya pernah melakukannya sebelumnya, tetapi untuk jumlah kata yang BESAR, dalam hal ini akan menghemat paling tidak 1 byte jika Anda menghabiskan waktu.
Guci Gurita Sihir
4

Jelly ,  80  77 byte

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

Cobalah online! (Footer memformat daftar dengan bergabung dengan spasi untuk menghindari cetakan smashing saat dijalankan sebagai program lengkap)

Jonathan Allan
sumber
3

JavaScript (ES6), 181 189 byte

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

Karena case output tidak masalah, kita dapat menyimpan byte dengan menjalankan kata-kata bersama:

... GolFoxtroTangO ...

Cobalah online!

Rick Hitchcock
sumber
2

Python 3 , 250 191 byte

-47 byte terima kasih kepada @Jo King, -2 lebih banyak terima kasih kepada @Jonathan Allen

Ini melewati semua karakter non-spasi input, dan untuk masing-masing itu memilih frase yang relevan untuk huruf, yang dapat dikurangi sedikit karena huruf pertama dari setiap frase adalah karakter itu sendiri. Pisahkan string alih-alih menyimpan frasa sebagai array untuk menyimpan byte dari 's dan s yang tidak perlu ,.

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]

Cobalah online!

Solusi asli

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

Cobalah online!

Neil A.
sumber
191 denganif' '<c
Jonathan Allan
2

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

Cobalah online!

Penjelasan:

foreachberalih di atas string setelah semua spasi putih dihilangkan oleh trim/all. prinmencetak karakter (tidak ada baris baru). printmencetak simbol, picked dari daftar get-word! s (simbol) menggunakan karakter yang dipetakan ke kisaran 1..26 sebagai indeks.

Galen Ivanov
sumber
2

Bersihkan , 218 byte

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

Cobalah online!

Suram
sumber
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))

Cobalah online!

Versi alternatif menggunakan 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+"")

Cobalah online!

Perwujudan Ketidaktahuan
sumber
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<<' ';}}

Cobalah online!

Tidak Disatukan:

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

Keluaran:

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 

Versi kapitalisasi bersih ( 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<<' ';}}

Cobalah online!

Keluaran:

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 
Kode mati
sumber
2

Bahasa mesin IBM PC DOS 8088, 165 byte

Ini secara langsung berdasarkan jawaban gwaugh , tetapi saya mencukur 26 byte dengan menghilangkan $pembatas dari tabel kata "NATO" dan tambahan 1 byte dengan tidak melewatkan karakter pertama dari string parameter baris perintah (yang akan selalu berupa /atau dan karenanya akan diabaikan oleh program). Program berakhir dengan panjang yang sama persis untuk dapat memproses tabel dalam format ini (di mana kata-kata dibatasi hanya oleh karakter huruf besar, yang melayani tujuan ganda juga menjadi huruf kedua dari setiap kata), atau 2 byte lebih lama jika kapitalisasi output dijaga sama seperti sebelumnya. Tabel ini berukuran 26 byte lebih kecil.

Dalam dump program berikut, concatenation by :digunakan untuk menunjukkan setiap urutan byte berturut-turut sesuai dengan instruksi:

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@

Unduh DOS NATO.COM yang dapat dieksekusi:
Dengan kapitalisasi tidak dikoreksi (165 byte)
Dengan kapitalisasi bersih (167 byte)
Versi bonus yang menggunakan huruf kapital dari setiap kata pertama sama dengan input (167 byte)

Belum dirakit:

    .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 sampel:

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

Output (versi 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 

Versi kapitalisasi bersih (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 

Versi kapitalisasi bersih dengan kapitalisasi sama dengan 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 
Kode mati
sumber
1
Kerja bagus di sana!
640KB
1

Arang , 99 byte

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Output dalam kasus yang tepat. Penjelasan:

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

Cobalah online!

Output dalam huruf besar dengan huruf pertama dalam kasus aslinya. Mengompresi string, yang hanya menyimpan 6 byte di atas teks biasa yang lebih sederhana:

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

Cobalah online!

Penjelasan:

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

Cobalah

Backtick berisi string yang dikompresi:

ovemberwscarwapawuebecwomeowierrawangowniformwictorwhiskeywraywankeewuluwlfawravowharlieweltawchowoxtrotwolfwotelwndiawuliettwilowimawike
Shaggy
sumber
1

PowerShell , 187 183 byte

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

Cobalah online!

Skrip uji:

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

Keluaran:

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

Cobalah online!

Keluaran:

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

Atau 195 byte, dengan spasi tidak sepenuhnya dihapus:

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

Cobalah online!

Keluaran:

"Hello World" => "HOtel eCho lIma lIma oScar   WHiskey oScar rOmeo lIma dElta"
640KB
sumber
Bagus, tetapi hasil edit terakhir Anda memperkenalkan kesalahan tidak langsung. Salah satu cara untuk memperbaikinya adalah dengan mengubah [31&ord($l)]kembali ke [31&ord($l)-1], biaya dua byte, tetapi Anda juga dapat memperbaikinya hanya dalam satu byte dengan mengeja sepenuhnya ALfa.
Deadcode
Aduh! Tangkapan yang bagus dan perbaikan yang sangat pintar. Thx @deadcode!
640KB
0

TSQL, 313 byte

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 @

Tidak Disatukan:

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 @

Cobalah

Output berakhir dengan titik koma

t-clausen.dk
sumber
0

PowerShell, 228 225 byte

-3 byte terima kasih kepada @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

Cobalah online!

Ini sangat mungkin potongan kode paling jelek yang pernah saya tulis. Selain itu, ini tentu bisa jauh lebih pendek. Dalam pembelaan saya, saya masih belum pulih dari ujian akhir.

Gabriel Mills
sumber
-split'lfa ravo ...'lebih pendek karena 's' adalah splitter secara 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]," ";

Jalankan sebagai pipa dengan -nRatau coba online .

Menghasilkan peringatan di PHP 7.2; letakkan elemen array di tanda kutip untuk memperbaikinya.

Akan mencetak garis bawah untuk spasi.

Titus
sumber
0

C (dentang) , 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;}

Cobalah online!

arakhnida batu
sumber
294 bytes
ceilingcat
0

JavaScript, 179 byte

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

Cobalah online!

Yair Rand
sumber