Ihre Aufgabe ist es, eine verschlüsselte Zeichenfolge als Eingabe zu verwenden und die entschlüsselte Zeichenfolge auszugeben, um ihre versteckte Nachricht zu enthüllen.
Die Zeichenfolgen, sowohl die Eingabe als auch die Ausgabe, enthalten Zeichen aus dieser Liste mit 64 ASCII-Zeichen (beachten Sie das führende Leerzeichen):
!"#$%&'()*+,-./0123456789:;=?@[\]^_abcdefghijklmnopqrstuvwxyz|~
Diesen Zeichen werden Nummern in der Reihenfolge zugewiesen, in der sie oben aufgeführt sind:
! " # $ % & ...
0 1 2 3 4 5 6 ...
Das Leerzeichen ist also die Nummer 0, !die Nummer 1 und ~die Nummer 63. Diese Zahlen können im 6-Bit-Binärcode dargestellt werden:
: 0: 000000
!: 1: 000001
": 2: 000010
#: 3: 000011
.. ... ......
z: 61: 111101
|: 62: 111110
~: 63: 111111
Die Verschlüsselung ist sehr einfach:
Ich werde eCfür verschlüsselte Zeichen und Cfür Zeichen der ursprünglichen Zeichenfolge verwenden. C(n)ist das n-te Zeichen der ursprünglichen Zeichenfolge, während eC(n)das n-te Zeichen der verschlüsselten Zeichenfolge ist.
Sie verwenden die 6-Bit-Binärdarstellung der Zeichen. Das erste Zeichen wird sein eC(0) = not(C(0)). Von dort werden alle Charaktere sein eC(n) = xor(C(n),C(n-1)).
Beispiel:
Nehmen wir an, die Eingabezeichenfolge ist code.
cist das 38. Zeichen (null indiziert) oder100110binär. In der verschlüsselten Version sind alle Bits umgedreht, also011001 -> 25 -> '9'(wieder null indiziert).oist das 50. Zeichen oder110010binär.xor(100110, 110010) = 010100 = 20 = '4'.dist das 39. Zeichen oder100111binär.xor(100111, 110010) = 010101 = 21 = '5'.eist das 40. Zeichen oder101000binär.xor(101000, 100111) = 001111 = 15 = '/'.
Wenn es sich also um die ursprüngliche Zeichenfolge handelt code, wird die verschlüsselte Zeichenfolge zu 945/.
Testfälle:
945/
code
,&'8[14 =?;gp+% 2'@s&&c45/eg8?&
programming puzzles & code golf
;a$5$%0r?2@12dw6# lb-eg&519nt%ot=9$@es@96+?;ga" 4*)&ta56dp[?o#t%oh/"(&?#ee![,+,/+fe4"
a $150 reward will be given to those sending account and pin# to hackers@steal_id.com
~!#!'!#!/!#!'!#![!#!'!#!/!#!'!#!~!#!'!#!/!#!'!#![!#!'!#!/!#!'!#!
!"#$%&'()*+,-./0123456789:;=?@[\]^_abcdefghijklmnopqrstuvwxyz|~
