ชาร์ลีออสการ์เดลต้าก้อง


30

ส่วนใหญ่ของการสื่อสารทางวิทยุคือNATO Phonetic Alphabetซึ่งเข้ารหัสตัวอักษรเป็นคำเพื่อให้เข้าใจง่ายขึ้น งานของคุณถ้าคุณต้องการที่จะยอมรับมันคือการพิมพ์ทีละคน

คุณต้องพิมพ์สตริงที่แน่นอนนี้เพื่อ 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

กฎ:

  • โปรแกรมของคุณไม่มีการป้อนข้อมูล
  • ช่องโหว่มาตรฐานไม่ได้รับอนุญาต
  • หากมีภาษาบิวอินในภาษาของคุณที่เปลี่ยนตัวอักษรให้เป็นคู่ชีวิตของนาโต้คุณไม่สามารถใช้มันได้ (ฉันกำลังดูคุณ Mathematica)
  • คุณอาจมีช่องว่างต่อท้ายและขึ้นบรรทัดใหม่หนึ่งบรรทัด


4
ฉันกำลังปิดสิ่งนี้ในฐานะล่อลวงเพราะมันไม่มีโครงสร้างที่สามารถใช้ประโยชน์ได้ซึ่งจะช่วยให้แผนการบีบอัดแบบกำหนดเองทำงานได้ดีกว่าการบีบอัดในตัวและความท้าทายเป้าหมายคือความท้าทายมาตรฐานของเราสำหรับการบีบอัดในตัว
Mego

1
ที่เกี่ยวข้องอย่างใกล้ชิด. หากมีสิ่งใดที่ฉันเรียกมันว่าเป็นผู้ล่อลวงของสิ่งนี้ แต่มันอนุญาตให้คนเลือกคำของตัวเองซึ่งทำให้การบีบอัดมีความเป็นไปได้มากขึ้น
Martin Ender

3
ไม่ควรเป็นคนแรกที่จะเป็นA: Alpha?
SeanC

3
@SeanC: ตามวิกิพีเดีย (ดูลิงค์ในคำถาม) ไม่มี นั่นคือ ATIS ไม่ใช่นาโต้ แต่แล้วมันควรจะเป็นJuliettไม่ได้JulietและแทนX-ray Xray
ติตัส

คำตอบ:


18

Python 2 , 189 186 ไบต์

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") ในพจนานุกรมของ Jelly (ยกเว้น" 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
Kevin Cruijssen

1
@KevinCruijssen (1) ใช่มันเป็นไปได้ที่จะใช้ตัวอักษรตัวแรกของแต่ละคำอย่างไรก็ตามมันจะไม่สั้นเนื่องจากการให้ตัวอักษรเป็นอะตอมสองไบต์ (2) ใช่มันเป็นไปได้ที่จะแยกตัวอักษรพิมพ์ใหญ่ แต่น่าประหลาดใจที่การบีบอัดสตริงที่ไม่มีช่องว่างนั้นยาวไปกว่านี้ (หลาย ๆ คำที่มีช่องว่างนำอยู่ในพจนานุกรมเช่นเดียวกับที่ใช้ตัวพิมพ์ใหญ่ทั้งหมด)
Jonathan Allan

2
พจนานุกรมไม่มีการเว้นวรรคนำหน้า อย่างไรก็ตามเมื่อทำการแตกหลายคำในหนึ่งแถวค่าเริ่มต้นคือการแยกคำเหล่านั้นด้วยช่องว่าง คำแรกจะไม่มีที่ว่าง แต่คำต่อไปนี้ทั้งหมดจะ
Dennis


11

05AB1E , 102 98 ไบต์

บันทึกแล้ว 4 ไบต์ด้วยErik the Outgolfer

”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 the Outgolfer

@EriktheOutgolfer: ขอบคุณ! ฉันแน่ใจว่าฉันค้นหาpaและliในพจนานุกรม แต่ฉันต้องคิดถึงพวกเขา ฉันไม่ได้พิจารณาyaและzuคำแม้ว่า :)
Emigna

