Estoy trabajando en un juego tipo búsqueda del tesoro/sala de escape, donde los jugadores tienen que resolver 4 acertijos del mundo real que les dan una palabra. Cuando hayan completado todos los acertijos, deben dirigirse a una pequeña aplicación web donde pueden ingresar las palabras que encontraron: la aplicación luego convierte estas palabras en un secreto final, en este caso, el código de 4 dígitos en un candado con un tesoro.
Ahora, sería fácil si la lista de palabras válidas fuera estática, pero es un sistema interactivo donde la salida de los rompecabezas cambia constantemente entre los jugadores. Estoy tratando de pensar en un algoritmo simple para que podamos codificar y decodificar PIN en y desde conjuntos de palabras, para que puedan cambiarse entre juegos, y solo las personas que configuran el código conocen el PIN y luego cambian las respuestas de cada juego. .
Estas son las restricciones:
Por ejemplo
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: 8375No necesariamente estoy buscando una solución completa a este problema, pero realmente me gustaría tener indicaciones sobre dónde buscar: algoritmos, bibliotecas, trabajo existente. Las palabras clave para encontrar una aplicación que ya hace eso, o un algoritmo existente, no me llevaron a ninguna parte. Probé algunas opciones (recorriendo una serie de palabras agregando el PIN como índice), pero siempre me quedé atascado en cómo decodificarlo.
Dado que su código numérico está compuesto por cuatro dígitos, solo hay 10,000 posibilidades. Puede descargar un diccionario de inglés y generar aleatoriamente 10.000 combinaciones de cuatro palabras correspondientes a los 10.000 códigos numéricos posibles. A continuación, cree dos diccionarios de Python, uno que asigne un código numérico a una frase en inglés y el otro que asigne una frase en inglés a un código numérico. Tenga en cuenta que dado que la clave de un diccionario de Python tiene que ser de un tipo inmutable, no puede definir listas de palabras como claves. Tendrá que usar alguna otra estructura, como frozenset o una clase personalizada, pero esto es principalmente un tecnicismo. Si desea que el proceso de codificación-descodificación sea independiente del orden, esto no es un problema. Simplemente ordene lexicográficamente las cuatro palabras pasadas al método de decodificación y defina otro diccionario que mapee una frase en inglés dada en orden lexicográfico a la frase en inglés deseada (mismas palabras, orden potencialmente diferente).