Charlie, Oscar, Delta, Echo


30

Ein großer Teil der Funkkommunikation ist das Phonetische Alphabet der NATO , das Buchstaben als Wörter verschlüsselt, damit sie über Funkverbindungen leichter verständlich sind. Ihre Aufgabe ist es, sie einzeln zu drucken, wenn Sie sie annehmen möchten.

Sie müssen genau diese Zeichenfolge auf stdout drucken:

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

Regeln:

  • Ihr Programm nimmt keine Eingabe
  • Standardlücken sind nicht zulässig .
  • Wenn es in Ihrer Sprache eingebaute Elemente gibt, die Buchstaben an ihre NATO-Entsprechungen weiterleiten, dürfen Sie diese nicht verwenden (ich sehe Sie Mathematica an).
  • Möglicherweise haben Sie nachgestellte Leerzeichen und eine nachgestellte Zeile.


4
Ich schließe dies als Trick, weil es keine ausnutzbare Struktur gibt, die es ermöglicht, dass benutzerdefinierte Komprimierungsschemata eine bessere Leistung als die integrierte Komprimierung erbringen, und die Zielherausforderung ist unsere De-facto-Standardherausforderung für die integrierte Komprimierung.
Mego

1
Eng verwandt. Wenn überhaupt, würde ich sagen, dass es ein Schwachsinn ist, aber es ermöglichte den Leuten, ihre eigenen Wörter zu wählen, was die Komprimierung tatsächlich viel mehr ermöglichte.
Martin Ender

3
sollte nicht der erste sein A: Alpha?
SeanC

3
@SeanC: Laut Wikipedia (siehe Link in Frage), nein. Das ist ATIS, nicht die NATO. Aber dann sollte es Juliettnicht Julietund X-raystattdessen sein Xray.
Titus

Antworten:


18

Python 2 , 189 186 Bytes

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

Probieren Sie es online!


Zurück: (das war cool, aber ich erkannte, dass die einfachere Version durch ein Byte kürzer gemacht werden könnte)

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

12

Jelly , 76 Bytes

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

Probieren Sie es online!

Wie?

So ziemlich nur Wörterbuchwerte und Komprimierung. Der Code zwischen und »ist nur ein komprimierter Wert, der die Zeichenfolge bildet, "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"indem alle Wörter (mit einzelnen Leerzeichen, mit Ausnahme von "Alfa") in Jellys Wörterbuch nachgeschlagen werden (außer " Xray"denen, die nicht im Wörterbuch enthalten sind, also der direkte Zeichenfolgenwert " X"und das Wörterbuch Eintrag "ray"anstelle) verwendet.

Der Rest des Codes erledigt den Rest:

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

(HINWEIS: Ich habe Jelly nie programmiert.) Wenn ich Ihren Code sehe, wundere ich mich über zwei Dinge: 1. Sie durchlaufen derzeit das Alphabet und verbinden sie mit den Wörtern. Ist es in Jelly möglich, das erste Zeichen einer Zeichenfolge abzurufen, sodass Sie die Wörter anstelle des Alphabets durchlaufen und sie mit first_letter_of_word + ":" + word verbinden? Und 2. Sie rufen alle Wörter einschließlich Leerzeichen ab und teilen sie dann nach Leerzeichen auf. Ist es möglich, durch die führenden Großbuchstaben inklusiv aufzuteilen? Keine Ahnung, ob diese Leerzeichen in ihrer komprimierten Form noch zusätzliche Bytes enthalten oder nicht, und ob sie mit meiner Beschreibung bei 2 reduziert werden können.
Kevin Cruijssen

1
@KevinCruijssen (1) Ja, es ist möglich, den ersten Buchstaben jedes Wortes zu verwenden, jedoch nicht so kurz, da die Alphabetausbeute ein Zwei-Byte-Atom ist. (2) ja , es ist möglich , auf Großbuchstaben zu spalten, aber überraschend die Kompression der Zeichenfolge ohne Leerzeichen ist eigentlich mehr (viele Wörter mit führenden Leerzeichen sind tatsächlich in dem Wörterbuch, sind alle diese mit Kapitalisierung).
Jonathan Allan

2
Das Wörterbuch enthält keine führenden Leerzeichen. Wenn Sie jedoch mehrere Wörter nacheinander dekomprimieren, werden sie standardmäßig durch Leerzeichen getrennt. Das erste Wort wird kein führendes Leerzeichen enthalten, alle folgenden Wörter jedoch.
Dennis

