Bir dizeyi alan ve NATO Fonetik Alfabesini kullanarak bu kelimeyi heceleyen bir fonksiyon / yöntem yazın. Titlecase isteğe bağlı


17

NATO Fonetik Alfabesini kullanarak bu dizeyi alan ve söyleyen bir program yazın.

Eşleme aşağıdaki gibidir:

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

Misal:

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

Giriş herhangi bir dize olabilir, ancak her zaman yalnızca harfler ve boşluklardan oluşur. Büyük / küçük harf çıkışı çıktıyla ilgisizdir, ancak girdi büyük, küçük veya her ikisinde de harfler içerebilir. Çıktıda boşluklar göz ardı edilmelidir.

Herhangi bir makul biçimde çıktı alabilirsiniz, ancak sınırlandırılmış bir NATO çağrı işareti seti olmalıdır.


4
PPCG'ye Hoşgeldiniz! Bu soru zaten sorulmuş. Ancak muhtemelen başka nedenlerden dolayı kapatılmış olurdu: 1) Bunu yapmak için iyi bir neden olmadığı sürece, belirli bir dilde (işlev) belirli bir dilde cevap vermeyi istemek genellikle kaşlarını çatmaktır. 2) Zorluklar müstakil olmalıdır: NATO fonetik alfabesinin sorunun tam olarak ne olduğunu açıklamalısınız. 3) Şu anki haliyle, bir ev ödevi gibi görünüyor. Öyleyse, şu ana kadar yaptığınız şeyi dahil etmeniz ve nerede sıkıştığınızı açıklamanız şartıyla Yığın Taşması konusunda yardım bulabilirsiniz.
Arnauld

4
Bağlantılı zorluğun kaynak kısıtlaması veya giriş doğrulaması olmadığından, yukarıda @Arnauld puanlarına değinildiyse bunu yeniden açmayı isterim.
Shaggy

1
Bunu karakterleri kısıtlamadığı için yeniden açılabilecek şekilde düzenledim. Tüm değişikliklerim uygun mu? Özellikle giriş kısıtlamalarını kontrol edin.
Rɪᴋᴇʀ

10
Bu ICAO alfabesi; NATO alfabesi kullanır Alphave Julietonun yerine.
Neil

2
Whiskyörnekte eşlemede eşit değildir Whiskey.
mazzy

Yanıtlar:


13

sfk , 78 59 57 bayt

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

Çevrimiçi deneyin!

Sadece doğru aleti kullanın.

Çıktı, bir veya daha fazla boşlukla ayrılmış fonetiktir.


6

IBM PC DOS 8088 derlemesi, 208 204 197 194 192 bayt

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 yürütülebilir dosyasını indirin:

Çevrimdışı deneyin! (DOSBox'ta vb.)

        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

Test çıktısı:

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 

Kelime listesindeki ilk karakteri kaldırmak için güncellendi (gerçi ek kod nedeniyle sadece 11 bayt kaydeder).


NOP dolgusunu nasıl kapatacağınızı bularak veya yapmayan farklı bir sürüm kullanarak 2 bayt kaydedebilirsiniz. ML.EXE kullandım ve dolgu yapmaz. $Sınırlayıcıları kaldırarak ve sözcükleri ilk harflerini büyük yazarak ayırarak başka bir 18 bayt kaydedebilirsiniz (ve ilk olarak ikinci demek istiyorum, çünkü zaten ilkini dışarıda bıraktınız). (Sıkıştırmak için gereken kodun uzunluğundan önce daha yüksek bir sıkıştırma seviyesine ulaşılabilir, ancak sıkıştırma avantajından ağır basar, ancak büyük harf sınırlayıcıların basit şeması iyi bir başlangıç ​​olacaktır.)
Deadcode

1
MASM 5'i kullanarak, ALIGN ve EVEN'in tüm varyasyonlarını ve talimatları hareket ettirdim ve REPNZ'den önce ped yapmayı gerçekten sevdiği ne olursa olsun. $ Sınırlayıcı INT 21H: 09 kullanabilirsiniz ve char tarafından char yazdırmak için bir döngü yapısı yazmak zorunda değilsiniz bu yüzden hem bir dizi ayrılmış ve bir dize sınırlayıcı için ucuz bir yol oldu. Büyük harfleri sınırlayıcı olarak kullanma fikrinizi seviyorum, 'LfaRavoHarlie' gibi bir şey, değil mi? Spesifikasyona göre, durum ilgisizdir, bu nedenle ALfa veya CHarlie çıktısı mükemmel kabul edilebilir. Harika fikirler! Kodlamanız ve boyut farkının ne olduğunu görmeniz gerekecek.
640KB

Görünüşe göre MASM 9, / AT seçeneği (.MODEL TINY için) olan son sürümdü ve kodunuzla yaptığım testte NOP dolgusu yapmadı. ML.EXE /?Çıktı diyor Microsoft (R) Macro Assembler Version 9.00.30729.01. Evet, 'LfaRavoHarlie' tam olarak kastettiğim şeydi. :) Çıktıda tekrar küçük harf yapmak için "VEYA AL, 20H" yapardım, ama size kalmış.
Deadcode

