<p>要回答第一个问题的第二部分,解码<code>ROT-x</code>中的内容,可以使用以下代码:</p>
<pre><code>def encode(s, ROT_number=13):
"""Encodes a string (s) using ROT (ROT_number) encoding."""
ROT_number %= 26 # To avoid IndexErrors
alpha = "abcdefghijklmnopqrstuvwxyz" * 2
alpha += alpha.upper()
def get_i():
for i in range(26):
yield i # indexes of the lowercase letters
for i in range(53, 78):
yield i # indexes of the uppercase letters
ROT = {alpha[i]: alpha[i + ROT_number] for i in get_i()}
return "".join(ROT.get(i, i) for i in s)
def decode(s, ROT_number=13):
"""Decodes a string (s) using ROT (ROT_number) encoding."""
return encrypt(s, abs(ROT_number % 26 - 26))
</code></pre>
<p>要回答第一个问题的第一部分,找到任意编码字符串的rot编码,您可能需要使用暴力。使用所有的rot编码,并检查哪一个最有意义。一种快速的(-ish)方法是获取一个以空格分隔的(例如<code>cat\ndog\nmouse\nsheep\nsay\nsaid\nquick\n...</code>,其中<code>\n</code>是一个换行符)文件,其中包含英语中最常见的单词,然后检查哪个编码中单词最多。在</p>
^{pr2}$
<p>在Unix计算机上可以使用的文件是<a href="http://en.wikipedia.org/wiki/Words_(Unix)" rel="nofollow">^{<cd4>}</a>,也可以在<a href="https://raw.githubusercontent.com/eneko/data-repository/master/data/words.txt" rel="nofollow">here</a>中找到它</p>