Für Räuberpost , Cheapo Enigma-Maschine (Räuber)
Die Übermittlung eines Polizisten besteht aus einem Programm / einer Funktion, die ein einzelnes Datenbyte akzeptiert und ein einzelnes Datenbyte zurückgibt. Jede mögliche Eingabe muss eine eindeutige Ausgabe erzeugen. (Mit anderen Worten, Ihre Funktion muss bijektiv sein)
Räuber werden versuchen, Ihre Umkehrfunktion mit einem möglichst kurzen Code zu erzeugen. Ihr Ziel ist es also, die Invertierbarkeit Ihrer Funktion zu erschweren.
Sie können keine integrierten Funktionen verwenden, die ausschließlich zum Hashing oder zur Verschlüsselung dienen.
Ihre Byteanzahl darf 64 Bytes nicht überschreiten. 0-Byte-Lösungen sind nicht gewinnberechtigt.
Eingabe- / Ausgabeformat
8 Bits (0 oder 1) oder eine Ganzzahl zur Basis 10 im Bereich von 1-256, 0-255 oder -128 bis 127. Kann Standard-E / A oder Datei-E / A verwenden. Die Funktion kann auch einen Wert als Ausgabe zurückgeben. Eingang und Ausgang sollten im selben Bereich liegen (binär, 1-256, 0-255 oder -128 bis 127). Der Räuber muss diesen Bereich auch für die Ein- und Ausgabe verwenden.
Wertung
Das Verhältnis Ihrer Byteanzahl zu dem des besten Räuberversuchs gegen Sie. Die niedrigste Punktzahl gewinnt.
Sie sind nur dann zum Sieg berechtigt (als Polizist), wenn ein Räuber versucht hat, Sie zu besiegen. (Dieser Räuber kann Sie sein)
Beispiel
C ++ verwendet einen Bereich von 0 bis 255 (31 Byte)
int x;
cin>>x;
cout<<(x+1)%256;
Mögliche Raubübermittlung in C ++, 32 Bytes
int f(int x)
{return x?x-1:255;}
Die Verwendung derselben Sprache oder eines ähnlichen Algorithmus ist nicht erforderlich
Dies ergibt eine Punktzahl von 31/32 = 0,97 sowohl für den Polizisten als auch für den Räuber.
quelle
Antworten:
Javascript,
118 Bytes, Ergebnis: 8/5Einfache Implementierung von Gray Code. Das Dekodieren benötigt normalerweise eine ganze Schleife. Mal sehen, wer mit der kleinsten oder sogar ohne Schleife kommt!
quelle
x^x/4
wird schwieriger sein, weil es dafür keine Buildins geben sollte ...^
ist bitweise xoder nicht Exponentiation. Wie auch immer, es sieht magisch ausC, 64 Bytes, Score 64/71 = 0,901
Übernimmt Eingaben im Bereich [0 255].
Probieren Sie es online! - Auf TIO (mit GCC) erzeugt dies:
Beachten Sie, dass es auf anderen Systemen zu einer anderen (aber immer noch gültigen) Ausgabe kommen kann, da C keine bestimmte
rand
Implementierung erfordert . Mein Beitrag ist speziell die Version, die auf TIO läuft (wie verlinkt).Ich bin ziemlich enttäuscht, dass ich nicht in der Lage war, eine Version wie meine original (
f(x){return rand(srand(x*229))/229%256;}
) auf TIO zu bringen, da ich das für viel eleganter halte. Da das nur auf Clang unter OS X funktioniert, ist es nicht fair für die Konkurrenz. Es ist immer noch ziemlich umständlich, das rückgängig zu machen, also reicht es wohl.quelle
srand()
, so dass Sie sich entscheiden müssen, ob es in dieser Form akzeptabel ist.Gelee , 2/5
Probieren Sie es online aus , um die gesamte Tabelle zu sehen.
quelle
JavaScript, 44 Bytes 22/3
Verwendet die lexikografische Sortierung (Standardeinstellung Javascript), um alle Zahlen von 0 bis 255 neu anzuordnen
Probieren Sie es online!
quelle
C (GCC) ,
3227/30 BytesDanke an christoph für das Golfen mit 5 Bytes.
Probieren Sie es online!
quelle
f(x){x=x?f(x*5+1&255)+1:0;}
für eine Punktzahl von wechseln27/30
.Javascript, 11/8 Bytes
Domain / Bereich ist 1 bis 256.
quelle
x**3
undx**5
sollte funktionieren.JavaScript, 13 Bytes 13/12
Input und Output liegen beide im Bereich 1-> 256
Probieren Sie es online!
quelle
Javascript, 27/29 Bytes
Bearbeiten: Bereich / Domain ist 1..256. Mehr oder weniger durch rohe Gewalt erzeugt.
quelle
Oktave , 16/6
Probieren Sie es online!
quelle
Java, 35 Bytes
Domain / Range sind 0-255
quelle
Ruby, 23 Bytes
Reichweite und Domain sind 0..255. Verketten Sie 228 x-mal mit sich selbst, und nehmen Sie dann das Ergebnis modulo 257 (0 ordnet 0 zu). 228 ist die erste magische Zahl nach 9, die für diesen Bereich gilt (gibt eindeutige Werte ohne 256 an).
quelle
Python 3, 55 Bytes
Domain / Range ist 0-255.
quelle
Python 3, 32 Bytes 32/23
Domain / Range ist 0-255.
Kehrt die ersten vier Bytes mit den letzten vier Bytes um und fügt den ersten Bytes eine Drei hinzu.
quelle
Mathematica, 13 Bytes
Verwendet den Bereich [1..256], obwohl er auch für den Bereich [0..255] gültig ist. Kopieren Sie eine der folgenden Codezeilen in die Wolfram-Sandbox, um die gesamte Tabelle anzuzeigen :
quelle
Brainfuck , 37/11
Probieren Sie es online!
Nicht sehr gut, aber Bereich von 0-255
quelle