Charlie, Oscar, Delta, Echo


30

Sebagian besar komunikasi radio adalah NATO Phonetic Alphabet , yang menyandikan huruf sebagai kata-kata untuk membuatnya lebih mudah dipahami daripada comms. Pekerjaan Anda, jika Anda ingin menerimanya, adalah mencetaknya satu per satu.

Anda harus mencetak string ini ke 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

Aturan:

  • Program Anda tidak menerima input
  • Celah standar dilarang .
  • Jika ada bawaan dalam bahasa Anda yang mengubah huruf menjadi equivelants NATO mereka, Anda tidak dapat menggunakannya (Saya melihat Anda Mathematica).
  • Anda mungkin memiliki spasi tambahan dan satu baris tambahan.


4
Saya menutup ini sebagai penipuan karena tidak memiliki struktur yang dapat dieksploitasi yang memungkinkan skema kompresi khusus untuk melakukan lebih baik daripada kompresi bawaan, dan tantangan target adalah tantangan standar de facto kami untuk kompresi bawaan.
Mego

1
Erat terkait. Kalau pun saya menyebutnya penipuan yang satu ini, tetapi itu memungkinkan orang untuk memilih kata-kata mereka sendiri yang sebenarnya membuat kompresi jauh lebih mungkin.
Martin Ender

3
bukankah seharusnya yang pertama A: Alpha?
SeanC

3
@SeanC: Menurut wikipedia (lihat tautan di pertanyaan), no. Itu ATIS, bukan NATO. Tapi kemudian, seharusnya Juliett, bukan Julietdan X-raybukannya Xray.
Titus

Jawaban:


18

Python 2 , 189 186 byte

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

Cobalah online!


Sebelumnya: (ini keren, tapi saya menyadari bahwa versi yang lebih sederhana dapat dibuat lebih pendek dengan satu byte)

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

12

Jelly , 76 byte

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

Cobalah online!

Bagaimana?

Cukup banyak nilai kamus dan kompresi. Kode antara dan »hanya nilai terkompresi yang akan membentuk string "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"dengan mencari semua kata (dengan awalan spasi tunggal, kecuali untuk "Alfa") dalam kamus Jelly (kecuali " Xray"yang tidak ada dalam kamus, jadi nilai string langsung " X"dan kamus entri "ray"digunakan sebagai gantinya).

Sisa kode melakukan sisanya:

“...»ḲØ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

(CATATAN: Saya tidak pernah memprogram dalam Jelly.) Ketika saya melihat kode Anda, saya bertanya-tanya dua hal: 1. Anda saat ini mengulang alfabet dan bergabung dengan mereka dengan kata-kata. Apakah mungkin di Jelly untuk mendapatkan karakter pertama dari sebuah string, jadi Anda mengulangi kata-kata alih-alih alfabet, dan bergabung dengan mereka dengan first_letter_of_word + ":" + kata? Dan 2. Anda mengambil semua kata termasuk spasi dan kemudian dipisahkan oleh spasi. Apakah mungkin untuk dipisahkan secara inklusif oleh huruf kapital terkemuka? Tidak tahu apakah spasi ini bahkan memberikan byte tambahan dalam bentuk terkompresi atau tidak, dan jika mereka dapat dikurangi dengan deskripsi saya di 2.
Kevin Cruijssen

1
@KevinCruijssen (1) ya itu mungkin untuk menggunakan huruf pertama dari setiap kata, namun itu tidak akan sesingkat karena hasil alfabet adalah atom dua byte. (2) ya itu mungkin untuk dipisah pada huruf kapital, tetapi secara mengejutkan kompresi string tanpa spasi sebenarnya lebih lama (banyak kata dengan spasi terdepan sebenarnya ada dalam kamus, seperti halnya semua ini dengan huruf kapital).
Jonathan Allan

2
Kamus tidak mengandung spasi utama. Namun, ketika mendekompres banyak kata secara berurutan, defaultnya adalah memisahkannya dengan spasi; kata pertama tidak akan memiliki ruang terdepan, tetapi semua kata berikut akan.
Dennis

11

Retina , 156 byte

Hitungan byte mengasumsikan penyandian ISO 8859-1.


