Charlie und der böse Bindestrich

8

Hier ist das phonetische Alphabet:

Alfa
Bravo
Charlie
Delta
Echo
Foxtrot
Golf
Hotel
India
Juliett
Kilo
Lima
Mike
November
Oscar
Papa
Quebec
Romeo
Sierra
Tango
Uniform
Victor
Whiskey
X-ray
Yankee
Zulu

In möglichst wenigen Bytes:

  1. Diese Wörter werden in zufälliger Reihenfolge eingegeben, wobei die ersten Buchstaben entfernt werden.
  2. Ihr Ziel ist es, die Wörter wieder in ihre ursprüngliche Reihenfolge zu bringen, indem Sie nur die Buchstaben verwenden, die Sie jetzt haben . Mit anderen Worten: Finde heraus, wie '[A] lfa' vor '[B] ravo' kommt und so weiter. Ihr Code darf nicht auf die ursprüngliche Liste, die Indexschlüssel usw. verweisen.
  3. Stellen Sie die ursprünglichen Anfangsbuchstaben jedes Wortes wieder her.

Regeln

  • Der Bindestrich im Röntgenbild ist wahrscheinlich böse, muss aber bleiben, denn ich bin auch böse.
  • Das Ergebnis kann eine Zeichenfolge (z. B. durch Kommas oder Zeilenumbrüche getrennt) oder ein Array sein.
  • Die Schreibweisen und Groß- und Kleinschreibung sind nicht verhandelbar.
  • Beispielausgabe muss nicht in Antworten angezeigt werden.
rybo111
quelle
@LevelRiverSt Die Sortierung ist jedoch ohne das erste Zeichen sehr unterschiedlich
fəˈnɛtɪk
@ fəˈnɛtɪk Das Markieren jedes Wortfragments mit seinem Anfangsbuchstaben ist wohl eine Methode zum Sortieren. Ich denke, der Vorschlag von sparklepony liegt in der Absicht des OP. Eigentlich sollte das OP darauf antworten, aber ich würde aufgrund nicht beobachtbarer Anforderungen dazu neigen, erneut abzustimmen, wenn das OP Nein sagt. Es wird chaotisch (was ist, wenn Sie eine Schleife verwenden, um sie einzeln herauszufischen, einen Buchstaben hinzuzufügen und zu drucken - dann machen Sie beides zusammen.) In solchen Fällen bin ich bei Martins Meta-OP. (und der Beitrag, auf den er mit 19 Upvotes und 0 Downvotes verwies)
Level River St
Wenn jemand der Meinung ist, dass dies nützlich sein könnte, lautet eine Zeichenfolge, die jedes der Eingabewörter vom Anfang der Zeichenfolge an eindeutig identifiziert hat, "l, r, ha, e, c, ox, ol, ot, nd, uli, il, im , ik, ov, s, ap, ue, o, dh ang, n, i, h, -, a, u "
fəˈnɛtɪk
1
Ich bin nicht sicher, ob ich verstehe, wie die Ausgabe aussehen soll. Ist es einfach der genaue Kolmogorov-Komplexitätsstil für phonetischen Text (oder Zeilenarray), außer dass Sie eine verstümmelte Version als Eingabe haben?
xnor
3
@xnor Es könnte besser funktionieren, wenn Sie eine zufällige Auswahl des gemischten phonetischen Alphabets erhalten, dann müssen Sie es der Reihe nach zurückgeben. In diesem Fall wäre der feste Text keine gültige Ausgabe.
fəˈnɛtɪk

Antworten:

4

Gelee , 21 Bytes

“ṣȤW¶¬þḷẒ⁶4ẹ’Œ?ịṢØA;"

Eingabe und Ausgabe sind String-Arrays.

Probieren Sie es online aus!

Hintergrund

Während es 26 sind! = 403291461126605635584000000 verschiedene Eingaben, wir können die Eingabe sortieren, so dass wir nur mit einer Permutation dieses phonetischen Alphabets umgehen müssen. Wenn wir lexikographisch sortieren, erhalten wir

