Чарли, Оскар, Дельта, Эхо


30

Большую часть радиосвязи составляет фонетический алфавит НАТО , который кодирует буквы как слова, чтобы их было легче понять по коммуникациям. Ваша задача, если вы хотите это принять, - распечатать их по одному.

Вы должны напечатать эту точную строку в 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
Тесно связаны Во всяком случае, я бы назвал это обманом, но это позволило людям выбирать свои собственные слова, что на самом деле сделало сжатие намного более возможным.
Мартин Эндер

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.
Кевин Круйссен,

1
@KevinCruijssen (1) да, можно использовать первую букву каждого слова, однако она не будет такой короткой, поскольку выход алфавита представляет собой двухбайтовый атом. (2) да, можно разделить заглавные буквы, но на удивление сжатие строки без пробелов на самом деле длиннее (многие слова с начальными пробелами фактически находятся в словаре, как и все с заглавными буквами).
Джонатан Аллан

2
Словарь не содержит начальных пробелов. Однако при распаковке нескольких слов в строке по умолчанию они разделяются пробелами; первое слово не будет иметь начального пробела, но все последующие слова будут.
Денис


11

05AB1E , 102 98 байт

Сохранено 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”.
Эрик Outgolfer

@EriktheOutgolfer: Спасибо! Я был уверен, что искал paи liв словаре, но я, должно быть, пропустил их. Я не считал yaи zuсловами, хотя :)
Emigna

6

Рубин, 169 знаков

( В значительной степени основаны на Jonathan Allan «s Python 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 и всеми последующими версиями.
Хольгер

5

Октава, 215 210 209 байт

Сохранено 5 байтов благодаря Луису Мендо. Я спас 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' ...

Благодарность! Это было немного грязнее! и на три байта длиннее ...
Стьюи Гриффин,

Ах, да, 'split'было бы дольше здесь
Луис Мендо

'split'был короче: 209 :)
Стьюи Гриффин

Я вижу! Отлично сработано!
Луис Мендо

Вы можете разделить на пробелы и сохранить еще 5 байтов
Луис Мендо

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

Спасибо 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больше не будет необходимо.
Манатворк

Вместо постоянной PREG_SPLIT_NO_EMPTY, лучше использовать его значение: 1. Но лично я бы настроить регулярное выражение вместо: /\B(?=[A-Z])/.
Манатворк

1
Спасибо @insertusernamehere я сделаю это редактирование сейчас :DВсе еще привыкаю к ​​кодгольфингу
ʰᵈˑ

Это было бы на один байт короче с простым массивом вместо preg_split.
Титус

1
На 10 символов короче:echo preg_replace('/([A-Z])[a-z]+/',"$1 = $0\n",Alfa...Zulu);
Деви Морган,

4

Брахилог , 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>



-13 байт с gzinflateрезультатом gzdeflate(Alfa...Zulu).
Титус

К сожалению, ни ведущей новой строки не допускается, только (единственный) завершающий перевод строки
aross

@aross: см. комментарий ОП вчера:and for your other question, yes, but just one.
Титус

4

Сборка x86, 512 байт

Скомпилировано с NASM и протестировано с QEMU. Для загрузки вам нужно поставить 2-байтовую загрузочную подпись в конце загрузочного сектора (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 строк ... Выше кодов вывод

Для того, чтобы доказать , что я печататься A: Alfa я заменил 0,"ulu"с 32,"Z: Zulu"тем чтобы Zulu одна на той же линии , как Yankee. Измененный код

Я был бы признателен, если бы кто-нибудь сказал мне, смогу ли я вычесть 317 байтов нулевого заполнения из моего кода, чтобы это было 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);}

Попробуйте онлайн!


Как бы я это скомпилировал?
Итай Грудев

1
@ItayGrudev, GCC и Clang должны компилировать все как есть. gcc src.cили clang src.c. Вот пример запуска с добавленной основной функцией, поэтому код на самом деле будет ссылаться и запускаться: ideone.com/4Eowlh
chris

@chris Тогда за счет 4 байтов, не должны fбыть заменены, mainчтобы код был действительным, или я пропускаю некоторые правила игры в гольф.
Итай Грудев,

2
@ItayGrudev, как я понимаю, вопрос только по функциональности, а не по полной, самодостаточной программе.
Крис

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, но, по крайней мере, работают в MinGW. Не вижу большой причины, почему это не сработало.
гастропнер

3

Гема, 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

Баш , 224 205 188 180 байт

Спасибо Digital Trauma за удаление 17 байт, и manatwork за 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;}
manatwork

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";. Хорошее регулярное выражение, хотя.
Титус

@ Titus Я имел в виду, что должен быть лучший способ, но переключился на preg. Спасибо за совет !
Кристоф

2

СОГЛ , 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 байт

Этот сценарий основан на ответе 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

Луа, 278 260 байт

