İ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, een sık kullanılan mektup ve zen 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
ngelen0için25kapsayıcı, ROT- uygulamak-ngiriş dizeye. (Negatif,nçünkü şifrelemeyi tersine çevirmek istiyoruz . ROT- ROT-nile 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.
eolduğu0,tolduğu1,aolduğu2vb Ö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,
z0 vee25 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ü.
wtaadvermelidir0 wtaadsonucunda vevszzcvermelidir25 wtaadsonucunda.