İngiliz alfabesinin harfleri sıklığa göre şöyledir:
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
Yani, e
en sık kullanılan mektup ve z
en az kullanılanıdır. ( Vikipedi veriler .)
Buradaki zorluk, aşağıdaki gibi bazı ROT-n'd metinleri almaktır:
ocdndnvqzmtnzxmzohznnvbzocvodnqzmtnzxpmzviynvaz
Bu, ROT-21 (42'nin yarısı) aracılığıyla "şifrelenmiş" olan "thisisaverysecretmessagethatisverysecureandsafe" metnidir. Yukarıdaki frekans tablosunu kullanan programınız, her bir karakterin ne kadar döndürüldüğünü ve orijinal metni belirleyebilmelidir.
(ROT-n ile ilgili bilginiz yoksa, her karakter esasen değiştirilir n
. Örneğin, ROT-2'de a -> c, b -> d, ..., x -> z, y -> a, z -> b
.)
Nasıl sorarsın Kullanmanız gereken (çok saf) algoritma:
- Her biri için
n
gelen0
için25
kapsayıcı, ROT- uygulamak-n
giriş dizeye. (Negatif,n
çünkü şifrelemeyi tersine çevirmek istiyoruz . ROT- ROT-n
ile eşdeğerdir26-n
, eğer daha kolaysa .) - Her giriş dizesini karakterlerin göreceli frekanslarını toplayarak bir sayıya dönüştürün.
e
olduğu0
,t
olduğu1
,a
olduğu2
vb Örneğin, dizi için karşılık gelen sayı"hello"
7 + 0 10 + 10 + 3 = 30 ° C'dir. - karşılık gelen en düşük sayıya sahip olan dizeyi bulun.
- o dizgeyi ve bunun karşılığını verir
n
.
Kurallar:
- giriş makul herhangi bir yerde olabilir (STDIN, fonksiyon argümanları, bir dosyadan vb.) ve böylece çıkış (STDOUT, fonksiyon dönüş değeri, bir dosyaya vs.) gönderilebilir.
- Her zaman aynı sonuçları ürettiği sürece farklı bir algoritma kullanabilirsiniz. Örneğin,
z
0 vee
25 olmak ve en yüksek sayıyı seçmek de sorun değil. - İki dizgede aynı puanlar varsa, ikisinden birini (veya her ikisini de) çıkarmayı seçebilirsiniz. Bu son bir durumdur ve hesaba katmanız gerekmez.
- Bu kod-golf , yani bayttaki en kısa kod kazanacak!
Test durumları:
Giriş: ocdndnvqzmtnzxmzohznnvbzocvodnqzmtnzxpmzviynvaz
Çıkış:21 thisisaverysecretmessagethatisverysecureandsafe
Giriş: pmttwxmwxtmwnxzwoziuuqvoxchhtmakwlmowtnabiksmfkpivom
Çıkış:8 hellopeopleofprogrammingpuzzlescodegolfstackexchange
Giriş: ftueimeqzodkbfqpiuftdaffiqxhqeaufygefnqbqdrqofxkemrq
Çıkış:12 thiswasencryptedwithrottwelvesoitmustbeperfectlysafe
Giriş: jgtgkuvjghkpcnvguvecugvjcvaqwowuvfgetarv
Çıkış:2 hereisthefinaltestcasethatyoumustdecrypt
Merak ediyorsanız, işte yazdığım JavaScript test kodunun bir JSFiddle'ı, attığım tüm test vakalarını başarıyla çözdü.
wtaad
vermelidir0 wtaad
sonucunda vevszzc
vermelidir25 wtaad
sonucunda.