El acertijo de la cebra es un famoso acertijo de lógica en el que hay cinco casas, cada una pintada de un color diferente. Sus habitantes son de distintas nacionalidades, tienen distintas mascotas, beben distintas bebidas y disfrutan de distintas aficiones.
Para ayudarte a resolver el acertijo, se te dan 15 afirmaciones que describen la solución. Sin embargo, solo combinando la información de todas las afirmaciones podrás encontrar la solución del acertijo.
El acertijo de la cebra es un problema de satisfacción de restricciones (CSP). En este tipo de problemas tienes un conjunto de valores posibles y un conjunto de restricciones que limitan qué valores son válidos. Otro problema de este tipo muy conocido es el sudoku.
Tu tarea es resolver el acertijo de la cebra para encontrar la respuesta a estas dos preguntas:
Las siguientes 15 afirmaciones son todas verdaderas:
Además, cada una de las cinco casas está pintada de un color diferente, y sus habitantes son de distintas nacionalidades, tienen distintas mascotas, beben distintas bebidas y practican distintas aficiones.
Hay 24 000 millones (5!⁵ = 24,883,200,000) de soluciones posibles, así que intenta descartar el mayor número de soluciones posible.
Implementa los métodos waterDrinker y zebraOwner de la clase ZebraPuzzle.
Cada uno debe devolver un string, cuyo valor es la respuesta a las preguntas del rompecabezas de la cebra «¿Quién bebe agua?» y «¿Quién tiene la cebra?».
Cada respuesta será una de las nacionalidades de los residentes: Englishman, Spaniard, Ukrainian, Norwegian o Japanese.
Obviamente, podrías simplemente escribir dos funciones de una sola instrucción si echas un vistazo al programa de pruebas para ver la solución esperada. Pero el objetivo es desarrollar un algoritmo que use los datos y las restricciones que se dan en el rompecabezas y determine las dos respuestas correctas.
Regístrate en Exercism para aprender y dominar JavaScript con 37 conceptos159 ejercicios y mentoría humana real, todo gratis.
Explora 8 formas distintas de encontrar la solución del Zebra Puzzle entre 24 mil millones de soluciones posibles, como descartar las permutaciones inválidas lo antes posible, el algoritmo AC-3, una solución basada en lógica muy concisa e incluso un algoritmo genético.