6

Ruby, 169 ตัวอักษร

(ขึ้นหนักในโจนาธานอัลลัน 's งูหลาม 2การแก้ปัญหา. ถ้าคุณชอบความคิดที่โปรด upvote คำตอบที่เดิม.)

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

Java 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

Octave, 215 210 209 bytes

บันทึก 5 ไบต์ขอบคุณ Luis Mendo ฉันบันทึก 4 ไบต์ขอบคุณ Luis Mendo แต่การเปลี่ยนวิธีการช่วยฉันประหยัดอีกหนึ่ง

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

ลองออนไลน์!

ถ้าฉันกำจัดช่องว่างฉันจะประหยัด 25 ไบต์ แต่จากนั้นฉันต้องใช้ regex Regex นั้นมีราคาค่อนข้างสูงเพียงไม่กี่ไบต์และมันจะลบอักษรตัวใหญ่ของคำทุกคำทิ้งฉันด้วยคำว่า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' ...

ขอบคุณ! นี่มันยุ่งกว่าหน่อย! และสามไบต์นานกว่านี้ ...
Stewie Griffin

อาใช่'split'จะอยู่ที่นี่นานกว่านี้
Luis Mendo

'split'สั้นลง: 209 :)
Stewie Griffin

ฉันเห็น! ทำได้ดี!
Luis Mendo

คุณสามารถแยกช่องว่างและบันทึกอีก 5 ไบต์
Luis Mendo

5

PHP, 202 227 196 187 ไบต์

ขอบคุณDewi Morgan ที่ช่วยประหยัด 9 ไบต์

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

https://repl.it/GMkH/1


รุ่นเก่ากว่า

ขอบคุณmanatworkและinsertusername ที่นี่สำหรับการบันทึก 31 ไบต์!

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

https://eval.in/749541

ขอขอบคุณที่insertusernamehereสำหรับสังเกตเห็นผลลัพธ์ที่ผิดกับรุ่นก่อนหน้านี้

$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อีกต่อไป
จัดการ

แต่คงดีกว่าใช้ความคุ้มค่า:PREG_SPLIT_NO_EMPTY 1แต่โดยส่วนตัวแล้วฉันจะปรับแต่งการแสดงออกปกติแทน: /\B(?=[A-Z])/.
จัดการ

1
ขอบคุณ @insertusername ที่นี่ฉันจะทำให้การแก้ไขนั้นตอนนี้:Dยังคงคุ้นเคยกับ codegolfing
ʰᵈˑ

preg_splitที่จะเป็นหนึ่งไบต์สั้นกับอาร์เรย์ธรรมดาแทน
ติตัส

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

-13 ไบต์กับไอเอ็นจีผลมาจากการgzinflate gzdeflate(Alfa...Zulu)
Titus

แต่น่าเสียดายที่ไม่มีการขึ้นบรรทัดใหม่ชั้นนำที่ได้รับอนุญาตเท่านั้น (เดี่ยว) ต่อท้ายบรรทัดใหม่
aross

@aross: ดูความคิดเห็นของ OP เมื่อวานนี้:and for your other question, yes, but just one.
Titus

4

x86 ชุดประกอบ 512 ไบต์

รวบรวมด้วย NASM และทดสอบด้วย QEMU ในการบูตคุณต้องใส่ลายเซ็นการบูต 2 ไบต์ที่ท้ายบูท bootsector (510 ไบต์ลงในไฟล์) ดังนั้นฉันเสีย 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 บรรทัด ... Above codes output

เพื่อพิสูจน์ว่าฉันพิมพ์A: Alfaฉันแทนที่0,"ulu"ด้วย32,"Z: Zulu"เพื่อให้ Zulu เป็นหนึ่งในบรรทัดเดียวกันกับ Yankee Changed code

