Das Problem:
Zwei feindliche Geheimagenten haben eine wunderbare (für Sie) Kommunikationsmethode entwickelt!
So funktioniert der Verschlüsselungsprozess:
1) Nehmen Sie die Ascii-Äquivalente jedes Buchstabens. (Es werden keine Leerzeichen, Zahlen oder Satzzeichen gesendet.)
2) Für jeden Buchstaben in der Nachricht werden das ASCII-Äquivalent davon und der Buchstabe danach (falls vorhanden, falls nicht, sollte es als 0 betrachtet werden) multipliziert (dieses Produkt wird in einem Array / einer Liste gespeichert). und summiert (diese Nummer wird auch in einer anderen Liste gespeichert).
3) Die zwei Listen (von Summen und Produkten) werden zusammengefügt (die Summenliste, dann die Mehrfachliste, in demselben Array) und übertragen.
Sie müssen das kleinste Programm schreiben, das in der Lage ist, diesen Vorgang umzukehren und in diesem Format gesendete Nachrichten zu entschlüsseln!
Beispiel für Eingabe- und Ausgabepaare:
[173, 209, 216, 219, 198, 198, 225, 222, 208, 100, 7272, 10908, 11664, 11988, 9657, 9657, 12654, 12312, 10800, 0] -> “HelloWorld”
[131, 133, 164, 195, 197, 99, 4290, 4422, 6499, 9506, 9702, 0] -> “ABCabc”
Das ist Code-Golf , also gewinnt die kleinste Lösung in Bytes.
Fehlermeldungen sind erlaubt.
Ihrem Programm kann entweder eine Liste / ein eindimensionales Array oder eine durch Kommas getrennte Zeichenfolge zugewiesen werden, wenn Sie dies in Ihrer Übermittlung angeben. Der Standardwert ist ein Array / eine Liste.
quelle
Antworten:
Schale ,
76 BytesProbieren Sie es online! Laut Dokumentation sollte das Leading
m
nicht benötigt werden, aber es scheint aktuell einen Bug zu geben.Edit: -1 Byte danke an Zgarb!
Erläuterung:
quelle
`-
kann sein≠
. Das Verhalten vonc
sieht in der Tat wie ein Bug aus.Brainfuck , 66 Bytes
Die Eingabe ist die verschlüsselte Zeichenfolge. Nimmt unendlich große Zellen und 0 bei EOF an.
Wie es funktioniert:
quelle
Haskell ,
45-35BytesProbieren Sie es online!
Erläuterung
fst.span(<245)
Nimmt alle Zahlen vom Anfang der Liste, die kleiner als 245 sind. Dies sind nur die Zahlen aus dem Summationsteil, da die größtmögliche Summez + z = 122 + 122 = 244
und das kleinstmögliche Produkt istA * A = 65 * 65 = 4225
.scanr1(-)
Nimmt den letzten Wert der Liste und verwendet ihn als anfänglichen Akkumulator. Dann wird von hinten nach vorne jedes Element der Liste vom aktuellen Akkumulator subtrahiert, und das Ergebnis wird als nächster Akkumulator verwendet und einer Liste hinzugefügt.map toEnum
Ersetzt jede Zahl in der Liste durch das entsprechende Zeichen, um die Zeichenfolge neu zu erstellen.quelle
Gelee , 9 Bytes
Probieren Sie es online! oder Überprüfen Sie beide Testfälle.
Alternative.
Erläuterung
quelle
Python 2 , 72 Bytes
Probieren Sie es online!
quelle
Python 2 , 92 Bytes
Probieren Sie es online!
quelle
Gelee , 11 Bytes
Ein monadischer Link, der eine Liste von ganzen Zahlen erstellt und eine Liste von Zeichen zurückgibt.
Probieren Sie es online!
Wie?
quelle
Pyt , 60 Bytes
Nimmt eine Liste von Ganzzahlen und gibt eine Zeichenfolge zurück.
Erläuterung:
Probieren Sie es online!
quelle
JavaScript (ES6), 80 Byte
Code-Snippet anzeigen
quelle
VB Script -
7471 Bytes(Ich habe es geschafft, von 74 auf 71 zu reduzieren, indem ich While..Wend anstelle von Do..Loop verwendete.)
Die Eingabe befindet sich in einem Array a (), die Ausgabe in der Zeichenfolge d
Erläuterung
Ich habe dies in einer vbscript-Datei mit dem obigen Code als Funktion getestet:
quelle
Sauber ,
96817877 Byteszero
ist das Nullzeichen.Ich könnte ein weiteres Byte speichern, wenn Clean in Bezug auf Literal-Nullen in der Quelldatei nicht so pingelig wäre.
Probieren Sie es online!
quelle
f=
.f=
es sich um die kürzeste Zuweisung handelt. Bei einem minimalen Aufruf werden also trotzdem zwei hinzugefügt.Perl 5 , 39 + 2 (
-ap
) = 41 BytesProbieren Sie es online!
quelle
C (GCC) ,
9089 Bytess+=(i%2?-1:1)*...
<~>s-=~(i%2*-2)
.Probieren Sie es online!
quelle
Standard ML (MLton) ,
858482 BytesProbieren Sie es online!
Ungolfed:
Probieren Sie es online!
quelle
Perl 6 ,
43 3935 BytesProbier es aus
Teste es (mache das selbe wie oben)
Probier es aus
Probier es aus
Erläuterung:
quelle
05AB1E , 9 Bytes
Probieren Sie es online!
Erläuterung
quelle
J
oin nicht.ç
die Liste der Zeichen jedoch nicht implizit in eine Zeichenfolge um. Wenn ich das Problem richtig verstehe, muss das Programm eine Zeichenfolge und keine Zeichenliste ausgeben.Japt, 12 Bytes
Es muss einen kürzeren Weg geben, um die erste Hälfte des Arrays zu erhalten ...
Versuch es
quelle
Python 2 , 70 Bytes
Probieren Sie es online!
quelle