BTW, üstbilgi ve altbilgiyi neden birleştirilmemiş görünümünüze eklemiyorsunuz? MASM 9 bu olmadan benim için derlemezdi. Yani .MODEL TINY .CODE ORG 100H START:başlangıçta ve END STARTsonunda. MASM 5 ile derlemek için buna ihtiyacınız olmadı mı?
Deadcode

Genellikle MASM boilerplate dahil değildir çünkü monte edilmiş kodun bir parçası değildir (MASM sürümünüze ve hepsine bağlı olarak aynı bayt koduna birden fazla yol alabilirsiniz). "Eski" sözdizimini kullanıyorum çünkü MASM 1.1 üzerinde test etmek istiyorum. :) NOP sorunu buldum ve muhtemelen en az 1.1 ve 5 arasında bulunan bir MASM hata olduğuna inanıyorum LNATO EQU kod veya sabit kod 08BH yerine yukarıda, iki NOPs eklemez. Bununla birlikte, LNATO EQU kodun altında olduğundan, pass1 ve pass2 arasında yaptıklarında bir fark vardır ve bu alanı orada bırakır. Tuhaf!
640KB

5

05AB1E , 102 96 95 bayt

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

Çıktı Başlıklı NATO kelimelerinin bir listesidir.

Çevrimiçi deneyin.

Açıklama:

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

Neden ”AlfaІvo¼¯¤œ®È¨›trotŠˆƒ‹Š™ÈŸtt Kilo´àma—……ÍЗŽêpa¼°«Äoµ†Çâgo¸šÉµ Whiskey Xrayµ‹nkeeâ¸lu”olduğunu anlamak için bu 05AB1E bahşişime bakın ( sözlük nasıl kullanılır? )"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" . Bu sıkıştırılmış sözlüğü dize Kredi gider @ErikTheGolfer Bu yorumun içinde (eklenen bir ile tiçin Juliettyerine Juliet).


Mevcut olmayan kelimelerin (trot, tt Kilo, Viski Xray) bayt sayısını azaltmak için enterpolasyon ve sıkıştırma kullanabilir. Halfassed örneği: Çevrimiçi deneyin! Daha önce yaptım, ama BÜYÜK miktarda kelime içindi, bu zaman harcadıysanız en iyi 1 bayt tasarruf olurdu.
Sihirli Ahtapot Urn

4

Jöle ,  80  77 bayt

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

Çevrimiçi deneyin! (Altbilgi, tam bir program olarak çalıştırıldığında örtük baskıyı önlemek için listeyi boşluklarla birleştirerek biçimlendirir)


3

JavaScript (ES6), 181 189 bayt

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

Çıktı durumu önemli olmadığından, kelimeleri birlikte çalıştırarak bayt kaydedebiliriz:

... GolFoxtroTangO ...

Çevrimiçi deneyin!


2

Python 3 , 250 191 bayt

@Jo King sayesinde -47 bayt, @Jonathan Allen sayesinde -2 daha fazla

Girdinin tüm boşluk olmayan karakterlerinden geçer ve her biri için harf için ilgili tümceci seçer, bu her bir ifadenin ilk harfi karakterin kendisidir çünkü biraz azaltılabilir. Gereksiz 's ve s'lerden gelen baytları kaydetmek için ifadeleri dizi olarak saklamak yerine bir dize böler ,.

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]

Çevrimiçi deneyin!

Orijinal çözüm

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

Çevrimiçi deneyin!


191 ileif' '<c
Jonathan Allan

2

Kırmızı , 210 193 bayt

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

Çevrimiçi deneyin!

Açıklama:

foreachtüm boşluklar tarafından kaldırıldıktan sonra dizenin üzerinde yinelenir trim/all. prinkarakteri yazdırır (satırsonu yok). indeks olarak 1..26 aralığına eşlenen karakteri kullanarak get-word! s (semboller) listesinden edilmiş printbir sembol yazdırır pick.


2

Temiz , 218 bayt

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

Çevrimiçi deneyin!


2

C # (Visual C # Etkileşimli Derleyici) , 218 bayt

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

Çevrimiçi deneyin!

Split (), 194 bayt kullanan alternatif sürüm

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

Çevrimiçi deneyin!


2

C ++, 229228 bayt

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

Çevrimiçi deneyin!

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

Çıktı:

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 

Temiz büyük harf sürümü ( 234 bayt ):

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

Çevrimiçi deneyin!

Çıktı:

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 makine dili, 165 bayt

