将 PIN 映射到字符串数组或从字符串数组映射
Map a PIN to and from an array of strings
我正在开发一款宝藏 hunt/escape 房间类型的游戏,玩家必须解决 4 个真实世界的谜题,所有这些谜题都会给他们一个词。当他们完成所有的谜题后,他们应该前往一个微型网络应用程序,他们可以在其中输入他们找到的单词:该应用程序然后将这些单词转换为最终的秘密——在本例中,4 位数代码转换为带有宝物
现在,如果有效单词列表是静态的,这会很容易,但这是一个互动系统,玩家之间的谜题输出不断变化。我在想一个简单的算法,这样我们就可以 encode 和 decode PINs 进出单词数组,这样它们就可以改变了跨游戏,只有设置密码的人知道密码,然后更改每个游戏的答案。
这些是限制条件:
- 应用程序不需要知道代码是对还是错。它只有一个编码功能(这里是一个挂锁密码,给我 4 个字)和一个解码功能(这里是 4 个字,给我一个匹配的挂锁密码)。所以玩家可以输入任何单词并在 return 中收到一个代码,但不能保证它是正确的。
- 理想情况下,单词的顺序无关紧要(假设输入“green grass legend party”输出与“grass green party legend”相同的 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 作为索引循环遍历单词数组)但总是卡在如何解码它上。
由于你的数字代码是由四位数字组成的,所以只有一万种可能。你可以下载一本英文词典,随机生成10000个四个单词的组合,对应10000个可能的数字代码。然后创建两个 Python 词典,一个将数字代码映射到英语短语,另一个将英语短语映射到数字代码。请注意,由于 Python 字典的键必须是不可变类型,因此您不能将单词列表定义为键。您将不得不使用一些其他结构,如 frozenset 或自定义 class,但这主要是技术问题。如果您希望编码解码过程与顺序无关,这不是问题。只需按字典顺序对传递给解码方法的四个单词进行排序,然后定义另一个字典,将按字典顺序给出的英语短语映射到所需的英语短语(相同的单词,可能不同的顺序)。
我正在开发一款宝藏 hunt/escape 房间类型的游戏,玩家必须解决 4 个真实世界的谜题,所有这些谜题都会给他们一个词。当他们完成所有的谜题后,他们应该前往一个微型网络应用程序,他们可以在其中输入他们找到的单词:该应用程序然后将这些单词转换为最终的秘密——在本例中,4 位数代码转换为带有宝物
现在,如果有效单词列表是静态的,这会很容易,但这是一个互动系统,玩家之间的谜题输出不断变化。我在想一个简单的算法,这样我们就可以 encode 和 decode PINs 进出单词数组,这样它们就可以改变了跨游戏,只有设置密码的人知道密码,然后更改每个游戏的答案。
这些是限制条件:
- 应用程序不需要知道代码是对还是错。它只有一个编码功能(这里是一个挂锁密码,给我 4 个字)和一个解码功能(这里是 4 个字,给我一个匹配的挂锁密码)。所以玩家可以输入任何单词并在 return 中收到一个代码,但不能保证它是正确的。
- 理想情况下,单词的顺序无关紧要(假设输入“green grass legend party”输出与“grass green party legend”相同的 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 作为索引循环遍历单词数组)但总是卡在如何解码它上。
由于你的数字代码是由四位数字组成的,所以只有一万种可能。你可以下载一本英文词典,随机生成10000个四个单词的组合,对应10000个可能的数字代码。然后创建两个 Python 词典,一个将数字代码映射到英语短语,另一个将英语短语映射到数字代码。请注意,由于 Python 字典的键必须是不可变类型,因此您不能将单词列表定义为键。您将不得不使用一些其他结构,如 frozenset 或自定义 class,但这主要是技术问题。如果您希望编码解码过程与顺序无关,这不是问题。只需按字典顺序对传递给解码方法的四个单词进行排序,然后定义另一个字典,将按字典顺序给出的英语短语映射到所需的英语短语(相同的单词,可能不同的顺序)。