Tugas Anda adalah untuk mengambil string terenkripsi sebagai input, dan output string didekripsi, untuk mengungkapkan pesannya yang tersembunyi.
String, baik input maupun output, akan berisi karakter dari daftar 64 karakter ASCII ini (perhatikan spasi terdepan):
!"#$%&'()*+,-./0123456789:;=?@[\]^_abcdefghijklmnopqrstuvwxyz|~
Karakter-karakter ini diberi nomor, sesuai urutan yang tercantum di atas:
! " # $ % & ...
0 1 2 3 4 5 6 ...
Jadi, spasi adalah angka 0, !
adalah angka 1 dan ~
angka 63. Angka-angka ini dapat direpresentasikan dalam kode biner 6-bit:
: 0: 000000
!: 1: 000001
": 2: 000010
#: 3: 000011
.. ... ......
z: 61: 111101
|: 62: 111110
~: 63: 111111
Enkripsi sangat sederhana:
Saya akan gunakan eC
untuk karakter terenkripsi, dan C
untuk karakter string asli. C(n)
adalah karakter ke-n dari string asli, sedangkan eC(n)
karakter ke-n dari string yang dienkripsi.
Anda akan menggunakan representasi biner 6-bit dari karakter. Karakter pertama adalah eC(0) = not(C(0))
. Dari sana, semua karakter akan menjadi eC(n) = xor(C(n),C(n-1))
.
Contoh:
Mari kita asumsikan string inputnya code
.
c
adalah karakter ke-38 (nol diindeks), atau100110
dalam biner. Versi terenkripsi memiliki semua bit terbalik, jadi011001 -> 25 -> '9'
(sekali lagi, nol diindeks).o
adalah karakter ke-50, atau110010
dalam biner.xor(100110, 110010) = 010100 = 20 = '4'
.d
adalah karakter ke-39, atau100111
dalam biner.xor(100111, 110010) = 010101 = 21 = '5'
.e
adalah karakter ke-40, atau101000
dalam biner.xor(101000, 100111) = 001111 = 15 = '/'
.
Jadi, jika string asli adalah code
, string terenkripsi akan menjadi 945/
.
Kasus uji:
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|~