Bei einem gegebenen Schlüssel und einem Array von Zeichenfolgen wird das Array gemischt, sodass es sortiert wird, wenn jedes Element mit dem Schlüssel einer XOR-Verknüpfung unterzogen wird.
XOR'ing zwei Saiten
Um eine Zeichenfolge durch einen Schlüssel zu XORen, XORen Sie jeden der Zeichenwerte der Zeichenfolge durch sein Paar im Schlüssel, vorausgesetzt, der Schlüssel wird für immer wiederholt. abcde^123
Sieht zum Beispiel so aus:
a b c d e
1 2 3 1 2
--------------------------------------------
01100001 01100010 01100011 01100100 01100101
00110001 00110010 00110011 00110001 00110010
--------------------------------------------
01010000 01010000 01010000 01010101 01010111
--------------------------------------------
P P P U W
Sortierung
Die Sortierung sollte immer lexikografisch anhand der XOR-Zeichenfolgen erfolgen. Das heißt 1 < A < a < ~
(unter der Annahme einer ASCII-Codierung)
Beispiel
"912", ["abcde", "hello", "test", "honk"]
-- XOR'd
["XSQ]T", "QT^U^", "MTAM", "Q^\R"]
-- Sorted
["MTAM", "QT^U^", "Q^\R", "XSQ]T"]
-- Converted back
["test", "hello", "honk", "abcde"]
Anmerkungen
- Der Schlüssel besteht immer aus mindestens 1 Zeichen
- Schlüssel und Eingabe bestehen nur aus druckbarem ASCII.
- XOR-Zeichenfolgen können nicht druckbare Zeichen enthalten.
- Die Ein- und Ausgabe kann nach vernünftigen Methoden erfolgen
- Standardlücken sind verboten.
- Sie können den Schlüssel und die Eingabe in beliebiger Reihenfolge vornehmen.
Testfälle
key, input -> output
--------------------
"912", ["abcde", "hello", "test", "honk"] -> ["test", "hello", "honk", "abcde"]
"taco", ["this", "is", "a", "taco", "test"] -> ["taco", "test", "this", "a", "is"]
"thisisalongkey", ["who", "what", "when"] -> ["who", "what", "when"]
"3", ["who", "what", "when"] -> ["what", "when", "who"]
Das ist Code-Golf , also gewinnt das Minimum an Bytes!
Antworten:
Gelee ,
97 BytesVielen Dank an @EriktheOutgolfer für einen Vorschlag, der dazu beigetragen hat, 2 Bytes zu sparen!
Probieren Sie es online!
Wie es funktioniert
quelle
Python 3 ,
7573 BytesDadurch wird die Liste x an Ort und Stelle sortiert .
Vielen Dank an @mercator für das Golfen mit 2 Bytes!
Probieren Sie es online!
Alternative Version, 62 Bytes
Die Eingabe erfolgt als Byte-Zeichenfolge, die möglicherweise nicht zulässig ist.
Probieren Sie es online!
quelle
x.sort(key=...)
.Haskell, 77 Bytes
Zu viele Importe.
Probieren Sie es online!
quelle
Ruby , 61 Bytes
Probieren Sie es online!
quelle
Sauber ,
10110094 Bytes-6 Bytes dank Ourous!
Probieren Sie es online! Beispiel Nutzung:
s ['3'] [['who'], ['what'], ['when']]
.Ungolfed:
quelle
? =toInt
Wenn Sie?
stattdessen verwenden, werden 2 Bytes gespeichert, und wenn Sie einen umgekehrten Wert größer als anstelle von kleiner oder gleich verwenden, wird ein weiterer Wert gespeichert.Eigentlich 24 Bytes
Probieren Sie es online!
Erläuterung:
quelle
["who", "what", "when"]
und"thisisalongkey"
Perl 6 , 37 Bytes
Probieren Sie es online!
$^a
und@^b
sind die Schlüssel- bzw. Array-Argumente für die Funktion.@^b.sort(...)
Sortiert das Eingabearray einfach nach der angegebenen Prädikatfunktion. Diese Funktion verwendet ein einzelnes Argument,sort
übergibt es also der Reihe nach jedem Element und behandelt den Rückgabewert als Schlüssel für dieses Element, wobei die Liste nach den Schlüsseln der Elemente sortiert wird.Die Sortierfunktion ist
*.comb Z~^ (|$^a.comb xx *)
.*
ist das einzelne Zeichenfolgenargument für die Funktion.*.comb
ist eine Liste der einzelnen Zeichen der Zeichenfolge.|$^a.comb xx *
ist eine Liste der Zeichen im xor-Sortierschlüssel, die unendlich repliziert wird. Diese beiden Listen werdenZ
mit dem Operator stringwise xor (~^
) zusammengepackt ( ). Da das Sortierprädikat einen Sortierschlüssel zurückgibt, der eine Liste ist,sort
ordnet es zwei Elemente durch Vergleichen der ersten Elemente der zurückgegebenen Listen und der zweiten Elemente, wenn die ersten Elemente identisch sind, usw. an.quelle
{sort *.comb »~^»$^a.comb,@^b}
C (GCC) ,
132128126 BytesNimmt eine Argumentanzahl und einen Zeiger auf ein Zeichenfolgenarray (den Schlüssel, gefolgt von den zu sortierenden Zeichenfolgen) und ändert das Zeichenfolgenarray direkt.
Der Code ist nicht portierbar und erfordert 64-Bit-Zeiger, gcc und glibc.
Vielen Dank an @ceilingcat für das Golfen mit 2 Bytes!
Probieren Sie es online!
quelle
Python 2,
204 140 134126 BytesVielen Dank an @Mr. Xcoder für das Speichern von 64 Bytes, danke an @ovs für das Speichern von sechs Bytes und danke an @Dennis für das Speichern von acht Bytes!
Probieren Sie es online!
quelle
x86-Opcode, 57 Bytes
Testcode:
quelle
JavaScript ES 6,
1139795 BytesJavaScript ist lang beim Zeichnen ...
Für [0,65536) + 1e4 sind alle 5 Stellen, können also wie ein String verglichen werden
quelle
k+=k
anstelle vonp=k+p
aber zu viel Speicher mit dem kleinen Testfall verwendenPerl 5, 88 Bytes
Probieren Sie es online aus .
quelle
Clojure, 80 Bytes
quelle
Perl 5,
80 + 3 (, 67 Bytesanl
) = 83versuche es online
quelle
9
;abcdeabcde abcdeabcdz
(sollte gebenabcdeabcdz abcdeabcde
)AWK ,
285284 BytesProbieren Sie es online!
Akzeptiert Eingaben in Form von
key word word ...
z912 abcde hello test honk
Gibt sortierte Wörter getrennt voneinander aus
Etwas besser lesbar
quelle
Faktor 85
Versuchen Sie zuerst, ich werde sehen, ob ich morgen weiter Golf spielen kann.
Ich akzeptiere Vorschläge;)
quelle
Dyalog APL, 34 Bytes
Dfn, benutzt ⎕ml 3
quelle