Berikut adalah huruf-huruf alfabet bahasa Inggris sesuai frekuensi:
e t a o i n s h r d l c u m w f g y p b v k j x q z
Artinya, e
adalah surat yang paling sering digunakan, dan z
merupakan yang paling tidak umum. (Data dari Wikipedia .)
Tantangan Anda adalah mengambil beberapa teks ber-ROT, seperti:
ocdndnvqzmtnzxmzohznnvbzocvodnqzmtnzxpmzviynvaz
Ini adalah teks "thisisaverysecretmessagessatisethsveryureecafe dan safe" yang "dienkripsi" melalui ROT-21 (setengah dari 42). Program Anda, menggunakan tabel frekuensi di atas, harus dapat menentukan seberapa banyak setiap karakter diputar dan teks aslinya.
(Jika Anda tidak terbiasa dengan ROT-n, pada dasarnya mengubah setiap karakter dengan n
. Misalnya, dalam ROT-2 a -> c, b -> d, ..., x -> z, y -> a, z -> b
,.)
Bagaimana, Anda bertanya? Algoritma (sangat naif) yang harus Anda gunakan adalah:
- untuk setiap
n
dari0
ke25
inklusif, menerapkan ROT--n
ke string masukan. (Negatifn
karena kami ingin membalik enkripsi. ROT--n
setara dengan ROT-26-n
, jika itu lebih mudah.) - konversi setiap string input ke angka dengan menambahkan frekuensi relatif dari karakter.
e
is0
,t
is1
,a
is2
, etc. Misalnya, angka yang sesuai untuk string"hello"
adalah 7 + 0 + 10 + 10 + 3 = 30. - temukan string yang memiliki angka terkait terendah.
- output string itu dan yang sesuai
n
.
Aturan:
- input bisa masuk akal (STDIN, argumen fungsi, dari file, dll.), dan demikian juga dapat output (STDOUT, nilai pengembalian fungsi, ke file, dll.)
- Anda dapat menggunakan algoritma yang berbeda, asalkan selalu menghasilkan hasil yang identik. Misalnya, memiliki
z
0 dane
25 dan memilih angka tertinggi juga oke. - jika dua string memiliki skor yang identik, Anda dapat memilih untuk mengeluarkan salah satu (atau keduanya). Ini adalah kasus tepi dan Anda tidak harus menjelaskannya.
- ini kode-golf , jadi kode terpendek dalam byte akan menang!
Kasus uji:
Input: ocdndnvqzmtnzxmzohznnvbzocvodnqzmtnzxpmzviynvaz
Keluaran:21 thisisaverysecretmessagethatisverysecureandsafe
Input: pmttwxmwxtmwnxzwoziuuqvoxchhtmakwlmowtnabiksmfkpivom
Keluaran:8 hellopeopleofprogrammingpuzzlescodegolfstackexchange
Input: ftueimeqzodkbfqpiuftdaffiqxhqeaufygefnqbqdrqofxkemrq
Keluaran:12 thiswasencryptedwithrottwelvesoitmustbeperfectlysafe
Input: jgtgkuvjghkpcnvguvecugvjcvaqwowuvfgetarv
Keluaran:2 hereisthefinaltestcasethatyoumustdecrypt
Jika Anda bertanya-tanya, ini adalah JSFiddle dari kode uji JavaScript yang saya tulis, yang berhasil mendekripsi semua kasus uji yang saya berikan.
wtaad
harus memberi0 wtaad
sebagai hasilnya, danvszzc
harus memberi25 wtaad
sebagai hasilnya.