介绍:
我曾经在小时候编译过的文档中存储了许多不同的密码,我选择了一些我认为最适合挑战的密码(不太琐碎,也不太难),并将它们转变为挑战。它们中的大多数仍在沙箱中,我不确定是否要全部发布还是仅发布其中几个。这是第二个(计算机密码是我发布的第一个)。
对于Trifid Cipher(不使用关键字),字母(和附加的通配符)被分为三个3×3表:
table 1: table 2: table 3:
|1 2 3 |1 2 3 |1 2 3
-+----- -+----- -+-----
1|a b c 1|j k l 1|s t u
2|d e f 2|m n o 2|v w x
3|g h i 3|p q r 3|y z
我们要加密的文本是第一个字符,每个字符编码为表行-列号。例如,文本this is a trifid cipher
变为:
t h i s i s a t r i f i d c i p h e r
table: 3 1 1 3 3 1 3 3 1 3 3 2 1 1 1 1 3 1 1 2 1 1 2
row: 1 3 3 1 3 3 1 3 1 3 1 3 3 2 3 2 3 1 3 3 3 2 3
column: 2 2 3 1 3 3 1 3 1 3 2 3 3 3 3 1 3 3 3 1 2 2 3
然后,我们将所有内容按上表三行一组的顺序逐行放置:
311 331 331 332 111 131 121 121 331 331 313 133 232 313 332 322 313 313 132 333 313 331 223
然后使用相同的表格将它们转换回字符:
s y y z a g d d y y u i q u z w u u h u y o
注意,输入长度应为3的互质。因此,如果长度是3的倍数,我们将附加一个或两个尾随空格以使输入长度不再是3的倍数。
挑战:
给定一个字符串sentence_to_encipher
,如上所述将其加密。
您只需加密给定的sentence_to_encipher
,因此也无需创建解密程序/函数。不过,我可能会在将来对解密进行第2部分挑战(尽管我觉得这对加密过程而言是微不足道的/类似的)。
挑战规则:
- 您可以假设
sentence_to_encipher
will只包含字母和空格。 - 您可以使用完整的小写字母或完整的大写字母(请说明您在答案中使用了哪一个)。
- 您可以选择在输入长度为3时追加一个或两个尾随空格,以使其不再是3的倍数。
- I / O是灵活的。输入和输出都可以是字符串,列表/数组/字符流等。
通用规则:
- 这是代码高尔夫球,因此最短答案以字节为单位。
不要让代码高尔夫球语言阻止您发布使用非代码高尔夫球语言的答案。尝试针对“任何”编程语言提出尽可能简短的答案。 - 标准规则适用于具有默认I / O规则的答案,因此允许您使用STDIN / STDOUT,具有适当参数的函数/方法以及返回类型的完整程序。你的来电。
- 默认漏洞是禁止的。
- 如果可能的话,请添加一个带有测试代码的链接(即TIO)。
- 另外,强烈建议为您的答案添加说明。
测试用例:
Input: "this is a trifid cipher"
Output: "syyzagddyyuiquzwuuh uyo"
Input: "test"
Output: "utbk"
Input: "output"
Possible outputs: "rrvgivx" (one space) or "rrzcc lr" (two spaces)
Input: "trifidcipher"
Possible output: "vabbuxlzz utr" (one space) or "vabbyzv rx ie " (two spaces)