Twoim zadaniem jest pobranie zaszyfrowanego łańcucha jako danych wejściowych i wyjście łańcucha odszyfrowanego, aby odsłonić ukryty komunikat.
Ciągi, zarówno wejściowe, jak i wyjściowe, będą zawierać znaki z tej listy 64 znaków ASCII (zwróć uwagę na spację wiodącą):
!"#$%&'()*+,-./0123456789:;=?@[\]^_abcdefghijklmnopqrstuvwxyz|~
Te znaki mają przypisane numery w kolejności, w jakiej są wymienione powyżej:
! " # $ % & ...
0 1 2 3 4 5 6 ...
Spacja jest więc liczbą 0, !
liczbą 1 i ~
liczbą 63. Liczby te można przedstawić w 6-bitowym kodzie binarnym:
: 0: 000000
!: 1: 000001
": 2: 000010
#: 3: 000011
.. ... ......
z: 61: 111101
|: 62: 111110
~: 63: 111111
Szyfrowanie jest bardzo proste:
Użyję eC
dla znaków zaszyfrowanych i C
znaków oryginalnego ciągu. C(n)
jest n-tym znakiem oryginalnego ciągu, a eC(n)
n-tym znakiem zaszyfrowanego ciągu.
Użyjesz 6-bitowej binarnej reprezentacji znaków. Pierwszą postacią będzie eC(0) = not(C(0))
. Stamtąd wszystkie postacie będą eC(n) = xor(C(n),C(n-1))
.
Przykład:
Załóżmy, że ciąg wejściowy to code
.
c
jest 38. znakiem (indeksowany zerem) lub100110
binarnie. Wersja zaszyfrowana ma wszystkie bity odwrócone, więc011001 -> 25 -> '9'
(ponownie zero indeksowane).o
jest 50. postacią lub110010
binarnie.xor(100110, 110010) = 010100 = 20 = '4'
.d
jest 39. postacią lub100111
binarnie.xor(100111, 110010) = 010101 = 21 = '5'
.e
jest 40. postacią lub101000
binarnie.xor(101000, 100111) = 001111 = 15 = '/'
.
Tak więc, jeśli oryginalny ciąg jest code
, zaszyfrowany ciąg zostanie 945/
.
Przypadki testowe:
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|~