찰리, 오스카, 델타, 에코


30

무선 통신의 큰 부분은 문자를 단어로 인코딩하여 통신을 쉽게 이해할 수 있도록 NATO 발음 알파벳 입니다. 당신이 그것을 받아들이려면 당신의 직업은 하나씩 인쇄하는 것입니다.

이 정확한 문자열을 stdout에 인쇄해야합니다.

A: Alfa
B: Bravo
C: Charlie
D: Delta
E: Echo
F: Foxtrot
G: Golf
H: Hotel
I: India
J: Juliet
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

규칙 :

  • 프로그램이 입력을받지 않습니다
  • 표준 허점은 허용되지 않습니다 .
  • 귀하의 언어에 NATO 등가에 글자를 쓰는 내장이 있다면, 그것들을 사용하지 못할 수도 있습니다 (Mathematica를보고 있습니다).
  • 당신은 후행 공백 및있을 수 있습니다 뒤에 줄 바꿈.


4
사용자 지정 압축 구성표가 기본 제공 압축보다 성능을 향상시킬 수있는 악용 가능한 구조가 없기 때문에 이것을 속임수로 닫고 있으며 목표 과제는 기본 제공 압축에 대한 사실상의 표준 과제입니다.
Mego

1
밀접하게 관련. 내가 이것을 이것의 속임수라고 부르면, 사람들은 실제로 압축을 훨씬 더 가능하게 한 자신의 단어를 선택할 수 있습니다.
Martin Ender

3
첫 번째가 아니어야 A: Alpha합니까?
SeanC

3
@SeanC : Wikipedia에 따르면 (문제의 링크 참조) 아니오. NATO가 아니라 ATIS입니다. 그러나, 그것은해야 Juliett하지, Juliet그리고 X-ray대신 Xray.
Titus

답변:


18

파이썬 2 , 189186 바이트

i=65
for w in"lfa ravo harlie elta cho oxtrot olf otel ndia uliet ilo ima ike ovember scar apa uebec omeo ierra ango niform ictor hiskey ray ankee ulu".split():print'%c: %c'%(i,i)+w;i+=1

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


이전 : (이것은 멋지지만 더 간단한 버전은 바이트로 짧아 질 수 있음을 깨달았습니다)

w=''
i=65
for c in"lfAravOharliEeltAchOoxtroTolFoteLndiAulieTilOimAikEovembeRscaRapAuebeComeOierrAangOniforMictoRhiskeYraYankeEulU":
 w+=c.lower()
 if'_'>c:print'%c: %c'%(i,i)+w;w='';i+=1

12

젤리 , 76 바이트

“ṭṡl°ẠkWßġȮRẎ+wḋñȥạġ¢ƊḌ¬kạẠ¦WṡỊƒK⁹ç}⁶hm}Kñ£ɦ/lṇẊɠƓ}pƤ°⁸Ụ.g⁹Ġh9ṁ{f»ḲØAżj€⁾: Y

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

방법?

사전 값과 압축입니다. 사이의 코드 와는 »문자열을 형성 할 것이다 단지 압축 값 "Alfa Bravo Charlie Delta Echo Foxtrot Golf Hotel India Juliet Kilo Lima Mike November Oscar Papa Quebec Romeo Sierra Tango Uniform Victor Whiskey Xray Yankee Zulu"(을 제외하고, 하나의 공간 접두사 모든 단어를 찾는하여을 "Alfa"(를 제외하고 젤리의 사전) " Xray", 사전에 어떤되지 않는 직접 문자열 값을 너무 " X"및 사전 항목 "ray"이 대신 사용됩니다).

나머지 코드는 나머지를 수행합니다.

“...»ḲØAżj€⁾: Y - Main link: no arguments
“...»           - the string described above (really a list of characters)
     Ḳ          - split at spaces
      ØA        - alphabet yield - ['A','B','C', ...,'X','Y','Z']
        ż       - zip - makes a list of lists [['A'],['A','l','f','a']],[['B'],['B','r','a','v','o']], ...]
         j€     - join each with
           ⁾:   - the string ": "
              Y - join with line feeds
                - implicit print

(참고 : Jelly로 프로그래밍 한 적이 없습니다.) 코드를 볼 때 다음 두 가지가 궁금합니다. 1. 현재 알파벳을 반복하여 단어와 연결합니다. Jelly에서 문자열의 첫 번째 문자를 얻을 수 있으므로 알파벳 대신 단어를 반복하여 first_letter_of_word + ":"+ word? 그리고 2. 공백을 포함한 모든 단어를 검색 한 다음 공백으로 나눕니다. 주요 대문자로 포함 분할 할 수 있습니까? 그들은 2. 나의 설명이 감소 될 수 있다면 어떤 생각이 공간은 심지어 압축 된 형태로 추가 바이트를 포기하지 여부, 그리고 경우
케빈 Cruijssen

1
@KevinCruijssen (1) 예, 각 단어의 첫 글자를 사용할 수는 있지만 알파벳 수율은 2 바이트 원자이므로 짧지 않습니다. (2) 예는 대문자에 분할 가능하지만, 의외로 공백없이 문자열의 압축이 실제로 이상 (선행 공백에 많은 단어가 실제로 에서 이러한 모든이며, 사전 총액을).
Jonathan Allan