11

Netzhaut , 156 Bytes

Die Anzahl der Bytes setzt die Kodierung nach ISO 8859-1 voraus.


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

Probieren Sie es online!


11

05AB1E , 102 98 Bytes

Dank Erik the Outgolfer 4 Bytes gespart

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

Probieren Sie es online!

Erläuterung

Verwendet die Wörterbuchkomprimierung für die Wörter im Wörterbuch von 05AB1E.
Verwendet, wann immer möglich, eine teilweise Wörterbuchkomprimierung für andere Wörter.
Klartextwörter, bei denen beides nicht möglich ist.

#          # 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
Holen Sie sich bis zu 98 mit diesem komprimierten String statt: ”AlfaІvo¼¯¤œ®È¨›trotŠˆƒ‹Š™ÈŸt Kilo´àma—……ÍЗŽêpa¼°«Äoµ†Çâgo¸šÉµ Whiskey Xrayµ‹nkeeâ¸lu”.
Erik der Outgolfer

@EriktheOutgolfer: Danke! Ich war sicher, dass ich gesucht paund liim Wörterbuch, aber ich muss sie verpasst haben. Ich habe nicht in Betracht gezogen yaund zuals Worte :)
Emigna

6

Ruby, 169 Zeichen

(Stark auf Jonathan Allan ‚s Python 2 Lösung. Wenn Sie wie die Idee, bitte die ursprüngliche Antwort upvote.)

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

Probelauf:

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 Bytes

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

Erläuterung:

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

Testcode:

Probieren Sie es hier aus.

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

Sollte mit Java 5 und allen nachfolgenden Versionen funktionieren.
Holger

5

Oktave, 215 210 209 Bytes

5 Bytes gespart dank Luis Mendo. Ich habe dank Luis Mendo 4 Bytes gespart, aber wenn ich den Ansatz ändere, kann ich noch einen speichern

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

Probieren Sie es online!

Wenn ich die Leerzeichen entfernen würde, würde ich 25 Bytes sparen, aber dann müsste ich einen regulären Ausdruck verwenden. Der reguläre Ausdruck selbst würde einige Bytes kosten, und er würde auch den Großbuchstaben aller Wörter entfernen und mich mit den Wörtern lfa, ravousw. zurücklassen . Ich müsste daher die neuen Zeichenfolgen mit den führenden Zeichen verketten. All dies kostet Bytes.

Alte Erklärung:

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

Vielen Dank! Das war etwas chaotischer! , und drei Bytes länger ...
Stewie Griffin

Ah ja, 'split'wäre länger hier
Luis Mendo

'split'war kürzer: 209 :)
Stewie Griffin

Aha! Gut gemacht!
Luis Mendo

Sie können auf Leerzeichen aufteilen und 5 weitere Bytes speichern
Luis Mendo

5

PHP, 202 227 196 187 Bytes

Vielen Dank an Dewi Morgan für das Speichern von 9 Bytes

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

https://repl.it/GMkH/1


ältere Versionen

Danke an manatwork und insertusernamehere für die Einsparung von 31 Bytes!

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

https://eval.in/749541

Dank insertusernamehere für die Feststellung, dass die Ausgabe mit der vorherigen Version falsch war.

$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


Warum variabel $a? Verschieben Sie einfach den gesamten preg_split()Aufruf in foreachden Parameter. Dann wird kein Leerzeichen asmehr benötigt.
Manatwork

Statt konstant PREG_SPLIT_NO_EMPTY, verwenden Sie besser seinen Wert: 1. Aber ich persönlich würde den regulären Ausdruck zwicken statt: /\B(?=[A-Z])/.
Manatwork

1
Danke @insertusernamehere, ich werde das jetzt bearbeiten. Ich gewöhne mich :Dimmer noch an das Codegolfing
ʰᵈˑ

Das wäre ein Byte kürzer mit einem einfachen Array anstelle des preg_split.
Titus

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

4

Brachylog , 178 Bytes

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

Probieren Sie es online!

Erläuterung

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

Keine nachgestellten Leerzeichen, eine führende Zeile

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

Ersetzt einfach alle Großbuchstaben in der komprimierten Zeichenfolge durch
<newline><letter><colon><space><letter>


Diesmal konkurrenzfähig ? ;)
Christoph