ฉันจะขอบคุณถ้ามีคนบอกฉันว่าฉันจะสามารถลบ zerofill 317 ไบต์จากรหัสของฉันดังนั้นมันจะเป็น 195 ไบต์ นอกจากนี้หากใช้งานได้ดีเพราะเอาต์พุตไม่พอดีกับหน้าจอ


4

Python 2 , 186 182 ไบต์

print''.join('\n%s: '%c*('['>c)+c for c in'AlfaBravoCharlieDeltaEchoFoxtrotGolfHotelIndiaJulietKiloLimaMikeNovemberOscarPapaQuebecRomeoSierraTangoUniformVictorWhiskeyXrayYankeeZulu')

ลองออนไลน์!


2
ดูความคิดเห็นเกี่ยวกับคำถาม: ขึ้นบรรทัดใหม่ชั้นนำหนึ่งคือ (ตอนนี้) ได้รับการยอมรับ
ติตัส

ยินดีต้อนรับสู่ PPCG! สิ่งที่ดี
Jonathan Allan

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,":"));}ไม่ชัดเจนถ้ามันทำงานได้ทุกที่: TEG 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

3

Bash , 224 205 188 180 ไบต์

ขอบคุณDigital Traumaสำหรับการลบ 17 ไบต์และการจัดการ 8 ไบต์

set {A..Z}
for i 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;{ echo $1: $1$i;shift;}

ลองออนไลน์!



อาร์เรย์การจัดทำดัชนีaยาวเกินไป set {A..Z};for i in lfa … ulu;{ echo $1: $1$i;shift;}
จัดการ

2

Python 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_filter แทน preg_replace


คำตอบเดิม 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
";

ใช้ความจริงที่ว่ามันถูกเรียงลำดับเพื่อสร้างตัวอักษรตัวแรก

บันทึก 5 ไบต์โดย @Titus


2
กอล์ฟลงเดิมของคุณ 180-1 for($c=A;$s=[lfa,...,ulu][+$i++];$c++)echo"$c: $c$s\n";กับ Regex ดีแม้ว่า
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 bytes

สคริปต์นี้มีพื้นฐานมาจากคำตอบที่ Retinaโดย Martin Ender

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

Bash, 184 bytes

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}{,}

Try it online!


+1. The {,} trick in the brace expansion is a very clever way to double up each list member!
Digital Trauma

2

Lua, 278 260 bytes

Thanks again to Manatwork for saving 18 bytes!

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"

Try it online


Older versions

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

First time doing Lua, do probably can golf more, but thought I'd add it as an answer anyways.


My question may become boring, but again: Why variable a? ;) You can move the entire array declaration inside the for. And the for..in syntax helps to avoid writing those long array indices: pastebin.com/rxck79md Weird Lua thing: if you declare a function and call it 26 times “manually” (I mean, not in a loop) is shorter: pastebin.com/FMF9GmLJ
manatwork

¯\_(ツ)_/¯ for the simple reason that I never used Lua before so I was just following the manual to try make it work, aha. Thanks @manatwork for the info, I didn't know about that.
ʰᵈˑ

2

Lua, 177 bytes

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

Try it online!

Without trailing newline, 180 bytes:

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

Explanation

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

It uses Lua's string.gsub substitution function to pattern match the uppercase letters. The letters are then replaced with the requested format (plus the letters themselves). Newlines are also added on the same pass.

The sub-function at the end just trims out newline from the beginning and also works nicely to hide the second return value of gsub, which would have been the amount of replacements.


2

PowerShell, 187 185 bytes

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')[$_]}

Try it online!

Loops from 0 to 25, each iteration forming $a of the corresponding capital char. Then string-concatenated with : $a (i.e., the colon-space-letter). Then that string is string-concatenated with an string that's formed by indexing into an array created by -splitting the phonetic string on spaces. Each of those 26 strings is left on the pipeline, and an implicit Write-Output happens at program completion, inserting a newline between elements.

Saved two bytes thanks to @Matt.


Nice. Removing the first character of each word didn't even occur to me. You can chop off 2 bytes doing this: 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 Oh sure, that makes sense. Thanks!
AdmBorkBork

