NATO 발음 알파벳을 사용하여 문자열을 입력하고 철자를 쓰는 함수 / 방법을 작성하십시오. 타이틀 케이스 옵션


17

NATO 발음 알파벳을 사용하여 문자열을 입력하고 철자를 쓰는 프로그램을 작성하십시오.

매핑은 다음과 같습니다.

'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) 도전은 자급 자족해야한다. 나토 음역 알파벳이 질문 본문 내에 정확히 무엇인지 설명해야한다. 3) 현재 형태에서는 숙제와 같습니다. 그렇다면 스택 오버플로에 대한 도움말을 찾을 수 있습니다. 단, 지금까지 수행 한 작업을 포함시키고 어디에 붙어 있는지 설명하십시오.
Arnauld

4
위에서 제기 된 @Arnauld 포인트가 연결된 챌린지의 소스 제한이나 입력 유효성 검사가 없으므로 해결 된 경우이를 다시 여는 데 유리합니다.
얽히고 설킨

1
문자 제한이 없기 때문에 다시 열 수 있도록 편집했습니다. 모든 변경 사항이 적절합니까? 특히 입력 제한을 확인하십시오.
Rɪᴋᴇʀ

10
이것은 ICAO 알파벳입니다. 나토는 사용 알파벳 AlphaJuliet대신.
Neil

2
Whisky이 예 Whiskey에서 매핑과 같지 않습니다 .
mazzy

답변:



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 바이트를 절약 할 수 있습니다 (첫 번째는 이미 첫 번째 문자를 생략했기 때문에 두 번째를 의미합니다). (압축을 해제하는 데 필요한 코드 길이가 압축의 이점을 능가하기 전에 더 높은 수준의 압축에 도달 할 수는 있지만 간단한 대문자 문자 구분 기호 체계를 사용하는 것이 좋습니다.)
Deadcode

1
MASM 5를 사용하여 ALIGN과 EVEN의 모든 변형을 시도하고 REPNZ 이전에 실제로 패딩하기를 원하는지 여부에 관계없이 지침을 이동했습니다. $ 구분 기호는 배열 구분 기호와 문자열 구분 기호를 모두 사용하는 저렴한 방법이므로 INT 21H : 09를 사용할 수 있으며 char로 char을 인쇄하기 위해 루프 구조를 작성할 필요가 없습니다. '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"를 할 것이지만 그것은 당신에게 달려 있습니다.
Deadcode

BTW, 조립되지 않은 뷰에 머리글과 바닥 글을 포함시키지 않겠습니까? MASM 9는 그것 없이는 나를 위해 컴파일하지 않을 것입니다. 나는 .MODEL TINY .CODE ORG 100H START:시작과 END START끝을 의미한다 . MASM 5로 컴파일하기 위해 이것을 필요로하지 않았습니까?
Deadcode

MASM 상용구는 조립 된 코드의 일부가 아니기 때문에 일반적으로 포함하지 않습니다 (MASM 버전 및 모두에 따라 동일한 바이트 코드를 여러 가지 방법으로 얻을 수 있음). MASM 1.1에서 테스트하기를 원하기 때문에 "이전"구문을 사용합니다. :) NOP 문제를 발견했으며 적어도 1.1과 5 사이에 존재했던 MASM 버그 일 가능성이 있다고 생각합니다. LNATO EQU를 코드 또는 하드 코드 08BH 위에두면 두 NOP를 삽입하지 않습니다. 그러나 LNATO EQU가 코드 아래에 있기 때문에 pass1과 pass2 사이에 차이점이 있으므로 해당 공간을 남겨 둡니다. 기괴한!
640KB

5

05AB1E , 102 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 이 댓글에 (AN 추가로 t위해 Juliett대신 Juliet).


존재하지 않는 단어 (trot, tt Kilo, Whisky Xray)의 바이트 수를 낮추기 위해 보간 및 압축을 사용할 수 있습니다. 반가운 예 : 온라인으로 사용해보십시오! 전에 해봤지만 단어가 많았습니다.이 시간을 보내면 1 바이트를 절약 할 수 있습니다.
Magic Octopus Urn

4

젤리 ,  80  77 바이트

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

온라인으로 사용해보십시오! 바닥 글은 전체 프로그램으로 실행될 때 암시 적 스매싱 인쇄를 피하기 위해 공백으로 결합하여 목록의 형식을 지정합니다.


3

자바 스크립트 (ES6) 181 189 바이트

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

출력 대소 문자는 중요하지 않으므로 단어를 함께 실행하여 바이트를 절약 할 수 있습니다.

... GolFoxtroTangO ...

온라인으로 사용해보십시오!


2

파이썬 3 , 250 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()]

온라인으로 사용해보십시오!


191 withif' '<c
Jonathan Allan

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/all. prin문자를 인쇄합니다 (줄 바꿈 없음). 1.26 범위에 매핑 된 문자를 색인으로 사용하여 get-word! s (기호) 목록에서 가져온 print기호를 인쇄합니다 pick.


2

클린 , 218 바이트

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

온라인으로 사용해보십시오!


2

C # (Visual C # 대화식 컴파일러) 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 ++, 229228 바이트

[](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"워드 테이블에서 구분 기호를 생략하고 추가 1 바이트를 생략하여 26 바이트를 줄였습니다 (항상 /또는 따라서 프로그램에 의해 무시됩니다). 프로그램은이 형식으로 단어를 처리 할 수 ​​있도록 정확히 동일한 길이입니다 (단어는 대문자로만 구분되며 각 단어의 두 번째 문자 인 이중 목적을 제공합니다) 또는 2 바이트 출력 대문자를 이전과 동일하게 유지하면 더 길어집니다. 테이블은 26 바이트 작습니다.

다음 프로그램 덤프에서 concatenation 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

펄 (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

PowerShell , 187 183 바이트

$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

PHP ,209 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"

좋았지 만 최근 수정 사항에 오류가 발생했습니다. 이 문제를 해결하는 한 가지 방법은로 [31&ord($l)]돌아가서 [31&ord($l)-1]2 바이트의 비용을 지불하는 것이지만 철자를 완전히 입력하여 1 바이트만으로 수정할 수도 있습니다 ALfa.
Deadcode

으악! 잘 잡히고 매우 영리한 수정. Thx @ 데드 코드!
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 바이트

@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

온라인으로 사용해보십시오!

이것은 내가 작성한 코드 중 가장 추악한 코드 일 것입니다. 또한 이것은 훨씬 짧아 질 수 있습니다. 내 방어에서는 여전히 최종 시험에서 회복 중입니다.


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