Einführung
Eines Tages haben Sie sich gerade in Ihrem Büro bei der CIA entspannt, als plötzlich eine Warnung auf Ihrem Computer angezeigt wird. Ihre Programme haben gerade Hunderte von codierten Nachrichten abgefangen! Eine schnelle Untersuchung zeigt die Regel für die Codierung, aber Sie benötigen ein Programm, um schnell zu decodieren.
Herausforderung
Sie erhalten eine Liste von Zeichenfolgen, die durch Kommas getrennt sind. Jede Zeichenfolge enthält entweder:
- Teil der codierten Nachricht
- Es ist Teil der codierten Nachricht, wenn es nicht im Formular vorliegt
a=b
. Beachten Sie, dass es ist ein Teil der Nachricht , wenn esab=c
. Fügen Sie diese Zeichenfolge der codierten Nachricht hinzu.
- Es ist Teil der codierten Nachricht, wenn es nicht im Formular vorliegt
- Teil des Codierungsschemas
- Dies wird in Form von sein
a=b
. Das bedeutet, dass alle a in der Nachricht durch b ersetzt werden müssen. Beachten Sie, dass dies möglich ista==
, was bedeutet, dass alle a`s durch = 's ersetzt werden müssen.
- Dies wird in Form von sein
Ihr Programm muss dann die Nachricht ausgeben, die mit dem gefundenen Schema dekodiert wurde.
Sonstige Informationen: Ihre Eingabe enthält nur Kommas zum Trennen der Zeichenfolgen. Es kann andere Zeichen wie! 1 # usw. enthalten. Es enthält keine Großbuchstaben. Teile der Dekodierungsinformationen dekodieren sich nicht gegenseitig. Nur die Nachricht ist von den Decodierungsinformationen betroffen. Für jedes Zeichen wird nur ein Ersatz gegeben, z. B. nein"io,"i=u","i=g"
Beispiele
Eingang:"ta","y=s","y","a=e","b=t","b"," ","j","j=1"
Ausgabe:test 1
Eingang:"z=p","zota","g=e","yugkb","y=t","u=o","k=s","li","fg","b=="
Ausgabe:potatoes=life
Eingang:"p","=","==n","ot","p=a","hiz","i=e","z=r"
Ausgabe:another
Dies ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes!
quelle
"massega","e=a","a=e"
und dergleichen?"io,"i=u","i=g"
Antworten:
Gelee , 19 Bytes
Probieren Sie es online aus!
Wie?
quelle
m
ist ein dyadisches Atom, das jedes rechts-te Element von links * nimmt. Hier['x','=','y','<space>','a','=','b']m2
würde zum Beispiel nachgeben['x','y','a','b']
. (* es sei denn, rechts ist Null, wenn stattdessen eine Reflexion angehängt wird.)Python 3, 98
Diese
lambda
Funktion empfängt eine Liste von Zeichenfolgen (Eingabe) und gibt eine Zeichenfolge (die dekodierte Nachricht) zurück.Beispiele:
quelle
'=' == x[1:2]
es wahr sein wirdx = 'a=bc'
, was nicht Teil des Codierungsschemas istHaskell, 85 Bytes
Verwendung
Beschreibung
f
erstellt eine Nachschlagetabelle.concat[c|c<-x,[]==f[c]]
extrahiert die Nachricht.map(\v->maybe v id$lookup v$f x)
führt die Suche durch.quelle
JavaScript (ES6), 87 Byte
quelle
Retina,
84827774 BytesNimmt eine durch Kommas getrennte Liste als Eingabe. Beachten Sie den nachfolgenden Zeilenumbruch
Probieren Sie es online aus!
Erläuterung:
Zuerst verschieben wir alle Ausdrücke des Formulars
.=.
an das Ende der Zeichenfolge und trennen diese von der Nachricht durch ein Doppelkomma (,,
). Dies ist so, dass wir im nächsten Schritt alle Codierungen finden können, indem wir prüfen, ob jedes Zeichen vor dem,,
eine Übereinstimmung hat=.
. Dies wird erreicht, indemM!&`(.).*,,.*\1=.|.+,
alle diese Übereinstimmungen gefunden und in eine durch Zeilenvorschub getrennte Liste von Zeichenfolgen eingefügt werden. Wir ändern dann jede Zeichenfolge so, dass sie entweder nur ein nicht codiertes Zeichen oder die codierte Version des Zeichens enthält. Schließlich ersetzen wir alle Zeilenvorschübe und Kommas durch die leere Zeichenfolge, damit unsere Ausgabe gut formatiert wird.quelle
Stapel, 188 Bytes
Erläuterung: Durchläuft die Liste der Zeichenfolgen zweimal (
for
mag eine Zeichenfolge im CSV-Format). Sucht beim ersten Mal nach Zeichenfolgen, die kein=
zweites Zeichen enthalten, und verkettet sie mit dem Ergebnis. Sucht beim zweiten Mal nach Zeichenfolgen, die ein=
zweites Zeichen enthalten, und führt die Ersetzung durch. (Noch bequemer ist, dass die Ersetzung bereits im Stapelformat erfolgt.)quelle
PHP, 116 Bytes
Online Version
quelle
PHP,
8987 Byteszwei Versionen:
Nimmt Eingaben von Befehlszeilenargumenten entgegen. laufen mit
-nr
.strtr
(Übersetzung, wenn das Argument enthält
=
, Nachricht else).strtr
.quelle
05AB1E , 31 Bytes
Probieren Sie es online aus!
quelle