Bu doğrudan gwaugh'un cevabına dayanıyor , ancak $"NATO" kelime tablosundan ayırıcıları ve komut satırı parametre dizesinin ilk karakterini atlamayarak (her zaman ya /da ve dolayısıyla program tarafından zaten yok sayılacaktır). Program, tabloyu bu formatta işleyebilmek için tam olarak aynı uzunlukta (kelimelerin sadece her bir sözcüğün ikinci harfi olmak için çift amaca hizmet eden büyük harf karakterlerle sınırlandırıldığı) veya 2 baytlık bir sonuç verdi. Çıktı büyük harf kullanımı öncekiyle aynı tutulursa Tablo 26 bayt daha küçüktür.

Aşağıdaki program dökümünde, :bir talimata karşılık gelen her bir ardışık bayt dizisini göstermek için tarafından birleştirme kullanılır:

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 yürütülebilir dosyasını indirin:
Düzeltilmemiş büyük harfle (165 bayt)
Temiz büyük harfle (167 bayt)
Her sözcüğün ilk harfini girdiyle aynı olan büyük harfle (167 bayt)

unassembled:

    .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

Örnek giriş:

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

Çıktı (165 baytlık sürüm):

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 

Temiz büyük harf sürümü (167 bayt):

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 

Girdi ile aynı büyük harf kullanımına sahip temiz büyük harf sürümü (167 bayt):

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
Güzel iş var!
640KB

1

Kömür , 99 bayt

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

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı versiyonudur. Uygun durumda çıkışlar. Açıklama:

   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 , 176170166 bayt

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

Çevrimiçi deneyin!

Orijinal durumda ilk harf ile büyük harf çıktılar. Daha basit düz metnin üzerine yalnızca 6 bayt kaydeden dizeyi sıkıştırır:

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

Çevrimiçi deneyin!

Açıklama:

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

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

Dene

Backticks sıkıştırılmış dizeyi içerir:

ovemberwscarwapawuebecwomeowierrawangowniformwictorwhiskeywraywankeewuluwlfawravowharlieweltawchowoxtrotwolfwotelwndiawuliettwilowimawike

1

PowerShell , 187183 bayt

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

Çevrimiçi deneyin!

Test komut dosyası:

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

Çıktı:

True
Hotel Echo Lima Lima Oscar Whiskey Oscar Romeo Lima Delta

1

PHP ,209 205 206 bayt

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

Çevrimiçi deneyin!

Çıktı:

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

Veya boşluklar tam olarak kaldırılmamış 195 bayt:

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

Çevrimiçi deneyin!

Çıktı:

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

Güzel, ancak son düzenlemenizde bire bir hata oluştu. Bunu düzeltmenin bir yolu , iki bayta mal olan [31&ord($l)]geri dönüş [31&ord($l)-1]yapmaktır, ancak tam olarak yazarak tek bir baytta da düzeltebilirsiniz ALfa.
Deadcode

Tüh! İyi yakalamak ve çok akıllıca düzeltme. Teşekkürler @deadcode!
640KB

0

TSQL, 313 bayt

golfed:

DECLARE @ varchar(max)='Hello World' 

DECLARE @x INT=len(@)WHILE @x>0SELECT @=stuff(@,@x,1,substring(@,@x,1)+choose(ascii(substring(@,@x,1))%32,'lfa','eta','harlie','elta','cho','oxtrot','olf','otel','ndia','uliett','ilo','ima','ike','ovember','scar','apa','uebec','omeo','ierra','ango','niform','ictor','hiskey','ray','ankee','ulu')+';'),@x-=1PRINT @

Ungolfed:

DECLARE @ varchar(max)='Hello World' 

DECLARE @x INT=len(@)
WHILE @x>0
  SELECT @=stuff(@,@x,1,substring(@,@x,1)+choose(ascii(substring(@,@x,1))%32,
    'lfa','eta','harlie','elta','cho','oxtrot','olf','otel','ndia','uliett','ilo',
    'ima','ike','ovember','scar','apa','uebec','omeo','ierra','ango','niform',
    'ictor','hiskey','ray','ankee','ulu')+';'),
    @x-=1

PRINT @

Denemek

Çıktı noktalı virgülle biter


0

PowerShell, 228256 bayt

@Mazzy sayesinde -3 bayt

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

Çevrimiçi deneyin!

Bu büyük olasılıkla şimdiye kadar yazdığım en çirkin kod parçası. Ayrıca, bu kesinlikle çok daha kısa olabilir. Savunmamda hala final sınavlarından iyileşiyorum.


-split'lfa ravo ...''\ s' varsayılan olarak ayırıcı olduğundan daha kısa :)
mazzy

0

PHP, 212 bayt

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

Pipo ile çalıştırın -nRveya çevrimiçi deneyin .

PHP 7.2'de uyarı verir; düzeltmek için dizi öğelerini tırnak içine alın.

Boşluklar için bir alt çizgi yazdırır.


0

C (clang) , 309 bayt

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

Çevrimiçi deneyin!



0

JavaScript, 179 bayt

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

Çevrimiçi deneyin!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.