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, eadalah surat yang paling sering digunakan, dan zmerupakan 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
ndari0ke25inklusif, menerapkan ROT--nke string masukan. (Negatifnkarena kami ingin membalik enkripsi. ROT--nsetara dengan ROT-26-n, jika itu lebih mudah.) - konversi setiap string input ke angka dengan menambahkan frekuensi relatif dari karakter.
eis0,tis1,ais2, 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
z0 dane25 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.
wtaadharus memberi0 wtaadsebagai hasilnya, danvszzcharus memberi25 wtaadsebagai hasilnya.