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ę eCdla znaków zaszyfrowanych i Cznakó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.
cjest 38. znakiem (indeksowany zerem) lub100110binarnie. Wersja zaszyfrowana ma wszystkie bity odwrócone, więc011001 -> 25 -> '9'(ponownie zero indeksowane).ojest 50. postacią lub110010binarnie.xor(100110, 110010) = 010100 = 20 = '4'.djest 39. postacią lub100111binarnie.xor(100111, 110010) = 010101 = 21 = '5'.ejest 40. postacią lub101000binarnie.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|~