-13 Bytes mit gzinflate-ing das Ergebnis von gzdeflate(Alfa...Zulu).
Titus

Leider ist kein führender Zeilenumbruch erlaubt, nur ein (einzelner) abschließender Zeilenumbruch
etwa am

@aross: siehe den Kommentar des OP von gestern:and for your other question, yes, but just one.
Titus

4

x86-Assembly, 512 Byte

Kompiliert mit NASM und getestet mit QEMU. Zum Booten müssen Sie eine 2-Byte-Boot-Signatur am Ende des Bootsektors einfügen (510 Byte in der Datei), damit 317 Byte verloren gehen und der kompilierte Code mit Nullen gefüllt wird. Dies ist mein erstes Golfspiel, daher muss ich mich für alle riesigen Fehler entschuldigen.

[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

Ausgabe

Dies ist, was der obige Code ausgibt. Wie Sie sehen können A: Alfa fehlt und das liegt daran, dass die Eingabeaufforderung 25 Zeilen hoch ist ... Über Codes ausgegeben

Um zu beweisen , ich gedruckt A: Alfa I ersetzt 0,"ulu"mit , 32,"Z: Zulu"so dass Zulu ist ein auf der gleichen Linie wie Yankee. Code geändert

Ich würde es begrüßen, wenn mir jemand sagen würde, dass ich die 317 Bytes der Nullfüllung von meinem Code subtrahieren könnte, so dass es 195 Bytes wären. Auch wenn dies sogar gültig ist, weil die Ausgabe nicht auf den Bildschirm passt.



4

C (MinGW, Clang), 218 Bytes

Vielen Dank an @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,":"));}

Probieren Sie es online!

C 259 236 Bytes

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

Probieren Sie es online!


Wie würde ich das kompilieren?
Itay Grudev

1
@ItayGrudev, GCC und Clang sollten beide so kompilieren, wie sie sind. gcc src.coder clang src.c. Hier ist ein Beispiellauf mit einer hinzugefügten Hauptfunktion, damit der Code tatsächlich verlinkt
chris

@chris Dann auf Kosten von 4 Bytes, sollte nicht fmit ersetzt werden, maindamit der Code gültig ist, oder vermisse ich eine Golf-Konvention.
Itay Grudev

2
@ItayGrudev, so wie ich es sehe, stellte sich die Frage nur nach der Funktionalität, nicht nach einem vollständigen, in sich geschlossenen Programm.
Chris

1
218 mit strtok () und einigen Hantieren mit der Zeichenfolge 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,":"));}nicht klar , ob es überall funktioniert: TIO segfaults aber funktioniert in MinGW zumindest. Kann nicht viel von einem Grund sehen, warum es nicht funktionieren würde.
Gastropner

3

Gema, 168 Zeichen

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

Probelauf:

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 Bytes

Vielen Dank an Digital Trauma für das Entfernen von 17 Bytes und das manuelle Arbeiten von 8 Bytes.

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

Probieren Sie es online!



Das Indizierungsarray aist zu lang. set {A..Z};for i in lfa … ulu;{ echo $1: $1$i;shift;}
Manatwork

2

Python 2 , 198 Bytes

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

Probieren Sie es online!

Nicht aufregend oder klug. Blättern Sie einfach durch die Liste und drucken Sie den ersten Buchstaben, dann ':' und dann das ganze Wort.


2

PHP, 184 Bytes 179 Bytes 178

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

speicherte ein einzelnes Byte, indem er preg_filter anstelle von preg_replace verwendete.


Ursprüngliche Antwort 184 Bytes 179 Bytes

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

nutzt die Tatsache, dass es sortiert ist, um das erste Zeichen im laufenden Betrieb zu generieren.

5 Bytes von @Titus gespeichert.


2
Spielen Sie Ihr Original mit bis zu 180-1 for($c=A;$s=[lfa,...,ulu][+$i++];$c++)echo"$c: $c$s\n";. Netter Regex.
Titus

@Titus Ich hatte vor, es muss doch einen besseren Weg geben, auf preg umzusteigen. Danke für den Tipp !
Christoph

2

SOGL , 91 Bytes

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

Erläuterung:

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

Dieses Skript basiert auf der Retina-Antwort von Martin Ender.

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

Probieren Sie es online!

Erläuterung:

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

Probieren Sie es online!