Еще раз спасибо Manatwork за сохранение 18 байт!

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

В первый раз, когда я играю на Lua, я, вероятно, могу больше играть в гольф, но я все равно решил добавить его в качестве ответа.


Мой вопрос может стать скучным, но опять же: почему переменная a? ;) Вы можете переместить объявление всего массива внутрь for. А синтаксис for.. inпомогает избежать записи этих длинных индексов массива: pastebin.com/rxck79md Странная вещь Lua: если вы объявляете функцию и вызываете ее 26 раз «вручную» (я имею в виду, не в цикле), то она короче: pastebin. com / FMF9GmLJ
manatwork

¯\_(ツ)_/¯по той простой причине, что я никогда раньше не использовал Lua, поэтому я просто следовал инструкции, чтобы попытаться заставить ее работать, ага. Спасибо @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')[$_]}

Попробуйте онлайн!

Циклы от 0до 25, каждая итерация формирует $aсоответствующий капитал char. Затем строка соединяется с : $a(то есть, двоеточие-пробел-буква). Затем эта строка объединяется со строкой, которая формируется путем индексации в массив, созданный путем -splitпомещения фонетической строки в пробелы. Каждая из этих 26 строк остается на конвейере, и неявнаяWrite-Output происходит при завершении программы, вставляя новую строку между элементами.

Сохранено два байта благодаря @Matt.


Ницца. Удаление первого символа каждого слова мне даже не пришло в голову. Вы можете отрубить 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 О, конечно, это имеет смысл. Благодарность!
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цикл.
Итай Грудев

2

JavaScript ES6, 216 187 184 180 174 байта

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

Сохранил байт благодаря Нейлу. Сохранено 5 байтов благодаря ETHproductions.

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

Попробуйте онлайн!

Сохранено 2 байта благодаря obarakon.


Мне было интересно, как еще вы могли бы избавиться от этой ведущей строки - на самом деле это был бы байт дешевле, чем ваш предыдущий подход к ручной вставке A: Aв строку. Но вы все равно можете сохранить другой байт, используя буквальный символ новой строки вместо \n.
Нил

Хорошие ответы. Вы также можете использовать буквальный перевод строки в Japt. Кроме того, replace принимает строку для второго аргумента и заменяет любые $&s в ней соответствием, так что вы можете сделать, например, "\n$&: $&"для обоих языков вместо использования функций.
ETHproductions

Вы можете изменить @"\n{X}: {X}"}в Japt просто "\n$&: $&":-)
ETHproductions

@ETHproductions Спасибо за помощь!
Том

Хороший ответ! Вы можете сохранить пару байтов, опустив " xи вставив -xфлаг во входные данные. Обратите внимание, что флаг добавляет 1 байт к общему количеству байтов.
Оливер

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

объяснение

Печатает каждый символ индивидуально (в нижнем регистре ИЛИ с пробелом). Если встречается заглавный символ, он сначала печатает строку вида "\ nA: A".

Tweaks

  • Сохранено 4 байта с использованием другой стратегии сжатия
  • Сохранено 7 байт с использованием другого разделителя (для объединения назначения $l с параметром разнесения), а не предотвращение перехода на новую строку
  • Сохранено 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"

Если кто-то захочет помочь мне сэкономить байты, используя что-то отличное от разрывов строк, я буду рад узнать!

редактирование: сохранено 2 байта с использованием `вместо Od"


Использование Попробуйте онлайн! это не дает желаемого результата:/
ʰᵈˑ

@ Да, это может быть, у меня не было достаточно времени, чтобы проверить все, прежде чем я должен был идти на работу. Я мог бы сделать это снова (и лучше) после работы.
Martijn Vissers

1
@ ʰᵈˑ В строке есть непечатаемые надписи, которые не отображаются в уценке. Попробуйте онлайн!
ETHproductions

@ETHproductions ах спасибо за то, что я не знаю
ʰᵈˑ

1

Пайк, 89 байт

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

Эти символы находятся в определенном однобайтовом наборе символов?
Адам

TIO выдает ошибку eval и сообщает в сообщении 161 байт. Либо Пайку нужно нажать туда, либо что-то пошло не так с копией и вставкой здесь. @ Adám, если бы это было 1-1, это было бы 41 байт, utf-8 было бы 88, но кое-что определенно выглядит немного не так.
Джонатан Аллан

@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

Старые ОСНОВНЫЕ воспоминания ... Разве они не могут быть сохранены в dataвыражении тогда readвнутри for... nextцикла?
Манатворк

@ 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

Попробуйте онлайн!

-20 байт благодаря @ETHproductions.


Это не сложно, и это экономит 20 байтов: попробуйте онлайн!
ETHproductions

@ETHproductions Я понял ... по какой-то причине я переосмыслил это. Я обновлю ответ.
Товарищ SparklePony
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.