2
사전에는 선행 공백이 없습니다. 그러나 여러 단어를 한 줄로 압축 해제 할 때 기본값은 공백으로 구분하는 것입니다. 첫 번째 단어에는 공백이 없지만 다음 단어는 모두 공백입니다.
Dennis


11

05AB1E , 102 98 바이트

Outgolfer Erik 덕분에 4 바이트 절약

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

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

설명

05AB1E의 사전에있는 단어에 사전 압축을 사용합니다.
다른 단어에 대해서는 가능하면 부분 사전 압축을 사용합니다.
불가능한 일반 텍스트 단어.

#          # split on spaces
 v         # for each word
  y        # push the word
   ¬       # get the first letter of the word
    „:     # push the string ": "
       «   # append this to the letter
        ì  # prepend the result to the word
         , # print with newline

2
이 압축 문자열을 대신 사용하여 98로 낮추십시오 ”AlfaІvo¼¯¤œ®È¨›trotŠˆƒ‹Š™ÈŸt Kilo´àma—……ÍЗŽêpa¼°«Äoµ†Çâgo¸šÉµ Whiskey Xrayµ‹nkeeâ¸lu”.
아웃 골퍼 Erik

@EriktheOutgolfer : 감사합니다! 나는 확실히 나는 대한 보았다 pali사전에 그러나 나는 그들을 놓친해야합니다. 나는 고려하지 않았다 yazu같은 단어 :하지만
Emigna

6

루비, 169 자

( Jonathan AllanPython 2 솔루션을 기반으로 합니다. 아이디어가 마음에 들면 원래의 대답을 찬성하십시오.)

i=?@
"LfaRavoHarlieEltaChoOxtrotOlfOtelNdiaUlietIloImaIkeOvemberScarApaUebecOmeoIerraAngoNiformIctorHiskeyRayAnkeeUlu".scan(/.[a-z]+/){|w|puts i.succ!+": "+i+w.downcase}

샘플 실행 :

bash-4.3$ ruby -e 'i=?@;"LfaRavoHarlieEltaChoOxtrotOlfOtelNdiaUlietIloImaIkeOvemberScarApaUebecOmeoIerraAngoNiformIctorHiskeyRayAnkeeUlu".scan(/.[a-z]+/){|w|puts i.succ!+": "+i+w.downcase}' | head
A: Alfa
B: Bravo
C: Charlie
D: Delta
E: Echo
F: Foxtrot
G: Golf
H: Hotel
I: India
J: Juliet

6

자바 7 242 225 222 217 바이트

void d(){char c=65;for(String s:"lpha ravo harlie elta cho oxtrot olf otel ndia uliet ilo ima ike ovember scar apa uebec omeo ierra ango niform ictor hiskey ray ankee ulu".split(" "))System.out.println(c+": "+c+++s);}

설명:

void d(){                          // Method
  char c = 65;                     //  Starting character 'A'
  for(String s : "lpha ravo harlie elta cho oxtrot olf otel ndia uliet ilo ima ike ovember scar apa uebec omeo ierra ango niform ictor hiskey ray ankee ulu"
      .split(" "))                 //  Loop over the word-parts
    System.out.println(            //   Print line with:
      c                            //    The current character
      + ": "                       //    + ": "
      + c++ + s                    //    + the current character + word-part (and raise the character afterwards)
    );                             //   End of print line
                                   //  End of loop (implicit / single-line body)
}                                  // End of method

테스트 코드 :

여기에서 시도하십시오.

class M{
  static void d(){char c=65;for(String s:"lpha ravo harlie elta cho oxtrot olf otel ndia uliet ilo ima ike ovember scar apa uebec omeo ierra ango niform ictor hiskey ray ankee ulu".split(" "))System.out.println(c+": "+c+++s);}

  public static void main(String[] a){
    d();
  }
}

Java 5 및 모든 후속 버전에서 작동해야합니다.
Holger

5

옥타브 215 210 209 바이트

Luis Mendo 덕분에 5 바이트를 절약했습니다. Luis Mendo 덕분에 4 바이트를 절약했지만 접근 방식을 변경하면 하나 더 저장하는 데 도움이됩니다.

fprintf('%s: %s%s\n',[k=num2cell(65:90);k;regexp('lfaBravoCharlieDeltaEchoFoxtrotGolfHotelIndiaJulietKiloLimaMikeNovemberOscarPapaQuebecRomeoSierraTangoUniformVictorWhiskeyXrayYankeeZulu','[A-Z]','split')]{:})

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

공백을 제거하면 25 바이트를 절약 할 수 있지만 정규 표현식을 사용해야합니다. 정규 표현식 자체는 꽤 많은 바이트가 필요하며 모든 단어의 대문자를 제거하여 단어 lfa, ravo등을 남기지 않습니다 . 따라서 새 문자열을 선행 문자와 연결해야합니다. 이 모든 비용은 바이트입니다.

오래된 설명 :

