Herausforderung
Ihre Aufgabe ist es, eine Ganzzahl als eine Zeichenfolge aus ASCII- Zeichen zu codieren und sie dann erfolgreich zu decodieren, nachdem die Zeichenfolge zufällig gemischt wurde.
Sie schreiben zwei Programme / Funktionen , die als Encoder und Decoder bezeichnet werden .
Encoder
- Eingabe: eine ganze Zahl im Bereich von .
- Ausgang: ein String von ASCII - Zeichen (nicht unbedingt druckbar).
Decoder
- Eingabe: eine zufällige Permutation der Zeichenkette .
- Ausgabe: die ganze Zahl .
Wertung
Sei die maximale Länge von über alle möglichen Werte von . Wenn der Encoder nicht deterministisch agiert (was zulässig ist, siehe unten), ist das die maximale Länge von , die auftreten kann (möglicherweise ).
Lassen das sein Länge des Encoder in Bytes und die Länge der Decoder in Bytes.
Dann lautet Ihre Punktzahl .
Der Sieg wird der Einreichung mit der niedrigsten Punktzahl zuerkannt .
Zeitlimit
Es gibt eine etwas willkürliche Zeitgrenze von 1 Minute auf der Ausführungszeit von sowohl dem Encoder und dem Decoder für einen einzelnen Testfall (dh ein einziger Wert von ).
Das Ziel ist es, Lösungen zu vermeiden, die die Codierung brachial erzwingen, indem alle Sequenzen mit bestimmten Eigenschaften aufgelistet werden. Wenn Ihre Lösung etwas Klügeres als das tut, entspricht sie höchstwahrscheinlich der zeitlichen Beschränkung und wird als gültig betrachtet. Wenn es für einige zufällig ausgewählte Werte von auf TIO funktioniert , wird es ebenfalls als gültig betrachtet. Andernfalls werde ich es auf meinem Computer testen, aber beachten Sie, dass Ihre Lösung mit ziemlicher Sicherheit scheitern wird, wenn sie reine Brute-Force-Lösung ist.
Regeln
- Der Encoder und der Decoder müssen in derselben Sprache geschrieben sein .
- Der Decoder muss für jede mögliche Permutation der vom Encoder zurückgegebenen Zeichenfolge die richtige Ganzzahl ausgeben .
- Der Encoder und Decoder sind nicht zu erlaubt Austausch von Informationen in irgendeiner Weise (zB durch globale Variablen oder Dateien).
- Der Ausgang des Encoder muss nicht sein deterministisch (das heißt, der gleiche Eingang können unterschiedliche Ausgabestrings erzeugen , wenn der Encoder mehrere Male ausgeführt wird), aber der Decoder muss immer erraten die richtige ganze Zahl n .
- Der Codierer und der Decodierer können die Ganzzahl auf jede zweckmäßige Weise annehmen und zurückgeben (z. B. wenn , ist die Eingabe in Ordnung
14
,"14"
oder[1,4]
). - Der Encoder ausgeben kann die String entweder durch Drucke auf
stdout
oder durch Rücksendung eine Zeichenfolge, eine Liste / Array von Zeichen oder eine Liste / Matrix von ganzen Zahlen im Bereich ; Beachten Sie, dass der Decoder als Eingabe eine Permutation von empfängt, wie sie vom Encoder zurückgegeben wird. Daher sollte er die Zeichenfolge im gleichen Format wie akzeptieren . - Standardlücken sind verboten.
- Wenn möglich, erläutern Sie, wie Ihr Code funktioniert und warum die von Ihnen angegebene Punktzahl korrekt ist.
Beispiel
Angenommen, .
- Der Encoder empfängt
14
als Eingang. Es kann ausgegeben werden"qwerty"
.- Der Decoder empfängt beispielsweise eine Permutation von
"qwerty"
als Eingabe"tweyqr"
. Es muss ausgegeben werden14
(in jedem geeigneten Format).
Der Encoder hätte auch zurückkehren [113,119,101,114,116,121]
können. In diesem Fall hätte der Decoder beispielsweise empfangen [116,119,101,121,113,114]
.
Beachten Sie, dass der vom Encoder zurückgegebene String möglicherweise auch nicht druckbare ASCII-Zeichen enthält (jedoch immer im Bereich [0x00, ..., 0x7F]
).