-ray
ango
ankee
apa
cho
elta
harlie
hiskey
ictor
ierra
ike
ilo
ima
lfa
ndia
niform
olf
omeo
otel
ovember
oxtrot
ravo
scar
uebec
uliett
ulu

Wir können einfach in dieses Array indizieren, um es nach den entfernten Buchstaben zu sortieren. Die (1-basierten) Indizes sind

14 22  7  6  5 21 17 19 15 25 12 13 11 20 23  4 24 18 10  2 16  9  8  1  3 26

Sie müssen lediglich die Großbuchstaben des Alphabets den Zeichenfolgen im Ergebnis voranstellen.

Wie es funktioniert

“ṣȤW¶¬þḷẒ⁶4ẹ’Œ?ịṢØA;"  Main link. Argument: A (string array)

“ṣȤW¶¬þḷẒ⁶4ẹ’          Replace the characters by their indices in Jelly's code page
                       and convert the result from bijective base 250 to integer.
                       This yields k := 214215675539094608445950965.
             Œ?        Construct the k-th permutation (sorted lexicographically)
                       of [1, ..., n], with minimal n (26 here). This yields
                       [14, 22,  7,  6,  5, 21, 17, 19, 15, 25, 12, 13, 11,
                        20, 23,  4, 24, 18, 10,  2, 16,  9,  8,  1,  3, 26].
                Ṣ      Yield A, sorted.
               ị       For each j in the array to the left, select the j-th string
                       from the array to the right.
                 ØA    Yield "ABCDEFGHIJKLMNOPQRSTUVWXYZ".
                   ;"  Concatenate zipwith; prepend the j-th character from the
                       alphabet to the j-th string of the permuted input.
Dennis
quelle
1
Es wundert mich, wie gut Sie Golf spielen können ...
Christopher
2

JavaScript, 169/195 Bytes

Wenn das Ersetzen des ersten Buchstabens vor dem Sortieren von 169 Bytes erfolgen kann

x=>x.map(k=>{for(i=0;i<26;)if(!k.indexOf("l,r,ha,e,c,ox,ol,ot,nd,uli,il,im,ik,ov,s,ap,ue,o,ie,ang,n,i,h,-,a,u".split`,`[i++]))return String.fromCharCode(i+64)+k}).sort()

Probieren Sie es online aus!

Wenn vor dem Hinzufügen des ersten Buchstabens 195 Bytes sortiert werden müssen

x=>x.sort((a,b)=>g(a)-g(b)).map(a=>String.fromCharCode(g(a)+64)+a)
g=k=>{for(i=0;i<26;)if(!k.indexOf("l,r,ha,e,c,ox,ol,ot,nd,uli,il,im,ik,ov,s,ap,ue,o,ie,ang,n,i,h,-,a,u".split`,`[i++]))return i}

Probieren Sie es online aus!

Volle 20 Bytes jedes dieser Programme sind nur String.fromCharCode (), um das Zeichen wiederzugewinnen ...

Weitere 69 Bytes sind Zeichenfolgen, die den Anfang jedes Wortes im phonetischen Alphabet eindeutig identifizieren.

Erklärung des ersten Beispiels

for(i=0;i<26;)if(!k.indexOf("l,r,ha,e,c,ox,ol,ot,nd,uli,il,im,ik,ov,s,ap,ue,o,ie,ang,n,i,h,-,a,u".split,[i++]))return i

Die hier fest codierte Zeichenfolge wird in eine Liste der eindeutigen identifizierenden Zeichen unterteilt, mit denen die phonetischen Alphabetwörter beginnen, nachdem das erste Zeichen entfernt wurde.

return String.fromCharCode(i+64)+k

Diese Informationen werden verwendet, um den Index zu finden, in den die Zeichenfolge im Alphabet fällt, um das Startzeichen wieder zu aktivieren.

