将 PIN 映射到字符串数组和从字符串数组映射
Posted
技术标签:
【中文标题】将 PIN 映射到字符串数组和从字符串数组映射【英文标题】:Map a PIN to and from an array of strings 【发布时间】:2021-11-15 04:04:33 【问题描述】:我正在开发一款寻宝/逃生室类型的游戏,玩家必须解决 4 个真实世界的谜题,所有谜题都会给他们一个单词。当他们完成所有的谜题后,他们应该前往一个小型网络应用程序,在那里他们可以输入他们找到的单词:该应用程序然后将这些单词转换为最终的秘密——在这种情况下,4 位数的密码变成了挂锁宝藏。
现在,如果有效单词列表是静态的,那将很容易,但它是一个交互式系统,其中谜题的输出在玩家之间不断变化。我试图想出一个简单的算法,这样我们就可以将 PIN 码编码和解码输入和输出单词数组,这样它们就可以在游戏中改变,而且只有人设置密码知道PIN,然后更改每个游戏的答案。
这些是约束:
应用程序不需要知道代码是对还是错。它只有一个编码功能(这里是一个挂锁码,给我 4 个字)和一个解码功能(这里是 4 个字,给我一个匹配的挂锁码)。因此玩家可以输入任何字词并收到一个代码作为回报,但不能保证它是正确的。 理想情况下,单词的顺序无关紧要(假设输入“绿草传奇派对”输出与“草绿派对传奇”相同的 PIN),但这听起来会让事情复杂化很多,所以我很高兴使代码需要按特定顺序输入 这是为了游戏,这里不需要加密安全 我确实已经有一个秘密词数组,所以基本上只需要从一个总是相同的基数中找到一个由 4 个数字组成的数组。例如
Encode:
Input: 8370, output [“danger”, “writer”, “negative”, “origin”]
Input: 8375, output [“crab”, “junior”, “spider”, “pillar”]
Input: 2455, output [“party”, “fish”, “cookie”, “cactus”]
Decode:
Input: [“danger”, “writer”, “negative”, “origin”], output 8370
Input: [“writer”, “danger”, “negative”, “origin”], output 8370
Input: [“party”, “fish”, “cookie”, “cactus”], output 2455
Input [“pillar”, “crab”, “spider”, “junior”], output: 8375
我不一定要为这个问题寻找一个完整的解决方案,但我真的很想在哪里寻找指针——算法、库、现有工作。找到一个已经这样做的应用程序或现有算法的关键字让我无处可去。我尝试了一些选项(通过将 PIN 添加为索引来循环遍历一组单词),但总是卡在如何解码它。
【问题讨论】:
是否有一个封闭的列表,其中包含所有可能出现的单词? 是的,有 - 我将它们作为字典单词数组。 【参考方案1】:由于您的数字代码由四位数字组成,因此只有 10,000 种可能性。您可以下载一本英语词典,并随机生成 10,000 个四个单词的组合,对应于 10,000 个可能的数字代码。然后创建两个 Python 字典,一个将数字代码映射到一个英文短语,另一个将一个英文短语映射到一个数字代码。请注意,由于 Python 字典的键必须是不可变类型,因此您不能将单词列表定义为键。您将不得不使用其他一些结构,例如frozenset 或自定义类,但这主要是技术性问题。如果您希望编码-解码过程与顺序无关,这不是问题。只需按字典顺序对传递给解码方法的四个单词进行排序,然后定义另一个字典,它将按字典顺序给出的英语短语映射到所需的英语短语(相同的单词,可能的顺序不同)。
【讨论】:
非常感谢!我没有考虑过简单地提前准备好这些列表,但这实际上很聪明——它确实更容易将它们视为两个数组或对象,然后按字母顺序重新排序一个句子以一致地找到相同的代码。以上是关于将 PIN 映射到字符串数组和从字符串数组映射的主要内容,如果未能解决你的问题,请参考以下文章