AlfaBravoCharlieDeltaEchoFoxtrotGolfHotelIndiaJulietKiloLimaMikeNovemberOscarPapaQuebecRomeoSierraTangoUniformVictorWhiskeyXrayYankeeZulu
[A-Z]
¶$&: $&
G`.

Cobalah online!


11

05AB1E , 102 98 byte

Disimpan 4 byte berkat Erik the Outgolfer

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

Cobalah online!

Penjelasan

Menggunakan kompresi kamus untuk kata-kata dalam kamus 05AB1E.
Gunakan kompresi kamus sebagian jika memungkinkan untuk kata lain.
Kata teks biasa di mana keduanya tidak mungkin.

#          # 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
Dapatkan ke 98 menggunakan tali kompresi ini sebagai gantinya: ”AlfaІvo¼¯¤œ®È¨›trotŠˆƒ‹Š™ÈŸt Kilo´àma—……ÍЗŽêpa¼°«Äoµ†Çâgo¸šÉµ Whiskey Xrayµ‹nkeeâ¸lu”.
Erik the Outgolfer

@EriktheOutgolfer: Terima kasih! Saya yakin saya mencari padan lidalam kamus tetapi saya pasti merindukan mereka. Saya tidak mempertimbangkan yadan zusebagai kata-kata :)
Emigna

6

Ruby, 169 karakter

(Berat berdasarkan Jonathan Allan 's Python 2 solusi. Jika Anda menyukai ide itu, silakan upvote jawaban asli.)

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

Contoh dijalankan:

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 byte

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

Penjelasan:

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

Kode uji:

Coba di sini.

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

Harus bekerja dengan Java 5 dan semua versi selanjutnya.
Holger

5

Oktaf, 215 210 209 byte

Disimpan 5 byte berkat Luis Mendo. Saya menyimpan 4 byte berkat Luis Mendo, tetapi mengubah pendekatan membantu saya menghemat satu lagi

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

Cobalah online!

Jika saya menghilangkan spasi, saya akan menghemat 25 byte, tetapi kemudian saya harus menggunakan regex. Regex itu sendiri akan membutuhkan biaya beberapa byte, dan itu juga akan menghapus huruf kapital dari semua kata, meninggalkan saya dengan kata-kata lfa, ravodll. Oleh karena itu saya harus menggabungkan string baru dengan karakter utama. Semua ini membutuhkan byte.

Penjelasan lama:

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

Terima kasih! Ini agak berantakan! , dan tiga byte lebih lama ...
Stewie Griffin

Ah, ya, 'split'akan lebih lama di sini
Luis Mendo

'split'lebih pendek: 209 :)
Stewie Griffin

Saya melihat! Sudah selesai dilakukan dengan baik!
Luis Mendo

Anda dapat membagi ruang dan menghemat 5 byte lagi
Luis Mendo

5

PHP, 202 227 196 187 byte

Terima kasih kepada Dewi Morgan untuk menghemat 9 byte

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

https://repl.it/GMkH/1


Versi yang lebih lama

Terima kasih untuk manatwork dan masukkan nama pengguna di sini untuk menghemat 31 byte!

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

https://eval.in/749541

Terima kasih untuk menyisipkan nama pengguna di sini karena memperhatikan output salah dengan versi sebelumnya.

$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


Mengapa variabel $a? Pindahkan saja seluruh parameter preg_split()panggilan foreach. Maka tidak ada ruang di sekitar asakan diperlukan lagi.
manatwork

Alih-alih konstan PREG_SPLIT_NO_EMPTY, lebih baik menggunakan nilainya: 1. Tapi secara pribadi saya akan men-tweak ekspresi reguler sebagai gantinya: /\B(?=[A-Z])/.
manatwork

1
Terima kasih @insertusernamedi sini saya akan membuat pengeditan itu sekarang :DMasih terbiasa dengan codegolfing
ʰᵈˑ

Itu akan menjadi satu byte lebih pendek dengan array, bukan preg_split.
Titus

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

4

Brachylog , 178 byte

"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?ẉ}ᵐ

Cobalah online!

Penjelasan

"…"ṇ₁               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 byte

tidak ada spasi tambahan, satu baris baru

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

cukup mengganti semua huruf besar dalam string terkompresi dengan
<newline><letter><colon><space><letter>


Kali ini kompetitif ? ;)
Christoph

-13 byte dengan gzinflate-ing hasil gzdeflate(Alfa...Zulu).
Titus

Sayangnya, tidak ada baris baru yang diizinkan, hanya baris baru (tunggal) yang tertinggal
aross

@aross: lihat komentar OP dari kemarin:and for your other question, yes, but just one.
Titus

4

x86 Assembly, 512 byte

Dikompilasi dengan NASM dan diuji dengan QEMU. Untuk mem-boot Anda harus meletakkan tanda tangan boot 2 byte di ujung bootsector (510 byte ke dalam file) jadi saya kehilangan 317 byte mengisi kode yang dikompilasi dengan nol. Ini golf pertama saya, jadi saya harus minta maaf atas kesalahan raksasa.

[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

Keluaran

Inilah yang dihasilkan oleh kode di atas. Seperti yang Anda lihat A: Alfa hilang dan itu karena prompt adalah 25 baris ... Output kode di atas

Untuk membuktikan saya mencetak A: Alfa saya diganti 0,"ulu"dengan32,"Z: Zulu" sehingga Zulu adalah satu di baris yang sama seperti Yankee. Kode yang diubah

Saya akan sangat menghargai jika seseorang mengatakan kepada saya jika saya dapat mengurangi 317 byte zerofill dari kode saya sehingga akan menjadi 195 byte. Juga jika ini bahkan valid karena output tidak muat di layar.


4

Python 2 , 186 182 byte

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

Cobalah online!


2
lihat komentar pada pertanyaan: satu baris baru diterima (sekarang)
Titus

Selamat datang di PPCG! Barang bagus.
Jonathan Allan

4

C (MinGW, Dentang), 218 byte

Terima kasih kepada @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,":"));}

Cobalah online!

C, 259 236 byte

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

Cobalah online!


Bagaimana saya mengkompilasi ini?
Itay Grudev

1
@ItayGrudev, GCC dan Dentang keduanya harus mengkompilasi seperti apa adanya. gcc src.catau clang src.c. Berikut ini contoh proses dengan fungsi utama yang ditambahkan sehingga kode tersebut akan terhubung dan dijalankan: ideone.com/4Eowlh
chris

@ Chris Lalu dengan mengorbankan 4 byte, tidak fboleh diganti dengan mainkode yang valid, atau saya kehilangan beberapa konvensi golf.
Itay Grudev

2
@ItayGrudev, Cara saya melihatnya, pertanyaannya hanya menanyakan fungsionalitas, bukan program yang lengkap dan mandiri.
chris

1
218 dengan strtok () dan beberapa mengutak-atik string 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,":"));}Tidak jelas jika itu bekerja di mana-mana: TIO segfault tetapi setidaknya bekerja di MinGW. Tidak bisa melihat banyak alasan mengapa itu tidak berhasil.
gastropner

3

Gema, 168 karakter

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

Contoh dijalankan:

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

Python 2 , 198 byte

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

Cobalah online!

Tidak mengasyikkan atau pintar. Putar saja daftar dan cetak huruf pertama lalu ':' lalu seluruh kata.


2

PHP, 184 byte 179 byte 178

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

menyimpan satu byte dengan menggunakan preg_filter alih-alih preg_replace.


Jawaban asli 184 byte 179 byte

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

menggunakan fakta bahwa itu diurutkan untuk menghasilkan char pertama dengan cepat.

5 byte disimpan oleh @Titus.


2
Golf aslinya ke 180-1 dengan for($c=A;$s=[lfa,...,ulu][+$i++];$c++)echo"$c: $c$s\n";. Regex yang bagus.
Titus

@ Titus yang ada dalam pikiran saya pasti ada cara yang lebih baik tetapi beralih ke preg. Terima kasih atas tipnya!
Christoph

2

SOGL , 91 byte

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

Penjelasan:

...‘θ{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 byte

Skrip ini didasarkan pada jawaban Retina oleh Martin Ender.

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

Cobalah online!

Penjelasan:

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 byte

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

Cobalah online!


+1. The {,}trick dalam ekspansi brace adalah cara yang sangat cerdas untuk ganda setiap anggota daftar!
Digital Trauma

2

Lua, 278 byte

Terima kasih lagi untuk Manatwork karena telah menghemat 18 byte!

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"

Cobalah online


Versi yang lebih lama

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

Pertama kali melakukan Lua, lakukan mungkin bisa golf lebih banyak, tetapi saya pikir saya akan menambahkannya sebagai jawaban.


Pertanyaan saya mungkin menjadi membosankan, tetapi sekali lagi: Mengapa variabel a? ;) Anda dapat memindahkan seluruh deklarasi array di dalam for. Dan for.. insintaks membantu untuk menghindari penulisan indeks array panjang itu: pastebin.com/rxck79md Weird Lua thing: jika Anda mendeklarasikan suatu fungsi dan menyebutnya 26 kali "secara manual" (maksud saya, bukan dalam satu lingkaran) lebih pendek: pastebin. com / FMF9GmLJ
manatwork

¯\_(ツ)_/¯untuk alasan sederhana bahwa saya tidak pernah menggunakan Lua sebelumnya, jadi saya hanya mengikuti manual untuk mencoba membuatnya bekerja, aha. Terima kasih @manatwork untuk informasinya, saya tidak tahu tentang itu.
ʰᵈˑ

2

Lua , 177 byte

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

Cobalah online!

Tanpa membuntuti baris baru, 180 byte:

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

Penjelasan

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

Ini menggunakan fungsi substitusi string.gs Lua untuk mencocokkan pola huruf besar. Surat-surat itu kemudian diganti dengan format yang diminta (ditambah huruf-huruf itu sendiri). Baris baru juga ditambahkan pada pass yang sama.

Subfungsi pada akhirnya hanya memotong baris baru dari awal dan juga berfungsi dengan baik untuk menyembunyikan nilai pengembalian kedua gsub, yang akan menjadi jumlah penggantian.


2

PowerShell , 187 185 byte

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

Cobalah online!

Loop dari 0ke 25, setiap iterasi membentuk $aibukota yang sesuai char. Kemudian string-digabungkan dengan : $a(yaitu, ruang-ruang-huruf). Kemudian string itu digabungkan dengan string yang dibentuk oleh pengindeksan ke dalam array yang dibuat oleh -splitting string fonetik pada spasi. Masing-masing dari 26 string ditinggalkan di pipa, dan tersiratWrite-Output terjadi pada penyelesaian program, memasukkan baris baru antar elemen.

Disimpan dua byte berkat @Matt.


Bagus. Menghapus karakter pertama dari setiap kata bahkan tidak terpikir oleh saya. Anda dapat memotong 2 byte dengan melakukan ini: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 tentu, itu masuk akal. Terima kasih!
AdmBorkBork

2

C, 216 215 212 byte

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

Cobalah online!

Versi program yang terperinci, mudah dibaca, dikomentari dengan baik, dan benar-benar valid (tidak ada peringatan kompiler) dapat ditemukan di bawah:

#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
Selamat datang di PPCG! Posting pertama yang bagus!
Rɪᴋᴇʀ

@ceilingcat Tidak hanya char*stetapi juga printfbisa masuk ke sana. Dengan demikian menghemat 3 byte lagi - titik koma dan 2 kurung kurawal karena kita tidak lagi membutuhkannya karena hanya ada satu instruksi dalam tubuh itu - forloop lainnya .
Itay Grudev

2

JavaScript ES6, 216 187 184 180 174 bytes

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

Menyimpan satu byte berkat Neil. Disimpan 5 byte berkat produk ETH.

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

Japt , 127 byte

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

Cobalah online!

Disimpan 2 byte berkat obarakon.


Saya bertanya-tanya bagaimana lagi Anda bisa menyingkirkan baris baru terkemuka - itu sebenarnya akan menjadi satu byte lebih murah daripada pendekatan Anda sebelumnya untuk secara manual bergantung A: Apada string. Tetapi Anda masih dapat menyimpan byte lain dengan menggunakan karakter baris baru literal alih-alih \n.
Neil

Jawaban yang bagus Anda dapat menggunakan baris baru literal di Japt juga. Juga, ganti menerima string untuk argumen kedua dan menggantikan apa pun $&di dalamnya dengan kecocokan, sehingga Anda dapat melakukan mis "\n$&: $&"untuk kedua langs alih-alih menggunakan fungsi.
ETHproduk

Anda dapat mengubah @"\n{X}: {X}"}dalam Japt menjadi hanya "\n$&: $&":-)
ETHproduk

@ ETHproductions Terima kasih atas bantuannya!
Tom

Jawaban bagus! Anda dapat menyimpan beberapa byte dengan menjatuhkan " xdan memasukkan -xbendera ke input. Perhatikan bahwa flag menambahkan 1 byte ke total byte.
Oliver

2

PHP, 175 171 164 162 byte

Catatan: tidak lagi memerlukan file terkompresi, menggunakan pengkodean IBM-850.

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

Jalankan seperti ini:

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

Penjelasan

Mencetak setiap karakter secara individual (lebih kecil dari OR dengan spasi). Jika karakter huruf besar ditemukan, pertama-tama mencetak string dari bentuk "\ nA: A".

Tweaks

  • Disimpan 4 byte dengan menggunakan strategi kompresi lain
  • Disimpan 7 byte dengan menggunakan pembatas yang berbeda (untuk menggabungkan penugasan $ldengan param meledak), dan tidak mencegah baris baru terkemuka
  • Disimpan 2 byte dengan metode baru

1

Japt, 216 214 byte

`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