+1. Der {,}Trick bei der Klammererweiterung ist eine sehr clevere Methode, um jedes Listenmitglied zu verdoppeln!
Digital Trauma

2

Lua, 278 260 Bytes

Nochmals vielen Dank an Manatwork für das Speichern von 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"

Probieren Sie es online aus


ältere Versionen

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

Wenn ich das erste Mal Lua mache, kann ich wahrscheinlich mehr Golf spielen, aber ich dachte, ich würde es trotzdem als Antwort hinzufügen.


Meine Frage wird vielleicht langweilig, aber nochmal: Warum variabel a? ;) Sie können die gesamte Array-Deklaration in das verschieben for. Und die for.. in-Syntax hilft dabei, das Schreiben dieser langen Array-Indizes zu vermeiden: pastebin.com/rxck79md Seltsame Lua-Sache: Wenn Sie eine Funktion deklarieren und 26 Mal "manuell" aufrufen (ich meine, nicht in einer Schleife), ist sie kürzer: pastebin. com / FMF9GmLJ
manatwork

¯\_(ツ)_/¯Aus dem einfachen Grund, dass ich Lua noch nie zuvor benutzt habe, habe ich einfach das Handbuch befolgt, um zu versuchen, es zum Laufen zu bringen, aha. Vielen Dank an @manatwork für die Info, davon wusste ich nichts.
8.

2

Lua , 177 Bytes

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

Probieren Sie es online!

Ohne nachfolgende Newline 180 Bytes:

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

Erläuterung

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

Es verwendet die string.gsub-Substitutionsfunktion von Lua, um Muster mit den Großbuchstaben abzugleichen. Die Buchstaben werden dann durch das angeforderte Format (plus die Buchstaben selbst) ersetzt. Mit demselben Durchgang werden auch Zeilenumbrüche hinzugefügt.

Die Unterfunktion am Ende schneidet Zeilenumbrüche nur von Anfang an ab und funktioniert auch gut, um den zweiten Rückgabewert von gsub zu verbergen, der die Menge der Ersetzungen gewesen wäre.


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

Probieren Sie es online!

Schleifen von 0bis 25, wobei jede Iteration $adas entsprechende Kapital bildet char. Dann mit : $a(dh dem Doppelpunkt-Leerzeichen-Buchstaben) verkettet . Diese Zeichenfolge wird dann mit einer Zeichenfolge verkettet, die durch Indizieren in ein Array erstellt wird, indem -splitdie phonetische Zeichenfolge auf Leerzeichen getippt wird. Jede dieser 26 Zeichenfolgen ist in der Pipeline belassen und implizitWrite-Output verbleibt bei Programmabschluss wird eine neue Zeile zwischen den Elementen eingefügt.

Zwei Bytes dank @Matt gespart.


Nett. Das Entfernen des ersten Zeichens jedes Wortes fiel mir nicht einmal ein. Sie können 2 Bytes abhacken, indem Sie dies tun: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 klar, das macht Sinn. Vielen Dank!
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;);}

Probieren Sie es online!

Eine ausführliche, lesbare, gut kommentierte und absolut gültige (keine Compiler-Warnungen) Version des Programms finden Sie unten:

#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
Willkommen bei PPCG! Schöner erster Beitrag!
8.

@ceilingcat Nicht nur die char*ssondern auch die printfkönnten da reingehen . Auf diese Weise werden weitere 3 Bytes gespeichert - ein Semikolon und 2 geschweifte Klammern, da diese nicht mehr benötigt werden, da nur eine Anweisung im Hauptteil vorhanden ist - die andere forSchleife.
Itay Grudev

2

JavaScript ES6, 216 187 184 180 174 Bytes

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

Ein Byte dank Neil gespeichert. 5 Bytes gespart dank 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""
$&: $&

Probieren Sie es online!

2 Bytes dank obarakon gespeichert.


Ich habe mich gefragt, wie Sie diese führende Zeile sonst loswerden könnten - es wäre tatsächlich ein Byte billiger gewesen als Ihr bisheriger Ansatz A: A, der Zeichenfolge manuell voran zu stellen. Sie können jedoch immer noch ein anderes Byte speichern, indem Sie anstelle von ein Literal-Newline-Zeichen verwenden \n.
Neil