.sort()

JavaScript sortiert implizit als Zeichenfolgen nach den ASCII-Werten der Zeichen

Erklärung des zweiten Beispiels

Die Funktion g = k => ... findet den Index, für den die Zeichenfolge in das phonetische Alphabet fallen soll.

.sort((a,b)=>g(a)-g(b))

Sortiert die Zeichenfolgen nach den Zahlen, die durch Ausführen von g (...) zurückgegeben werden.

.map(a=>String.fromCharCode(g(a)+64)+a)

Ersetzt das erste Zeichen jeder der phonetischen Alphabetzeichenfolgen

fəˈnɛtɪk
quelle
Warum die .sort()in Ihrer 169 Byte Antwort? In der Frage heißt es " 3. Stellen Sie die ursprünglichen Anfangsbuchstaben jedes Wortes wieder her. ", Aber es wird nicht erwähnt, dass die Ausgabe ebenfalls sortiert werden muss.
Kevin Cruijssen
@ KevinCruijssen Ihr Ziel ist es, die Wörter wieder in ihre ursprüngliche Reihenfolge zu bringen, indem Sie nur die Buchstaben verwenden, die Sie jetzt haben. Mit anderen Worten: Finde heraus, wie '[A] lfa' vor '[B] ravo' kommt und so weiter. Ihr Code darf nicht auf die ursprüngliche Liste, Indexschlüssel usw.
verweisen
Ah, ich habe einen Teil aus der 2. Kugel falsch verstanden. Ich werde meinen Code bearbeiten.
Kevin Cruijssen
2

PHP , 94 Bytes

<?for(sort($_GET);$i<26;sort($r))$r[]=XTYPEDCWVSMKLAIUGRHNFBOQJZ[$i].$_GET[+$i++];print_r($r);

Probieren Sie es online aus!

Jörg Hülsermann
quelle
1

05AB1E , 29 27 Bytes

.•C5ê™вrΓ˜3åóMîõxÿ•uS|{)øJ{

Probieren Sie es online aus!

.•C5ê™вrΓ˜3åóMîõxÿ•uS       # Push exploded XTYPEDCWVSMKLAIUGRHNFBOQJZ.
                     |{)    # Push input in array, sorted.
                        øJ{ # Zip together, join, resort.

-2 dank Emignas Magie .•.

Magische Krakenurne
quelle
Sie können den String auch mit erstellen .•C5ê™вrΓ˜3åóMîõxÿ•u.
Emigna
Ist das nur ein Schlüsselraum, der mit A-Za-z0-9anstatt indiziert wird 0-9A-Za-z?
Magic Octopus Urn
Es ist eine Basis-27-Karte in <Leerzeichen>
Az
0

Java 7, 169 Bytes

import java.util.*;List c(List l){Collections.sort(l);int i=0;for(Object s:l)l.set(i,""+"XTYPEDCWVSMKLAIUGRHNFBOQJZ".charAt(i)+l.get(i++));Collections.sort(l);return l;}

Probieren Sie es hier aus.

Erläuterung:

import java.util.*;                            // Import used for List and Collections

void c(List l){                                // Method with list parameter and no return-type
  Collections.sort(l);                         //  Sort the given list
  int i=0; for(Object s:l)                     //  Loop over the Strings in the list
    l.set(i,""+                                //   Replace the String-item in the list with:
      +"XTYPEDCWVSMKLAIUGRHNFBOQJZ".charAt(i)  //    The leading capital character
      +l.get(i++);                             //    Followed by itself
                                               //  End of loop (implicit / single-line body)
}                                              // End of method
Kevin Cruijssen
quelle
Es muss in der ursprünglichen Reihenfolge zurückkehren (Alfa Bravo Charlie ...)
fəˈnɛtɪk
@ fəˈnɛtɪk Behoben auf Kosten von 18 Bytes, so dass es 169.
Kevin Cruijssen