Immer wenn Sie mit einem Zauberwürfel einen Zug machen, gibt es einen umgekehrten Zug, der den ersten Zug rückgängig macht. Aus diesem Grund hat jeder Algorithmus (Zugmenge) einen umgekehrten Algorithmus, der den ersten Algorithmus rückgängig macht.
Das Ziel dieser Herausforderung ist es, das Gegenteil eines gegebenen Algorithmus zu finden.
Spezifikation:
Die Eingabe besteht aus einer Reihe von einzelnen Zügen. Jeder Zug ist eine Zeichenfolge der Länge 1 oder 2. Natürlich können Sie jedes Eingabeformat verwenden, das in Ihrer Sprache am sinnvollsten ist. Jeder Zug besteht aus der Struktur X
oder X'
oder X2
, wobei X
es sich um einen Groß- oder Kleinbuchstaben handelt.
Zum Umkehren X
einfach durch ersetzen X'
. Ebenso X'
wird X
. X2
wird dagegen nicht verändert.
Um die Ausgabe zu erstellen, kehren Sie jede Bewegung um und kehren Sie dann das Array um.
Beispiele (durch Leerzeichen getrennte Zeichenfolgen):
R
=> R'
D U'
=> U D'
S T A C K
=> K' C' A' T' S'
A2 B2
=> B2 A2
Wertung:
Dies ist Code-Golf, so dass die wenigsten Bytes gewinnen. Standardlücken sind nicht erlaubt.
quelle
R2
->R2'
oderB
->B3
erlaubt?X3
oder dasX1
wäre eine schöne Ergänzung gewesen.D2R2
als Testfall gehabt haben ...Antworten:
Python 2 ,
71575453 Bytes-15 bytes dank ovs! -3 Bytes dank Rod.
Probieren Sie es online!
Zeichenfolge-E / A, 70 Byte
Probieren Sie es online!
quelle
V ,
13-10BytesProbieren Sie es online!
3 Bytes gespart dank @nmjmcman, der auf mein Lieblingsfeature hinweist. Erläuterung:
quelle
ä
like einen regulären Ausdruck dar, wenn es zu vim kompiliert wird?:g!/\d/norm A'<CR>:%s/''//g<CR>gg:g/^/m0<CR>
Weitere Informationen darüber, wie V reguläre Ausdrücke komprimiert, finden Sie hierRetina 0.8.2 ,
2726 BytesProbieren Sie es online! Link enthält Testfälle. Erläuterung: In der ersten Stufe wird nach jedem alphanumerischen Zeichen ein Apostroph eingefügt. Dies führt zu doppelten Apostrophen (mit oder ohne inklusive 2), die entfernt werden müssen. Die letzte Phase kehrt die Bewegungen um.
quelle
O$^
tatsächlich immer noch der beste Weg ist, eine Liste von Übereinstimmungen umzukehren, sodass die Byteanzahl in Retina 1 tatsächlich unverändert bleibt.JavaScript (ES6), 45 Byte
Die kürzeste Lösung besteht darin, Array IO zu verwenden. Einfache und angemessene Verwendung von Argumenten zur Vernichtung.
Die Zeichenfolgenausgabe beträgt +8 Byte für
.join` `
.String-Eingabe, Array-Ausgabe: 69 Bytes
quelle
.reverse()
mit::reverse
Speichern 1 Byte aber machen ES7Jelly , 11 Bytes
Ein monadischer Link, der eine Liste von Zeichenlisten zurückgibt (ein "Array" von "Strings").
Probieren Sie es online! (Die Fußzeile vermeidet das Zertrümmern der Ausgabe und zeigt die Liste mit Leerzeichen geteilt an.)
Wie?
quelle
JavaScript (ES6), 46 Byte
Nimmt Eingaben als Array von Zügen auf.
Probier es aus
Geben Sie eine durch Kommas getrennte Liste von Zügen ein.
Erläuterung
Anonyme Funktion, die das Array von Zügen als Argument über einen Parameter verwendet
a
.Ordnen Sie über das Array zu und übergeben Sie jede Zeichenfolge einer Funktion. Dabei
m
handelt es sich um die aktuelle Zeichenfolge.Überprüfen Sie, ob die Zeichenfolge ein zweites zweites Zeichen (
"'"
oder"2"
) enthält.Wenn dies der Fall ist, versuchen Sie, diese Zeichenfolge in eine Ganzzahl umzuwandeln. Wenn die Zeichenfolge ist
"2"
, wird es2
, was wahr ist. Wenn die Zeichenfolge ist"'"
, wird esNaN
, was falsch ist.Wenn der vorherige Test wahr ist, kehren Sie einfach zurück
m
.Andernfalls geben Sie das erste Zeichen von zurück
m
.Wenn die Zeichenfolge kein zweites Zeichen enthält, wird ein
m
angefügtes zurückgegeben'
.Kehren Sie das geänderte Array um.
quelle
Python ,
5148 BytesEine unbenannte Funktion, die Listen von Zeichenfolgen aufnimmt und zurückgibt.
Probieren Sie es online!
Kehrt die Eingabeliste mit um
a[::-1]
; hängt ein'
an jeden Eintrag mit anv+"'"
; Überträgt je ein bis zwei Zeichen, je nachdem, ob das Original ein'
In hatte oder nicht[:2-("'"in v)]
.quelle
Python 3 ,
918972706965 BytesProbieren Sie es online! (Mit Testfällen)
Anscheinend müssen Sie die Eingabe und Ausgabe nicht als Zeichenfolgen verwenden, sodass eine 69-Byte-Lösung möglich ist
quelle
len(i)==1
len(i)-2
ist kürzer alslen(i)==1
(denken Sie daran, 0 ist falsch)Haskell , 43 Bytes
Probieren Sie es online! Deklariert eine anonyme Funktion
map f.reverse
. Binden ang
und verwenden alsg["S","T","A","C","K"]
.quelle
PHP , 81 Bytes
Probieren Sie es online!
quelle
05AB1E , 13 Bytes
Probieren Sie es online!
Erläuterung
quelle
J, 25 Bytes
J handhabt dies gut, abgesehen von der unglücklichen Escape-Sequenz, die für die Darstellung eines einzelnen Anführungszeichens erforderlich ist:
Wir müssen die Liste mit Boxed Data darstellen, da es sich um eine Mischung aus einem und zwei Zeichen handelt.
&.>
- "under unbox" (unter Unbox), was bedeutet, dass jedes Element unbox ist, führen Sie die folgende Operation aus (dh die unten erläuterten Symbole) und boxen Sie dann neu, wenn Sie fertig sind(''''={:)
"wenn das 2. Zeichen ein einfaches Anführungszeichen ist" ....@.
(Js Agenda Verb, eine Art verallgemeinerte ternäre Aussage oder eine Fallaussage)}:
(der 2. Punkt auf der Tagesordnungsliste), "das letzte Zeichen entfernen", dh das einfache Anführungszeichen`(Js Bindungsverb) Sie können sich das als Trennzeichen für die Tagesordnungspunkte vorstellen
,&''''
(erster Punkt auf der Tagesordnungsliste) "füge ein einzelnes Zitat am Ende hinzu"|.
"umkehren"Probieren Sie es online!
quelle
R , 51 Bytes
Probieren Sie es online!
quelle
Ruby , 44 Bytes
Probieren Sie es online!
quelle
Java 8,
141128126 BytesNimmt Eingaben als einzelne
String
ohne Leerzeichen (dhRUR'URU2R'U
).Erläuterung:
Probieren Sie es online aus.
Beispiel für die obigen Schritte mit der angegebenen Eingabe:
RUR'URU2R'U
RUR'URU2R'U
→R'U'R'''U'R'U'2'R'''U'
R'U'R'''U'R'U'2'R'''U'
→R'U'RU'R'U'2'RU'
R'U'RU'R'U'2'RU'
→'R'UR'U'R'U'2R'U
'R'UR'U'R'U'2R'U
→'R'UR'U'R2UR'U
'R'UR'U'R2UR'U
→U'RU2R'U'RU'R'
quelle