Dưới đây là các chữ cái của bảng chữ cái tiếng Anh theo thứ tự tần số:
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
Đó là, e
là chữ cái được sử dụng thường xuyên nhất, và z
là ít phổ biến nhất. (Dữ liệu từ Wikipedia .)
Thử thách của bạn là lấy một số văn bản ROT-n'd, chẳng hạn như:
ocdndnvqzmtnzxmzohznnvbzocvodnqzmtnzxpmzviynvaz
Đây là văn bản "thisisaverysecretmessagethatisverysecureandsafe" được "mã hóa" thông qua ROT-21 (một nửa của 42). Chương trình của bạn, sử dụng bảng tần số ở trên, sẽ có thể xác định mức độ mỗi ký tự được xoay và văn bản gốc.
(Nếu bạn không quen thuộc với ROT-n, thì về cơ bản, nó đang dịch chuyển từng ký tự n
. Ví dụ, trong ROT-2 , a -> c, b -> d, ..., x -> z, y -> a, z -> b
.)
Làm thế nào, bạn hỏi? Thuật toán (rất ngây thơ) bạn phải sử dụng là:
- cho mỗi
n
từ0
để25
bao gồm, áp dụng ROT--n
vào chuỗi đầu vào. (Tiêu cựcn
vì chúng tôi muốn đảo ngược mã hóa. ROT--n
tương đương với ROT-26-n
, nếu điều đó dễ dàng hơn.) - chuyển đổi từng chuỗi đầu vào thành một số bằng cách thêm tần số tương đối của các ký tự.
e
is0
,t
is1
,a
is2
, v.v. Ví dụ, số tương ứng của chuỗi"hello"
là 7 + 0 + 10 + 10 + 3 = 30. - tìm chuỗi có số tương ứng thấp nhất.
- đầu ra chuỗi đó và tương ứng của nó
n
.
Quy tắc:
- đầu vào có thể là bất cứ nơi nào hợp lý (STDIN, đối số chức năng, từ tệp, v.v.) và do đó có thể xuất (STDOUT, giá trị trả về của hàm, sang tệp, v.v.)
- bạn có thể sử dụng một thuật toán khác, miễn là nó luôn tạo ra kết quả giống hệt nhau. Ví dụ, có
z
0 vàe
25 và chọn số cao nhất cũng không sao. - nếu hai chuỗi có điểm giống hệt nhau, bạn có thể chọn xuất một (hoặc cả hai) chuỗi đó. Đây là một trường hợp cạnh và bạn không phải tính đến nó.
- Đây là mã golf , vì vậy mã ngắn nhất tính bằng byte sẽ giành chiến thắng!
Các trường hợp thử nghiệm:
Đầu vào: ocdndnvqzmtnzxmzohznnvbzocvodnqzmtnzxpmzviynvaz
Đầu ra:21 thisisaverysecretmessagethatisverysecureandsafe
Đầu vào: pmttwxmwxtmwnxzwoziuuqvoxchhtmakwlmowtnabiksmfkpivom
Đầu ra:8 hellopeopleofprogrammingpuzzlescodegolfstackexchange
Đầu vào: ftueimeqzodkbfqpiuftdaffiqxhqeaufygefnqbqdrqofxkemrq
Đầu ra:12 thiswasencryptedwithrottwelvesoitmustbeperfectlysafe
Đầu vào: jgtgkuvjghkpcnvguvecugvjcvaqwowuvfgetarv
Đầu ra:2 hereisthefinaltestcasethatyoumustdecrypt
Trong trường hợp bạn đang tự hỏi, đây là một JSFiddle về mã kiểm tra JavaScript mà tôi đã viết, nó đã giải mã thành công tất cả các trường hợp thử nghiệm mà tôi đã ném vào nó.
wtaad
nên đưa ra0 wtaad
như kết quả, vàvszzc
nên đưa ra25 wtaad
như kết quả.