2

C, 216 215 212 bytes

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

Try it online!

A detailed, human readable, well commented and perfectly valid (no compiler warnings) version of the program can be found below:

#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
Welcome to PPCG! Nice first post!
Rɪᴋᴇʀ

@ceilingcat Not only the char*s but the printf could go in there too. Thus saving another 3 bytes - a semicolon and 2 curly braces as we no longer need them since there is only one instruction in it's body - the other for loop.
Itay Grudev

2

JavaScript ES6, 216 187 184 180 174 bytes

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

Saved a byte thanks to Neil. Saved 5 bytes thanks to ETHproductions.

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

Japt, 127 bytes

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

Try it online!

Saved 2 bytes thanks to obarakon.


I was wondering how else you could get rid of that leading newline - it would have actually been a byte cheaper than your previous approach to manually prepend A: A to the string. But you can still save another byte by using a literal newline character instead of \n.
Neil

Nice answers. You can use a literal newline in Japt as well. Also, replace accepts a string for its second argument and replaces any $&s in it with the match, so you can do e.g "\n$&: $&" for both langs instead of using functions.
ETHproductions

You can change @"\n{X}: {X}"} in Japt to just "\n$&: $&" :-)
ETHproductions

@ETHproductions Thanks for the help!
Tom

Nice answer! You can save a couple bytes by dropping the " x and inserting a -x flag into the input. Note that the flag adds 1 byte to the total bytes.
Oliver

2

PHP, 175 171 164 162 bytes

Note: no longer requires compressed file, uses IBM-850 encoding.

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

Run like this:

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

Explanation

Prints every character individually (lowercased by OR with a space). If an uppercase character is encountered, it first prints a string of the form "\nA: A".

Tweaks

  • Saved 4 bytes by using another compression strategy
  • Saved 7 bytes by using a different delimiter (to combine assignment of $l with explode param), and not preventing a leading newline
  • Saved 2 bytes with a new method

1

Japt, 216 214 bytes

`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

Explaination: There is most likely a much better way to do it, but since i'm new I don't know it. I basically compressed the string with Oc" and put that string to be decompressed using Od"

If someone wants to help me save bytes by using something different from line breaks, I'd be happy to learn!

edit: Saved 2 bytes using ` instead of Od"


Using Try it online! it doesn't give the desired result :/
ʰᵈˑ

@ʰᵈˑyes that could be, I didn't have enough time to check everything before I had to go to work. I might do it again (and better) after work.
Martijn Vissers

1
@ʰᵈˑ There are some unprintables in the string which don't show up in the Markdown. Try it online!
ETHproductions

@ETHproductions ah thanks for that, I didn't know
ʰᵈˑ

1

Pyke, 89 bytes

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

Do these characters happen to be in a specific single byte character set?
Adám

TIO gives a bad eval error and reports 161 bytes in the message. Either Pyke needs pushing there or something went wrong with a copy and paste here. @Adám if it was 1-1 it would be 41 bytes, utf-8 would be 88, but something definitely looks a bit off.
Jonathan Allan

@JonathanAllan it should be UTF-8. TIO runs it in not UTF-8. I think the byte-count might be wrong because it's measured as UTF-8
Blue

1

Qbasic, 383 bytes

Not impressive, but for what it's worth:

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

Old BASIC memories… Can't those be stored in a data statement then read inside the for..next loop?
manatwork

@manatwork, that's a good idea; I hadn't thought of it!
anonymous2

Wouldn't simply ?"A: Alfa" and so on be only 360 bytes?
oerkelens

@oerkelens, you could be right. I didn't even consider the possibility. :)
anonymous2

1

///, 220 bytes

/;/: /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

Try it online!

-20 bytes thanks to @ETHproductions.


It's not hard, and it saves 20 bytes: Try it online!
ETHproductions

@ETHproductions I get it... for some reason I was overthinking it. I will update the answer.
Comrade SparklePony
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.