Suchen Sie bei zwei gegebenen Zeichenfolgen die Übersetzungstabelle ( Substitutionsschlüssel) ) zwischen den beiden, und geben Sie false aus, wenn die Übersetzung nicht möglich ist. Die Antwort muss minimiert und von links nach rechts erstellt werden. Das erste zwischen Wörtern zu übersetzende Zeichen muss das erste in der Übersetzungstabelle sein. Darüber hinaus sollte jeder Buchstabe, der nicht übersetzt wurde (an der gleichen Stelle wie ursprünglich), NICHT in der Übersetzungstabelle enthalten sein.
Wahrscheinlich am einfachsten durch Beispiele zu definieren:
Gültige Fälle
"bat", "sap" => ["bt","sp"]
Beachten Sie die Bestellung, eine Ausgabe von ["tb","ps"]
ist für diese Challenge nicht gültig.
"sense", "12n12" => ["se","12"]
Beachten Sie, dass das n
nicht übersetzt wird, da es sich um eine 1: 1-Beziehung handelt.
"rabid", "snail" => ["rabd","snal"]
Beachten Sie, dass das i
nicht übersetzt wird, da es sich um eine 1: 1-Beziehung handelt.
"ass", "all" => ["s","l"]
A ist nicht enthalten, es bleibt gleich, s
kann l
aufgrund der Musterübereinstimmung zugeordnet werden.
"3121212", "ABLBLBL" => ["312","ABL"]
Passt perfekt zum Muster.
Falsche Fälle
"banana", "angular" => false
(nicht die gleiche Länge, unmöglich).
"animal", "snails" => false
(Jedes Zeichen kann nur EINMAL auf jeder Seite der Übersetzung verwendet werden.)
"can","cnn" => false
(n wird implizit in der Übersetzung verwendet, daher wäre die Definition einer Übersetzungstabelle mit n-> a ungültig.)
Somit [aimal,sails]
ist eine ungültige Antwort, die dies falsch macht.
"a1", "22" => false
Siehe "Vorbehalte", dies wird als falsch aufgeführt. In diesem Fall ist es , weil a
und 1
nicht beide abbilden können 2
. (Jedes Zeichen kann nur EINMAL auf jeder Seite der Übersetzung verwendet werden.)
Diese Antwort scheint ein guter Maßstab zu sein: /codegolf//a/116807/59376
Wenn Sie Fragen zur Funktionalität von zwei nicht aufgelisteten Wortpaaren haben, verschieben Sie diese Implementierung.
I / O-Regeln
- Die Eingabe kann als 2-Element-Array oder als 2 separate Eingaben erfolgen.
- Die Ausgabe kann als Array oder durch Zeilenumbrüche / Leerzeichen begrenzt sein, ähnlich wie ich es gezeigt habe.
- Falsche Ausgabe kann 0, -1 oder falsch sein. Fehlerhafte / leere Ausgabe ist auch in Ordnung.
- Sie sind garantiert, dass
a
nicht gleichb
und wedera
nochb
leer sein wird. a
undb
sind druckbare ASCII-Buchstabenfolgen.
Vorbehalte
- Übersetzungen müssen von links nach rechts erfolgen, siehe Beispiel 1.
- Sie dürfen keine Zeichen ausgeben, die gleich bleiben.
- Ihr Programm kann nur zwei Zeichenfolgen enthalten
a
undb
. - Jedes Zeichen kann nur EINMAL auf jeder Seite der Übersetzung verwendet werden. Dies macht die Übersetzung von
snails
nachanimals
unmöglich. - Rekursive Ersetzungen sollten nicht auftreten. Beispiel für rekursives Ersetzen:
"a1","22"->[a1,12]
Wenn a zuerst durch eine 1 ersetzt wird, werden beide resultierenden Einsen durch Zweisen ersetzt. Dies ist nicht korrekt, vorausgesetzt, alle Übersetzungen erfolgen unabhängig voneinander, was bedeutet, dass dies falsch ist. Bedeutung: "a1" mit Übersetzungstabelle von [a1,12] ergibt 12 (nicht 22)
quelle
Antworten:
JavaScript (ES6), 128 Byte
quelle
ass
undall
sollte seins,l
.JavaScript (ES6),
108107105106 BytesBearbeiten :
"22" / "a1"
Behoben, dass Eingaben , die falsch sein sollten, unterstützt werden.Gibt entweder einen
0
oder ein Array mit zwei Zeichenfolgen zurück.Formatiert und kommentiert
Testfälle
Code-Snippet anzeigen
quelle
f('22')('a1')
sollte auch falsch sein.PHP> = 7.1, 130 Bytes
18 Bytes von @Titus gespeichert
Testfälle
Erweitert
PHP> = 7.1, 148 Bytes
Gibt 0 für false aus. Ausgabe true als String
Testfälle
Erweitert
PHP> = 7.1, 131 Bytes
Die zweite Antwort kann hiermit kurzgeschlossen werden, wenn assoziative Arrays zulässig sind
Gibt 0 für false aus. Ausgabe true als assoziatives Array anstelle von string
Testfälle
PHP> = 7.1, 227 Bytes
gibt 0 für falsch aus
Testfälle
Erweitert
quelle
array_values()
Innerejoin()
ist völlig unbrauchbar und kann fallengelassen werden.a1 22 => false
Testfall nicht bestanden. Außerdem scheint Ihr erstes Programm im Online-Tester nicht zu funktionieren.($p=$x[$i])==$o?:$k[$c[$p]=$o]=$p;
in die Schleife und$y==strtr($x,$c)
für den ersten Test.Jelly , 18 Bytes
Unbenannter monadischer Link (One-Input-Funktion), der eine Liste erstellt, die
Folgendes zurückgibt: eine leere Liste in den Falsey-Fällen; oder
eine Liste mit zwei Listen von Zeichen in den wahrheitsgemäßen Fällen.
Probieren Sie es online! (In der Fußzeile wird die Liste durch ein Leerzeichen getrennt, um das Drucken einer verschwommenen Darstellung zu vermeiden.)
... oder eine Testsuite anzeigen.
Wie?
quelle
Netzhaut ,
194191185229225241 BytesProbieren Sie es online!
Nimmt die Eingabe
;
getrennt. Die Ausgabe wird ebenfalls;
getrennt. Falsche Eingaben werden durch leere Ausgaben angezeigt.Ich weiß, das ist schmerzlich wortreich, ich versuche immer noch, Bytes zu reduzieren. Die meisten dieser Bytes werden zum Löschen falscher Eingaben verwendet.
Bearbeitungen
Es stellt sich heraus, dass ich einen signifikanten Fehler in meinem Programm hatte. Es ist jetzt behoben, aber auf Kosten von über 40 Bytes.
Es wurde ein weiterer Fehler gefunden, bei dem mein Programm die Eingabe nicht für
a1;22
falsch erklärt hat, aber ich konnte das Programm nach der Korrektur unter 250 Byte haltenErläuterung
(Eine ausführlichere Erklärung wird in Kürze folgen.)
Zuerst müssen wir prüfen, ob die Länge der Saiten stimmt
a
undb
gleich sind oder nicht. Wenn nicht, löschen wir alles.Dupliziert die Eingabe, um sie bei einigen Längentests beizubehalten.
Jetzt löschen wir in einer Schleife das erste Zeichen von
a
und das erste Zeichen von,b
bis eine der Zeichenfolgen leer wird.Nun gibt es Möglichkeiten für den "Musterraum".
;;abc
Beide Saiten sind gleich langdef;;abc
a
ist länger alsb
;def;abc
b
ist länger alsa
Jetzt müssen wir die Eingabe leeren, wenn die Zeichenfolgen nicht die gleiche Länge haben (Szenarien 2 und 3). Dies ist, was diese Ersetzung unten tut. Es wird Text entfernt, der den Szenarien 2 und 3 entspricht.
Dadurch werden Zeichen entfernt, die in Strings
a
und nicht transliteriert sindb
.abc;1b2
=>ac;12
Danach müssen wir doppelte Zeichen entfernen.
sese;1212
=>se;12
, aber das erhält Eingaben wieaba;123
Schließlich löschen wir die Eingabe, wenn es doppelte Zeichen gibt, die verschiedenen Zeichen wie
aba;123
oder zugeordnet sinda1;22
.Und schließlich entfernen Sie doppelte Zeichen.
quelle
(?(1)(?!))
ich aus deiner Antwort gelernt habe :);
.Jelly ,
2826 BytesProbieren Sie es online!
quelle
Ruby, 133 Bytes
Probieren Sie es online!
Besser lesbar:
Nur zum Spaß, hier ist eine 84-Byte-Version in Goruby, Ruby, aber mit einem Golf-Flag, das beim Kompilieren des Interpreters gesetzt wird. Unter anderem können Sie Methodenaufrufe auf ihre kürzeste eindeutige Kennung abkürzen.
quelle
Python 2 ,
198, 193, 189, 182, 179,175 ,169,165 BytesProbieren Sie es online!
-4 Bytes! danke an mbomb007 für den vorschlag der verwendung von tab anstelle von space.
das Eingabeformat geändert, nochmal dank mbomb007.
quelle
Python 3.6,
211185181178 BytesBeendet mit einem Fehler für falsche Ergebnisse.
Dies erfordert Python 3.6, die Sie in einer Shell ausführen können hier .
Sie können es ohne die richtige Ausgabereihenfolge auf TIO testen hier . (TIO hat 3.6 nicht).
Ungolfed:
Wenn nur die Bestellung keine Rolle spielen würde ...
quelle
a1,12
zurückkehrena1,12
stattFalse
? Im Abschnitt Vorsichtsmaßnahmen heißt es, dass "a1" mit der Übersetzungstabelle von [a1,12] 12 ergibt .False
.1a 21
wäre auch falsch, da der oeder erhalten bleiben muss.a1,12
anstelle von gesagt habena1,22
.Röda ,
108119 BytesProbieren Sie es online!
Dies ist eine Funktion, die zwei Listen mit Zeichen aus dem Stream entnimmt und zwei Listen in den Stream überträgt.
Dies könnte sorter sein, wenn ich Paare zurückgeben durfte.
Erklärung (veraltet):
Hier ist eine Unterstrich-Lösung, die keine Variablen enthält (114 Bytes):
Das ist eine Menge Unterstriche.
quelle
<>
?a() <> b()
ist dasselbe wieinterleave([a()], [b()])
(oder nurinterleave(a, b)
, wenna
undb
sind Arrays).a1 22 => false
Testfall nicht bestanden. "Alle Übersetzungen erfolgen unabhängig voneinander, was bedeutet, dass dies falsch ist."AWK, 140 Bytes
Verwendung: Code eingeben in
FILE
dann:Die Eingabezeichenfolgen müssen durch Leerzeichen getrennt sein.
Die Ausgabe ist leer, wenn sie fehlschlägt, oder zwei durch ein Leerzeichen getrennte Zeichenfolgen.
quelle
k, 28 Bytes
Erläuterung:
quelle
APL (Dyalog) mit AGL , 22 Bytes
Probieren Sie es online!
{
…}
Anonyme Funktion:Wenn…
⍺⍵
die Argumente⍳⍨¨
wenn selbstindiziert (dh das erste Vorkommen ihrer Elemente in sich selbst)≡/
sind gleichwertig:
dann:⍺(
…)⍵
Wenden Sie die folgende implizite Funktion auf die Argumente an:,¨
entsprechende Elemente verketten (Fehler bei nicht übereinstimmenden Längen)é
dann filtere nach (é
ist nur die primitive Funktion/
)≠
wo die Saiten unterschiedlich sind∪
einzigartig (Duplikate entfernen)↓⍉↑
Transponiere Liste-von-Paaren in Paar-von-Listen (Lit. Mix in Tabelle, Transponiere Tabelle, Split in Listen)sonst nichts tun
quelle
↓⍉↑
hat mich noch ein wenig verwirrt.CJam, 38 Bytes
Eingabe und Ausgabe sind Arrays auf dem Stapel.
quelle
PHP (> = 7.1), 165 Bytes
druckt
0
für falsches, assoziatives Array sonst. Laufen Sie mit-r
oder testen Sie es online .Nervenzusammenbruch
quelle
Output can be as an array or ...
, also würde ich ja sagen. Die aktuelle PHP-Version ist für alle meine Postings implizit. aber wenn ich etwas wichtiges zum bearbeiten finde, füge ich die version hinzu.array_unique($r)!=$r
in jedem Fall ist,array_unique($r)<$r
werde ich deinen Beitrag alleine für diesen Trick verbessern. Im Moment bin ich auf der Suche nach einer Erklärungarray_unique($t)<$t
(musste das ändern, weilcan
tocnn
ungültig ist) funktioniert, weil Arrayvergleiche ( anders als Stringvergleiche) Längen vor allem anderen vergleichen.can
aufcnn
kostet mich 17 Bytes Forget meinen Vorschlag