En el juego de rol de mesa llamado Pathfinder, hay una hazaña que los personajes pueden tomar llamada Sacred Geometry , que permite a un personaje que tiene mejorar sus hechizos a cambio de hacer algunas matemáticas: para usarla, el personaje tira un número de seis lados. dados iguales a sus rangos en una habilidad particular, consulta una tabla basada en su nivel de hechizo para determinar qué tres números primos son las "Constantes principales" para ese nivel de hechizo, luego calcula si es posible o no producir una de las Constantes principales realizando alguna combinación de suma, resta, multiplicación y división y agrupación entre paréntesis en todos los números obtenidos.
La tabla de Constantes Prime por Nivel de Hechizo es la siguiente:
+-------------+-----------------+
| Spell Level | Prime Constants |
+-------------+-----------------+
| 1st | 3, 5, 7 |
| 2nd | 11, 13, 17 |
| 3rd | 19, 23, 29 |
| 4th | 31, 37, 41 |
| 5th | 43, 47, 53 |
| 6th | 59, 61, 67 |
| 7th | 71, 73, 79 |
| 8th | 83, 89, 97 |
| 9th | 101, 103, 107 |
+-------------+-----------------+
Entonces, por ejemplo, si un personaje tiene 5 rangos de habilidad y está lanzando un hechizo de 4to nivel, lanzaría cinco dados de seis lados y necesitaría poder calcular un valor de 31, 37 o 41. Si ellos sacó un 6, 6, 4, 3 y 1, entonces podrían producir un valor de 37 realizando el siguiente cálculo: (6 × 6) + (4 - 3) × 1 = 37, o podrían producir un valor de 41 haciendo ([6 + 6] × 3) + 4 + 1 = 41. Como resultado, su lanzamiento del hechizo tendría éxito.
Para este rompecabezas de programación, su trabajo es escribir una función con dos parámetros de entrada, Nivel de hechizo y Rangos de habilidad, tirar un número de dados de seis lados igual al parámetro de Rangos de habilidad, luego calcular si puede producir (al menos) uno de las constantes principales asociadas con el parámetro Nivel de hechizo, luego generan un valor booleano.
Las respuestas se clasificarían principalmente por la eficiencia de su algoritmo (estoy bastante seguro de que un algoritmo de fuerza bruta se escalaría muy rápidamente a medida que aumenta el parámetro Skill Ranks), y luego por el tamaño del código fuente enviado en bytes.
fuente
Respuestas:
Python 2.7, 285 bytes
Técnicamente se ajusta a las especificaciones del desafío. Solo devuelve Verdadero / Falso, no expone las tiradas de dados utilizadas o la expresión utilizada para la persona que llama.
Además, este algoritmo ignora la agrupación, ya que podemos realizar las mismas operaciones sin agrupar utilizando en su lugar la ordenación. (Esto no sería cierto si la exponenciación fuera una de las posibles operaciones, por ejemplo).
Tiempo de ejecución exponencial, ya que genera todas las posibilidades y luego comprueba si existe al menos una solución.
fuente