Penjelasan: Kemungkinan besar ada cara yang lebih baik untuk melakukannya, tetapi karena saya baru saya tidak mengetahuinya. Saya pada dasarnya mengompresi string dengan Oc "dan meletakkan string itu untuk didekompresi menggunakan Od"

Jika seseorang ingin membantu saya menghemat byte dengan menggunakan sesuatu yang berbeda dari jeda baris, saya akan senang belajar!

sunting: Disimpan 2 byte menggunakan `bukannya Od"


Menggunakan Coba online! tidak memberikan hasil yang diinginkan:/
ʰᵈˑ

@ Ya, bisa jadi, saya tidak punya cukup waktu untuk memeriksa semuanya sebelum saya harus pergi bekerja. Saya mungkin melakukannya lagi (dan lebih baik) setelah bekerja.
Martijn Vissers

1
@ ʰᵈˑ Ada beberapa unsintables di string yang tidak muncul di Markdown. Cobalah online!
ETHproduk

@ ETHproduksi terima kasih untuk itu, saya tidak tahu
ʰᵈˑ

1

Pyke, 89 byte

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

Apakah karakter-karakter ini kebetulan berada dalam rangkaian karakter byte tunggal tertentu?
Adám

TIO memberikan kesalahan eval buruk dan melaporkan 161 byte dalam pesan. Entah Pyke perlu mendorong ke sana atau ada yang salah dengan salin dan tempel di sini. @ Adam jika itu 1-1 itu akan menjadi 41 byte, utf-8 akan menjadi 88, tapi sesuatu pasti terlihat agak aneh.
Jonathan Allan

@ Jonathan Allan seharusnya UTF-8. TIO menjalankannya bukan di UTF-8. Saya pikir byte-count mungkin salah karena diukur sebagai UTF-8
Blue

1

Qbasic, 383 byte

Tidak mengesankan, tetapi untuk apa nilainya:

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

Kenangan BASIC lama ... Tidak bisakah itu disimpan dalam datapernyataan readdi dalam for.. nextloop?
manatwork

@Manatwork, itu ide yang bagus; Saya belum memikirkannya!
anonymous2

Bukankah hanya ?"A: Alfa"dan seterusnya hanya 360 byte?
oerkelens

@erkerkens, Anda mungkin benar. Saya bahkan tidak mempertimbangkan kemungkinan itu. :)
anonymous2

1

/// , 220 byte

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

Cobalah online!

-20 byte terima kasih kepada @ETHproductions.


Ini tidak sulit, dan menghemat 20 byte: Cobalah online!
ETHproduk

@ ETHproduk saya mengerti ... untuk beberapa alasan saya terlalu memikirkannya. Saya akan memperbarui jawabannya.
Kamerad SparklePony
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.