fprintf('%s: %s\n',      % Print a string with the format "str: str\n"
num2cell(65:90)          % Create a cell array with the numbers 65 - 90, one in each cell
strsplit('Alfa ...       % Split the string on the default delimiter: space
[num2cell();strsplit()]  % Concatenate cell arrays, leaving us with
                         % {'A',    'B'
                         %  'Alfa', 'Bravo'}
[...]{:}                 % Convert the cell array to a comma-delimited vector
                         % 'A', 'Alfa', 'B', 'Bravo' ...

감사! 이것은 조금 더 지저분했다! , 그리고 3 바이트 더 길다
Stewie Griffin

아, 그렇습니다. 'split'더 이상있을 것입니다
Luis Mendo

'split'더 짧았다 : 209 :)
Stewie Griffin

내가 참조! 잘 했어!
Luis Mendo


5

PHP, 202 227 196 187 바이트

9 바이트를 절약 한 Dewi Morgan 에게 감사 합니다

echo preg_replace('/([A-Z])[a-z]+/',"$1: $0\n",AlfaBravoCharlieDeltaEchoFoxtrotGolfHotelIndiaJulietKiloLimaMikeNovemberOscarPapaQuebecRomeoSierraTangoUniformVictorWhiskeyXrayYankeeZulu);

https://repl.it/GMkH/1


이전 버전

31 바이트 저장을위한 manatworkinsertusername 덕분에 !

foreach(preg_split('/\B(?=[A-Z])/',AlfaBravoCharlieDeltaEchoFoxtrotGolfHotelIndiaJulietKiloLimaMikeNovemberOscarPapaQuebecRomeoSierraTangoUniformVictorWhiskeyXrayYankeeZulu)as$k)echo"$k[0]: $k\n";

https://eval.in/749541

출력이 이전 버전에서 잘못되었다는 것을 알리는 insertusername 덕분에 .

$a=preg_split('/(?=[A-Z])/',AlfaBravoCharlieDeltaEchoFoxtrotGolfHotelIndiaJulietKiloLimaMikeNovemberOscarPapaQuebecRomeoSierraTangoUniformVictorWhiskeyXrayYankeeZulu,-1,PREG_SPLIT_NO_EMPTY);foreach($a as $k)echo "$k[0]: $k\n";

https://repl.it/GKS8/3

$a=preg_split('/(?=[A-Z])/',AlfaBravoCharlieDeltaEchoFoxtrotGolfHotelIndiaJulietKiloLimaMikeNovemberOscarPapaQuebecRomeoSierraTangoUniformVictorWhiskeyXrayYankeeZulu);foreach($a as $k)echo"$k[0]: $k\n";

https://repl.it/GKS8/2


왜 가변적 $a인가? 의 매개 변수 preg_split()에서 전체 통화를 이동하면 foreach됩니다. 그러면 as더 이상 주변 공간 이 필요하지 않습니다.
manatwork

constant 대신 다음 PREG_SPLIT_NO_EMPTY값을 사용하는 것이 좋습니다 1. 그러나 개인적으로 정규 표현식을 대신 조정했습니다 /\B(?=[A-Z])/.
manatwork

1
감사합니다 @insertusername 여기서 지금 편집 :D하겠습니다 codegolfing에 익숙해집니다
ʰᵈˑ

그것은 대신에 일반 배열로 1 바이트 더 짧을 것입니다 preg_split.
Titus

1
10 자 더 짧은 :echo preg_replace('/([A-Z])[a-z]+/',"$1 = $0\n",Alfa...Zulu);
Dewi Morgan

4

Brachylog , 178 바이트

"Alfa Bravo Charlie Delta Echo Foxtrot Golf Hotel India Juliet Kilo Lima Mike November Oscar Papa Quebec Romeo Sierra Tango Uniform Victor Whiskey Xray Yankee Zulu"ṇ₁{hw": "w?ẉ}ᵐ

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

설명

"…"ṇ₁               Split the string on spaces
     {         }ᵐ   Map on each word:
      hw              Write the first letter
        ": "w         Write ": "
             ?ẉ       Write the word followed by a new line

4

PHP, 188 186 180 174 바이트

후행 공백 없음, 하나의 주요 개행

<?=preg_filter("#[A-Z]#","
$0: $0",AlfaBravoCharlieDeltaEchoFoxtrotGolfHotelIndiaJulietKiloLimaMikeNovemberOscarPapaQuebecRomeoSierraTangoUniformVictorWhiskeyXrayYankeeZulu);

압축 문자열의 모든 대문자를
<newline><letter><colon><space><letter>


이번에는 경쟁력이 있습니까? ;)
Christoph

gzinflate의 결과 와 함께 -13 바이트 gzdeflate(Alfa...Zulu).
Titus

불행하게도, 선행 개행 문자는 허용되지 않으며 (단일) 후행 개행 문자
58 초

@aross : 어제 OP의 의견을보십시오 :and for your other question, yes, but just one.
Titus

4

x86 어셈블리, 512 바이트

NASM으로 컴파일되고 QEMU로 테스트되었습니다. 부팅하려면 부트 섹터의 끝에 2 바이트 부트 서명 (파일에 510 바이트)을 넣어야하므로 컴파일 된 코드를 0으로 채우는 317 바이트를 잃어 버렸습니다. 이것은 내 첫 골프이므로 거대한 오류에 대해 사과해야합니다.

[org 7c00h]     ;So NASM can change the labels into memory locations correctly.

cld             ;Tells lodsb to look forward in memory

mov bh, 65      ;Moves the ASCII value of A into the BH register
mov si, NATO    ;Moves the first byte of NATO into the si register
call print      ;Call the 'print' subroutine

jmp $            ;Loops forever

print:
    mov ah, 0eh ;Moves the hex value 0E into the AH register. Tells interrupt 10h that we want subfucntion 0E
    lodsb       ;Load a byte of SI into AL and increments a register (DL i think) that tells it the offset to look at

    cmp al, 3   ;Compares the AL register that now has a byte from our string to ASCII value 3 (Enf Of Text)
    je R        ;If AL == 3 then jump to R

    cmp al, 0   ;Comapre AL to ASCII 0 (NULL)
    je newWord  ;If AL == 0 hump to newWord
    int 10h     ;Execute interrupt 10h Subfunction 0Eh (stored in AH register) which prints character value in AL
    jmp print   ;Jump to print

newWord:
    mov al, 10  ;Move ASCII 10 (New Line) into AL
    int 10h     ;Print character

    mov al, 13  ;Move ASCII 13 (Carriage Return) into AL
    int 10h     ;Print character

    mov al, bh  ;Move BH (which has our starting letter) into AL
    int 10h     ;Print Character

    mov al, 58  ;Move ASCII 58 (:) into AL
    int 10h     ;Print Character

    mov al, 32  ;Move ASCII 32 (Space) into AL
    int 10h     ;Print Character

    mov al, bh  ;Move BH into AL
    int 10h     ;Print Character

    inc bh      ;Increments BH by one (BH++)
    jmp print   ;Jump to print

R:
    ret         ;Returns from a subroutine

;Below defines bytes (db) of our string to print. I used 0 as word seperators and 3 to end the string.
NATO: db 0,"lfa",0,"ravo",0,"harlie",0,"elta",0,"cho",0,"oxtrot",0,"olf",0,"otel",0,"ndia",0,"uliet",0,"ilo",0,"ima",0,"ike",0,"ovember",0,"scar",0,"apa",0,"uebec",0,"omeo",0,"ierra",0,"ango",0,"niform",0,"ictor",0,"hiskey",0,"ray",0,"ankee",0,"ulu",3

times 0200h - 2 - ($ - $$) db 0 ;Zerofill the file with upto 510 bytes (This is where all my bytes are)
dw 0AA55H   ;Write the bootsignature

산출

위의 코드가 출력하는 것입니다. 보시다시피 A : Alfa 가 누락되었으며 프롬프트의 키가 25 줄이기 때문에 ... 위의 코드 출력

내가 A를 인쇄했음을 증명하기 위해 : Zulu가 Yankee와 같은 줄에 있도록 알파 로 교체 0,"ulu"했습니다 32,"Z: Zulu". 변경된 코드

누군가 내 코드에서 317 바이트의 zerofill을 빼면 195 바이트가 될 것이라고 말하면 감사하겠습니다. 또한 출력이 화면에 맞지 않기 때문에 이것이 유효한 경우.



4

C (MinGW, Clang), 218 바이트

@gastropner에게 감사합니다!

i;f(){char s[]="lfa:ravo:harlie:elta:cho:oxtrot:olf:otel:ndia:uliet:ilo:ima:ike:ovember:scar:apa:uebec:omeo:ierra:ango:niform:ictor:hiskey:ray:ankee:ulu";for(i=64;++i<91;)printf("%c: %c%s\n",i,i,strtok(i^65?0:s,":"));}

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

C, 259 236 바이트

i;f(){char*s="lfa\0ravo\0harlie\0elta\0cho\0oxtrot\0olf\0otel\0ndia\0uliet\0ilo\0ima\0ike\0ovember\0scar\0apa\0uebec\0omeo\0ierra\0ango\0niform\0ictor\0hiskey\0ray\0ankee\0ulu";for(i=64;++i<91;s+=strlen(s)+1)printf("%c: %c%s\n",i,i,s);}

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


이것을 어떻게 컴파일합니까?
Itay Grudev

1
@ItayGrudev, GCC 및 Clang은 모두 그대로 컴파일해야합니다. gcc src.c또는 clang src.c. 다음은 코드가 실제로 링크되고 실행되도록 기본 기능이 추가 된 샘플 실행입니다. ideone.com/4Eowlh
chris

@ chris 그런 다음 4 바이트를 희생 시키면 코드를 유효 f하게 바꾸 main거나 골프 규칙을 놓치지 않아야 합니다 .
Itay Grudev

2
@ItayGrudev, 내가 보는 방식으로, 질문은 기능을 요구하는 것이지 완전하고 자급적인 프로그램은 아니었다.
chris

1
218 은 strtok ()으로, 일부는 i;f(){char s[]="lfa:ravo:harlie:elta:cho:oxtrot:olf:otel:ndia:uliet:ilo:ima:ike:ovember:scar:apa:uebec:omeo:ierra:ango:niform:ictor:hiskey:ray:ankee:ulu";for(i=64;++i<91;)printf("%c: %c%s\n",i,i,strtok(i^65?0:s,":"));}불분명합니다. TIO segfaults이지만 최소한 MinGW에서는 작동합니다. 작동 하지 않는 이유를 많이 볼 수 없습니다 .
gastropner

3

Gema, 168 자

\A=@subst{?<J>=\?: \$0\\n;AlfaBravoCharlieDeltaEchoFoxtrotGolfHotelIndiaJulietKiloLimaMikeNovemberOscarPapaQuebecRomeoSierraTangoUniformVictorWhiskeyXrayYankeeZulu}@end

샘플 실행 :

bash-4.3$ gema '\A=@subst{?<J>=\?: \$0\\n;AlfaBravoCharlieDeltaEchoFoxtrotGolfHotelIndiaJulietKiloLimaMikeNovemberOscarPapaQuebecRomeoSierraTangoUniformVictorWhiskeyXrayYankeeZulu}@end' | head
A: Alfa
B: Bravo
C: Charlie
D: Delta
E: Echo
F: Foxtrot
G: Golf
H: Hotel
I: India
J: Juliet


2

파이썬 2 , 198 바이트

for x in'Alfa Bravo Charlie Delta Echo Foxtrot Golf Hotel India Juliet Kilo Lima Mike November Oscar Papa Quebec Romeo Sierra Tango Uniform Victor Whiskey Xray Yankee Zulu'.split():print x[0]+': '+x

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

흥미 롭거나 영리하지 않습니다. 목록을 반복하면서 첫 글자를 인쇄 한 다음 ':'를 입력 한 다음 전체 단어를 인쇄합니다.


2

PHP, 184 바이트 179 바이트 178

<?=preg_filter('/(.)[a-z]+/',"$1: $0
",AlfaBravoCharlieDeltaEchoFoxtrotGolfHotelIndiaJulietKiloLimaMikeNovemberOscarPapaQuebecRomeoSierraTangoUniformVictorWhiskeyXrayYankeeZulu);

preg_replace 대신 preg_filter를 사용하여 단일 바이트를 저장했습니다.


원래 답변 184 바이트 179 바이트

for($c=A;$s=[lfa,ravo,harlie,elta,cho,oxtrot,olf,otel,ndia,uliet,ilo,ima,ike,ovember,scar,apa,uebec,omeo,ierra,ango,niform,ictor,hiskey,ray,ankee,ulu][+$i++];$c++)echo"$c: $c$s
";

정렬 된 사실을 사용하여 첫 번째 문자를 즉석에서 생성합니다.

@Titus가 5 바이트를 절약했습니다.


2
를 사용하여 원본을 180-1까지 골프를 치십시오 for($c=A;$s=[lfa,...,ulu][+$i++];$c++)echo"$c: $c$s\n";. 그래도 좋은 정규식.
Titus

@Titus 나는 더 나은 방법이 있어야하지만 preg로 전환해야한다는 것을 명심했다. 팁 고마워 !
Christoph

2

SOGL , 91 바이트

╗D↕«∙φā¡75↔TI.½!γΜΧ…¡%<F┼0h╔κy|▓@TņV≈%⁹cr_σy░mgļΕžΕ⅝ »τ{M╔|«▼↔»aΓ²⁹┘′⅓G…└g↔bFΞ‽‘θ{KUtƧ: ooo

설명:

...‘θ{KUtƧ: ooo  that gibberish is a compressed string                 
...‘             push the compressed string of the words
    θ            split on spaces
     {           for each
      K          pop the 1st letter off & push it
       U         uppercase it
        t        output in newline a copy of the letter
         Ƨ: o    append ": "
             o   append the alphabet letter
              o  append the rest of the word

2

GNU sed , 165 바이트

이 스크립트는 Martin Ender 의 Retina 답변 을 기반으로합니다 .

s/$/AlfaBravoCharlieDeltaEchoFoxtrotGolfHotelIndiaJulietKiloLimaMikeNovemberOscarPapaQuebecRomeoSierraTangoUniformVictorWhiskeyXrayYankeeZulu/
s/[A-Z]/\n&: &/g
s/.//

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

설명:

s/$/AlfaBravoCharlieDeltaEchoFoxtrotGolfHotelIndiaJulietKiloLimaMikeNovemberOscarPapaQuebecRomeoSierraTangoUniformVictorWhiskeyXrayYankeeZulu/
   # generate the alphabet words in concatenated form
s/[A-Z]/\n&: &/g
   # prepend '\nUL: ' before each upper-case letter (UL), getting the needed format
s/.//
   # delete the leading newline, plus implicit printing at the end

2

배쉬 , 184 바이트

printf '%c: %s
' {Alfa,Bravo,Charlie,Delta,Echo,Foxtrot,Golf,Hotel,India,Juliet,Kilo,Lima,Mike,November,Oscar,Papa,Quebec,Romeo,Sierra,Tango,Uniform,Victor,Whiskey,Xray,Yankee,Zulu}{,}

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


+1. {,}중괄호 확장 의 트릭은 각 목록 멤버를 두 배로 늘리는 매우 영리한 방법입니다!
디지털 외상

2

루아, 278260 바이트

18 바이트를 절약 한 Manatwork 에 다시 한 번 감사드립니다 !

function f(w)print(w.sub(w,0,1)..": "..w)end
f"Alfa"f"Bravo"f"Charlie"f"Delta"f"Echo"f"Foxtrot"f"Golf"f"Hotel"f"India"f"Juliet"f"Kilo"f"Lima"f"Mike"f"November"f"Oscar"f"Papa"f"Quebec"f"Romeo"f"Sierra"f"Tango"f"Uniform"f"Victor"f"Whiskey"f"Xray"f"Yankee"f"Zulu"

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


이전 버전

a={"Alfa","Bravo","Charlie","Delta","Echo","Foxtrot","Golf","Hotel","India","Juliet","Kilo","Lima","Mike","November","Oscar","Papa","Quebec","Romeo","Sierra","Tango","Uniform","Victor","Whiskey","Xray","Yankee","Zulu"}
for i=1,26 do print(a[i].sub(a[i],0,1) .. ": " .. a[i]) end

https://repl.it/GK8J

루아를 처음했을 때는 골프를 더 많이 할 수 있지만 어쨌든 대답으로 추가 할 것이라고 생각했습니다.


내 질문 이 지루해질 수 있지만 다시 한 번 : 왜 변수 a입니까? ;) 전체 배열 선언을 내부로 이동할 수 있습니다 for. 그리고 for.. in구문은 긴 배열 인덱스를 작성하지 않도록 도와줍니다. pastebin.com/rxck79md Weird Lua 일 : 함수를 선언하고 함수를 26 번 "수동으로"(루프가 아닌) 26 번 호출하면 pastebin
manatwork

¯\_(ツ)_/¯전에는 루아를 사용한 적이없는 간단한 이유 때문에 설명서를 따라 작동하려고했습니다. 정보에 대한 @manatwork 감사합니다, 나는 그것에 대해 몰랐습니다.
ʰᵈˑ

2

루아 , 177 바이트

print(("AlfaBravoCharlieDeltaEchoFoxtrotGolfHotelIndiaJulietKiloLimaMikeNovemberOscarPapaQuebecRomeoSierraTangoUniformVictorWhiskeyXrayYankeeZulu"):gsub('%u',"\n%1: %1"):sub(2))

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

줄 바꿈없이 180 바이트 :

io.write(("AlfaBravoCharlieDeltaEchoFoxtrotGolfHotelIndiaJulietKiloLimaMikeNovemberOscarPapaQuebecRomeoSierraTangoUniformVictorWhiskeyXrayYankeeZulu"):gsub('%u',"\n%1: %1"):sub(2))

설명

str = "AlfaBravoCharlieDeltaEchoFoxtrotGolfHotelIndiaJulietKiloLimaMikeNovemberOscarPapaQuebecRomeoSierraTangoUniformVictorWhiskeyXrayYankeeZulu"
str = str:gsub('%u',"\n%1: %1") -- returns "\nA: Alfa...". %u matches uppercase letters, %1 returns matched letter in this case.
str = str:sub(2) -- remove added newline in the beginning
print(str) -- native print command

Lua의 string.gsub 대체 함수를 사용하여 대문자와 패턴을 일치시킵니다. 그런 다음 문자가 요청 된 형식 (문자 자체)으로 바뀝니다. 줄 바꾸기도 같은 패스에 추가됩니다.

마지막에있는 하위 기능은 처음부터 줄 바꿈을 잘라 내고 교체 량 인 gsub의 두 번째 반환 값을 숨기도록 잘 작동합니다.


2

PowerShell , 187 185 바이트

0..25|%{($a=[char]($_+65))+": $a"+(-split'lfa ravo harlie elta cho oxtrot olf otel ndia uliet ilo ima ike ovember scar apa uebec omeo ierra ango niform ictor hiskey ray ankee ulu')[$_]}

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

루프에서 025각각 반복 형성 $a대응 자본 char. 그런 다음 문자열로 묶습니다 : $a(즉, 콜론 공백 문자). 그런 다음 해당 문자열은 -split발음 문자열을 공백에 배치하여 생성 된 배열로 인덱싱하여 형성된 문자열과 문자열로 연결됩니다 . 이 26 개의 문자열 각각은 파이프 라인에 남아 Write-Output있으며 프로그램 완료시 내재적으로 발생하여 요소 사이에 개행을 삽입합니다.

@Matt 덕분에 2 바이트를 절약했습니다.


좋은. 각 단어의 첫 문자를 제거해도 나에게도 발생하지 않았습니다. 이 작업을 수행하면 2 바이트를 잘라낼 수 있습니다.0..25|%{($a=[char]($_+65))+": $a"+(-split'lfa ravo harlie elta cho oxtrot olf otel ndia uliet ilo ima ike ovember scar apa uebec omeo ierra ango niform ictor hiskey ray ankee ulu')[$_]}
Matt

@Matt 오, 물론 말이됩니다. 감사!
AdmBorkBork

2

C, 216 (215) 212 바이트

i=64,l;f(){for(char*s="lfAravOharliEeltAchOoxtroTolFoteLndiAulieTilOimAikEovembeRscaRapAuebeComeOierrAangOniforMictoRhiskeYraYankeEulU";++i<91;printf("%c: %c%.*s%c\n",i,i,l,s,s[l]+32),s+=l+1)for(l=0;s[++l]>90;);}

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

프로그램의 상세하고 사람이 읽을 수 있고 주석이 달린 완벽하게 유효한 (컴파일러 경고 없음) 버전은 아래에서 찾을 수 있습니다.

#include <stdio.h>

int main() {
    // Uppercase characters designate the last character of a word
    char*s="lfAravOharliEeltAchOoxtroTolFoteLndiAulieTilOimAikEovembeRscaRapAuebeComeOierrAangOniforMictoRhiskeYraYankeEulU";

    int i = 64; // Consecutive character
    int l; // Word length

    // Loop `i` from A to Z; Shift `s` with word length
    // `s` always points to the beginning of a word
    for( ; ++i < 91; s += l + 1 ) {
        // Increment `l` until you reach the next capital letter
        for( l = 0; s[++l] > 90 ;);
        // Print the current character, the word without it's last letter
        // and the last letter lowercased
        printf( "%c: %c%.*s%c\n", i, i, l, s, s[l]+32 );
    }
}

1
PPCG에 오신 것을 환영합니다! 좋은 첫 포스트!
Rɪᴋᴇʀ

@ceilingcat는뿐만 아니라 char*s하지만이 printf너무 거기에 갈 수있다. 따라서 다른 3 바이트-세미콜론과 2 개의 중괄호를 저장하면 본문에 하나의 명령 만 있기 때문에 더 이상 필요하지 않으므로 다른 for루프입니다.
Itay Grudev

2

자바 스크립트 ES6, 216 187 184 180 174 바이트

"AlfaBravoCharlieDeltaEchoFoxtrotGolfHotelIndiaJulietKiloLimaMikeNovemberOscarPapaQuebecRomeoSierraTangoUniformVictorWhiskeyXrayYankeeZulu".replace(/[A-Z]/g,`
$&: $&`).trim()

Neil 덕분에 바이트를 절약했습니다. ETH 프로덕션 덕분에 5 바이트를 절약했습니다.

console.log("AlfaBravoCharlieDeltaEchoFoxtrotGolfHotelIndiaJulietKiloLimaMikeNovemberOscarPapaQuebecRomeoSierraTangoUniformVictorWhiskeyXrayYankeeZulu".replace(/[A-Z]/g,`
$&: $&`).trim());

Japt , 127 바이트

`AlfaBŸvoC•r¦eDeltaE®oFoxÉ•GolfHÇUI˜iaJªietKiloL‹aMikeNovem¼rOs¯rPapaQue¼cRo´oSi€ŸTÂ
UnifŽmVÅ¡rW–skeyXŸyY„keeZªu`r"%A""
$&: $&

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

obarakon 덕분에 2 바이트를 절약했습니다.


나는 당신이 그 새로운 줄 바꿈을 어떻게 제거 할 수 있는지 궁금해했다. 실제로 A: A문자열 앞에 추가 하는 이전의 접근법보다 실제로 바이트가 더 저렴했을 것이다 . 그러나 대신 리터럴 개행 문자를 사용하여 다른 바이트를 저장할 수 있습니다 \n.
Neil

좋은 답변입니다. Japt에서도 리터럴 개행을 사용할 수 있습니다. 또한 replace는 두 번째 인수에 문자열을 허용하고 그 $&안에 있는 s를 일치하는 것으로 대체 하므로 "\n$&: $&"함수를 사용하는 대신 두 lang에 대해 수행 할 수 있습니다 .
ETHproductions

@"\n{X}: {X}"}Japt에서 다음 과 같이 변경할 수 있습니다. "\n$&: $&":-)
ETHproductions

@ETHproductions 도와 주셔서 감사합니다!
Tom

좋은 대답입니다! 를 삭제 하고 입력에 플래그를 " x삽입 하여 몇 바이트를 저장할 수 있습니다 -x. 플래그는 총 바이트에 1 바이트를 추가합니다.
Oliver

2

PHP, 175 171 164 162 바이트

참고 : 더 이상 압축 파일이 필요하지 않으며 IBM-850 인코딩을 사용합니다.

for($l=A;$c=LfaRavoHarlieEltaChoOxtrotOlfOtelNdiaUlietIloImaIkeOvemberScarApaUebecOmeoIerraAngoNiformIctorHiskeyRayAnkeeUlu[$i++];)echo$c<a?"
$l: ".$l++:"",$c|~▀;

다음과 같이 실행하십시오.

php -nr 'for($l=A;$c=LfaRavoHarlieEltaChoOxtrotOlfOtelNdiaUlietIloImaIkeOvemberScarApaUebecOmeoIerraAngoNiformIctorHiskeyRayAnkeeUlu[$i++];)echo$c<a?"
$l: ".$l++:"",$c|~▀;';echo

설명

모든 문자를 개별적으로 인쇄합니다 (공백이있는 OR로 소문자로 표시). 대문자가 발견되면 먼저 "\ nA : A"형식의 문자열을 인쇄합니다.

조정

  • 다른 압축 전략을 사용하여 4 바이트 절약
  • 다른 구분 기호 ( $lexplode param과의 할당을 결합 )를 사용하여 선행 바이트를 막지 않고 7 바이트를 절약했습니다.
  • 새로운 방법으로 2 바이트 저장

1

JAPT, 216 214 바이트

`A: Alfa
B: Bvo
C: Cr¦e
D: Delta
E: E®o
F: FoxÉ
G: Golf
H: HÇU
I: Iia
J: Jªiet
K: Kilo
L: La
M: Mike
N: Novem¼r
O: Os¯r
P: Papa
Q: Que¼c
R: Ro´o
S: Si
T: TÂ
U: Unifm
V: VÅ¡r
W: Wskey
X: Xy
Y: Ykee
Z: Zªu

설명 : 훨씬 더 좋은 방법이 있지만 내가 처음이기 때문에 나는 그것을 모른다. 기본적으로 문자열을 Oc로 압축하고 Od를 사용하여 압축 해제 할 문자열을 넣습니다. "

누군가 줄 바꿈과 다른 것을 사용하여 바이트를 절약하도록 돕고 싶다면 기꺼이 배우십시오!

편집 : Od 대신`를 사용하여 2 바이트를 절약했습니다.


사용하여 온라인으로보십시오! 원하는 결과를 :/
얻지 못함

@ ʰᵈˑ 네, 가능합니다. 일을 시작하기 전에 모든 것을 확인할 시간이 충분하지 않았습니다. 퇴근 후 다시 (그리고 더 잘) 할 수 있습니다.
Martijn Vissers

1
@ ʰᵈˑ 문자열에 인쇄 할 수없는 것들이 마크 다운에 표시되지 않습니다. 온라인으로 사용해보십시오!
ETHproductions

@ETHproductions 아 감사합니다, 나는 몰랐다
ʰᵈˑ

1

파이크, 89 바이트

.d⻵㡺ᐒଆຳ뼙΋ÒΗ䊊繎ㅨڨǔᯍⰬᐓ❤ᄵ㤉ተ᤬䆰髨⨈性dc Fl5DhRJ": 

이러한 문자가 특정 단일 바이트 문자 세트에 있습니까?
Adám

TIO는 잘못된 평가 오류를 발생시키고 메시지에 161 바이트를보고합니다. Pyke가 밀어 붙이거나 복사 및 붙여 넣기에 문제가 발생했습니다. @ Adám 1-1이면 41 바이트, utf-8은 88이지만 무언가는 분명히 조금 벗어납니다.
Jonathan Allan

@JonathanAllan UTF-8이어야합니다. TIO는 UTF-8이 아닌 실행합니다. 바이트 수는 UTF-8로 측정되기 때문에 잘못되었을 수 있습니다.
Blue

1

Qbasic, 383 바이트

인상적이지는 않지만 가치가있는 것 :

dim a(1to 26)as string
a(1)="lfa
a(2)="ravo
a(3)="harlie
a(4)="elta
a(5)="cho
a(6)="oxtrot
a(7)="olf
a(8)="otel
a(9)="ndia
a(10)="uliet
a(11)="ilo
a(12)="ima
a(13)="ike
a(14)="ovember
a(15)="scar
a(16)="apa
a(17)="uebec
a(18)="omeo
a(19)="ierra
a(20)="ango
a(21)="niform
a(22)="ictor
a(23)="hiskey
a(24)="ray
a(25)="ankee
a(26)="ulu
for i=1to 26
?chr$(i+64);": ";chr$(i+64);a(i)
next

오래된 BASIC 메모리… datareadfor.. next루프 내부에 저장할 수 없습니까 ?
manatwork

@manatwork, 그것은 좋은 생각이다; 나는 그것을 생각하지 않았다!
anonymous2

단순히 ?"A: Alfa"360 바이트만이 아니겠습니까 ?
oerkelens

@ oerkelens, 당신이 옳을 수 있습니다. 나는 가능성조차 고려하지 않았다. :)
anonymous2

1

/// , 220 바이트

/;/: /A;Alfa
B;Bravo
C;Charlie
D;Delta
E;Echo
F;Foxtrot
G;Golf
H;Hotel
I;India
J;Juliet
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

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

@ETHproductions 덕분에 -20 바이트


어렵지 않고 20 바이트를 절약합니다. 온라인으로 사용해보십시오!
ETHproductions

@ETHproductions 나는 그것을 얻는다 ... 어떤 이유로 나는 그것을 너무나 생각하고 있었다. 답변을 업데이트하겠습니다.
스파클 포니 동지
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.