Für die Post der Polizei , Cheapo Enigma Maschine (Cops)
Die Übermittlung eines Räubers besteht aus einem Programm / einer Funktion, die die Ausgabe des Codes eines Polizisten akzeptiert und die Eingabe für alle vom Code dieses Polizisten bereitgestellten Ausgaben zurückgibt. (Mit anderen Worten, Sie müssen die Umkehrfunktion schreiben)
Sie können keine integrierten Funktionen verwenden, die ausschließlich dem Hashing oder der Verschlüsselung dienen.
Eingabe- / Ausgabeformat
8 Bit (0 oder 1) oder eine Basis-10-Ganzzahl 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. Eingabe und Ausgabe müssen zu demselben Bereich gehören (wie in, binär, 1-256, 0-255 oder -128 bis 127), der auch derselbe Bereich sein muss, der vom Cop verwendet wird.
Wertung
Verhältnis der Byteanzahl des Cop zu Ihrer Byteanzahl. Die höchste Punktzahl gewinnt.
Sie können einen Räuberversuch gegen Ihren eigenen Cop-Code als Referenz einreichen. (Natürlich ist dieser Code nicht gewinnberechtigt)
Benachrichtigung
Bitte bearbeiten Sie die Antwort des entsprechenden Polizisten, um Ihre neue Byteanzahl und das entsprechende Verhältnis anzugeben.
quelle
Antworten:
JavaScript von Christoph , 8/25
(Bereich 0-255)
Funktioniert leider
f=(y,x)=>y?f(y/2,x^y):x
für alle Werte außer0
.Technischer Hinweis
Wir verwenden
y/2
eher alsy>>1
ein Byte zu speichern. Dies missbraucht die Tatsache, dass jeder Wert von aufgrund eines arithmetischen Unterlaufsy
schließlich auf gerundet wird .0
quelle
JavaScript von fəˈnɛtɪk , 13/19
(Bereich 1-256)
quelle
C, von Dave ,
64/959285Probieren Sie es hier aus !
C, kürzere Version,
64/8971Dieser ist implementierungsspezifischer, funktioniert jedoch mit TIO. Die gleiche Länge wie die PHP-Lösung konnte ich nicht kürzer bekommen.
Probieren Sie es hier aus !
quelle
JavaScript von fəˈnɛtɪk, 13/12
Eine weitere multiplikative Inverse.
quelle
JavaScript , 11/13
Probieren Sie es online aus!
quelle
Gelee , 22/3 = 7 1/3
Probieren Sie es online aus!
Die Cop-Einreichung von fəˈnɛtɪk bestand darin, die n- te ( 0- indizierte) lexikographisch sortierte Dezimalzahl unter Verwendung der Domäne [0,255] zurückzugeben .
I umgekehrt zunächst buchstäblich der Betrieb beschrieben,
⁹ḶDÞi⁸‘
- nimmt den abgesenkte Bereich von 256 ,⁹Ḷ
undÞ
instruiert sie durch eine Schlüsselfunktion der Umwandlung in eine Dezimalzahl Liste zu sortierenD
; findet dann den Index,i
der Eingang,⁸
und subtrahiert 1 ,‘
(Jelly Listen sind 1 -indexed).Dann habe ich Golf gespielt, indem ich die sortierte Liste mit in die Warteschlange gestellt habe
Ḋ
. Wenn ein Element gefunden wird nichti
zurückkehrt 0 wie für das entfernte erste Element (erforderlich 0 ), während alles andere einen Index früher gefunden wird, um die Entfernung der Abnahme ermöglicht,‘
, die wiederum gibti
auf seinem rechten implizite Eingabe von links (nur ) Eingabe in die monadische Verbindung.quelle
Javascript von Magenta, 32/23
Code schaltet grundsätzlich die unteren und oberen 4 Bits um und führt eine Modulo-Addition an einem Teil durch.
quelle
Javascript von Histocrat, 27/29
Leider werden zwei harte Codierungen benötigt, um es zu brechen.
Beachten Sie, dass die ursprüngliche Funktion 130 keinen Wert zuordnet, sondern 256 einen Wert .quelle
PHP, Punktzahl 64/71
Glücklicherweise
rand
leitet PHP wie C nur an die stdlib weiter . Dies funktioniert also, solange wir dieselbe stdlib verwenden. Dies bedeutet, dass es unter TIO funktioniert, jedoch nicht unter sandbox.onlinephpfunctions.com . Die aktuelle Version von Daves Code durchläuft nur eine pseudozufällige Sequenz und gibt den n-ten eindeutigen Wert zurück. Ich denke, es gibt möglicherweise viel kürzere Antworten, wenn eine Golfsprache auch die stdlib verwendet.Hier ist eine Implementierung von Daves Code, die nicht von der stdlib abhängt. Das könnte auch helfen.
quelle
srand(1)
? Auch hier ist ein Try it online!srand(x&&f(x-1))
dies stoppt nur, wenn esx==0
daher0
in der ersten Runde mit gesät wird . Nicht sicher, warum die nächsten Anrufe es nicht ändern.srand(0)
brichtrand
(siehe hier ). Ich denke, wirdsrand(0)
automatisch befördertsrand(1)
. Ich denke, wenn Sie jedes Mal einen anderen Samen verwenden könnten, würde es viel schwieriger werden, ihn zu brechen.Oktave , 16/18
Probieren Sie es online aus!
quelle
Gelee , 2/5 (nicht konkurrierend)
Probieren Sie es online aus , um die gesamte Tabelle zu sehen.
quelle
Gelee , 8/5
Probieren Sie es online aus , um die gesamte Tabelle zu sehen.
quelle
Gelee , 16/6
Probieren Sie es online aus , um die gesamte Tabelle zu sehen.
quelle
Gelee , 11/8
Probieren Sie es online aus , um die gesamte Tabelle zu sehen.
Für den Fall, dass Räuberbeiträge in einer anderen Sprache in Zukunft nicht mehr zulässig sind, rufe ich bei der folgenden Lösung dibs auf.
quelle
Gelee , 35/7
Probieren Sie es online aus , um die gesamte Tabelle zu sehen.
quelle
C (gcc) von Bijan, 32/30
Wir hatten viel Spaß beim Golfen, danke!
x=
Ermöglicht das Überspringen der Rückgabe mit gcc und tcc (möglicherweise möchten Sie Ihre Antwort ändern, um sie einzuschließen).g(--x)*205+51&255
ist das Gegenteil.quelle
Jelly , 37/11
Verwendet das gleiche E / A-Format wie der Cop. Ich bin mir nicht sicher, ob das erforderlich ist.
Probieren Sie es online aus , um die gesamte Tabelle zu sehen.
Wie es funktioniert
Für die Eingabe n wird die Cop-Antwort berechnet f (n): = ((((n + 5)% 256 × 2)% 256 + 2)% 256 × 9)% 256 . Da
%
es sich um einen linearen Operator handelt, entspricht dies f (n) = (((n + 5) × 7 + 2) × 9)% 256 . Wenn wir den richtigen Term erweitern, erhalten wir f (n) = (63n + 333)% 256 = (63n + 77)% 256 .Dies umzukehren ist ziemlich einfach. Um die Addition rückgängig zu machen, müssen wir einfach 77 subtrahieren . Auch kann , da 191 × 63% 256 = 12033% 256 = 1 , folgt daraus , daß 191 ist 63 ‚s inverse modulo 256 , also durch Multiplikation 191 rückgängig macht durch Multiplikation 63 . Auf diese Weise definiert g (n) = (n - 77) × 191% 256 die Umkehrung von f .
quelle