Gute Antworten. Sie können in Japt auch einen wörtlichen Zeilenumbruch verwenden. Außerdem akzeptiert replace eine Zeichenfolge für das zweite Argument und ersetzt alle darin enthaltenen $&s durch die Übereinstimmung, sodass Sie z. B. "\n$&: $&"für beide langs ausführen können, anstatt Funktionen zu verwenden.
ETHproductions

Sie können @"\n{X}: {X}"}in Japt auf nur ändern "\n$&: $&":-)
ETHproductions

@ETHproductions Danke für die Hilfe!
Tom

Gute Antwort! Sie können ein paar Bytes speichern, indem Sie das " xund das Einfügen eines -xFlags in die Eingabe löschen. Beachten Sie, dass das Flag 1 Byte zu den Gesamtbytes hinzufügt.
Oliver

2

PHP, 175 171 164 162 Bytes

Anmerkung: Benötigt keine komprimierte Datei mehr, verwendet IBM-850-Codierung.

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

Laufen Sie wie folgt:

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

Erläuterung

Druckt jedes Zeichen einzeln (durch ODER mit einem Leerzeichen unterstrichen). Wenn ein Großbuchstabe gefunden wird, wird zuerst eine Zeichenfolge der Form "\ nA: A" gedruckt.

Optimierungen

  • 4 Bytes durch Verwendung einer anderen Komprimierungsstrategie gespart
  • 7 Bytes durch Verwendung eines anderen Trennzeichens (um die Zuweisung von $lmit explode param zu kombinieren ) gespart, ohne eine führende neue Zeile zu verhindern
  • 2 Bytes mit einer neuen Methode gespeichert

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

Erklärung: Es gibt wahrscheinlich einen viel besseren Weg, aber da ich neu bin, weiß ich es nicht. Ich habe die Zeichenkette im Grunde mit Oc "komprimiert und diese Zeichenkette mit Od" dekomprimiert.

Wenn jemand mir helfen möchte, Bytes zu sparen, indem er etwas anderes als Zeilenumbrüche verwendet, würde ich mich freuen, das zu lernen!

edit: Speichert 2 Bytes mit `anstelle von Od"


Mit Versuchen Sie es online! es gibt nicht das gewünschte Ergebnis:/
ʰᵈˑ

@ ʰᵈˑja das könnte sein, ich hatte nicht genug Zeit, um alles zu überprüfen, bevor ich zur Arbeit musste. Vielleicht mache ich es nach der Arbeit noch einmal (und besser).
Martijn Vissers

1
@ ʰᵈˑ Die Zeichenfolge enthält einige nicht druckbare Elemente, die im Markdown nicht angezeigt werden. Probieren Sie es online!
ETHproductions

@ETHproductions ah danke dafür, ich wusste es nicht
ʰᵈˑ

1

Pyke, 89 Bytes

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

Befinden sich diese Zeichen zufällig in einem bestimmten Einzelbyte-Zeichensatz?
Adám

TIO gibt einen fehlerhaften Auswertungsfehler aus und meldet 161 Bytes in der Nachricht. Entweder muss Pyke dorthin geschoben werden oder beim Kopieren und Einfügen ist ein Fehler aufgetreten. @Adam Wenn es 1-1 wäre, wären es 41 Bytes, utf-8 wäre 88, aber etwas sieht definitiv ein bisschen anders aus.
Jonathan Allan

@ JonathanAllan sollte es UTF-8 sein. TIO führt es in nicht UTF-8 aus. Ich denke, die Anzahl der Bytes könnte falsch sein, da sie
Blue

1

Qbasic, 383 Bytes

Nicht beeindruckend, aber was es wert ist:

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

Alte BASIC-Erinnerungen ... Können diese nicht in einer dataAnweisung readinnerhalb der for.. next-Schleife gespeichert werden ?
Manatwork

@manatwork, das ist eine gute Idee; Ich hatte nicht daran gedacht!
anonymous2

Wären nicht einfach ?"A: Alfa"nur 360 Bytes?
Oerkelens

@oerkelens, du könntest recht haben. Ich habe nicht einmal die Möglichkeit in Betracht gezogen. :)
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

Probieren Sie es online!

-20 Bytes dank @ETHproductions.


Es ist nicht schwer und spart 20 Bytes: Probieren Sie es online!
ETHproductions

@ETHproductions Ich verstehe ... aus irgendeinem Grund habe ich darüber nachgedacht. Ich werde die Antwort aktualisieren.
Genosse SparklePony
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.