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. Las casas tienen habitantes distintos: personas de nacionalidades distintas, con mascotas distintas, que beben bebidas distintas y disfrutan de pasatiempos distintos.
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 problema, tienes un conjunto de valores posibles y un conjunto de restricciones que limitan qué valores son válidos. Otro CSP 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 distinto, y sus habitantes son de distintas nacionalidades, tienen mascotas distintas, beben bebidas distintas y practican pasatiempos distintos.
Hay 24 mil millones (5!⁵ = 24,883,200,000) de soluciones posibles, así que intenta descartar tantas soluciones como puedas.
Define una sola función, SolvePuzzle, que devuelve una solución con dos strings, cuyos valores son las respuestas a las preguntas del rompecabezas de la cebra «¿Quién bebe agua?» y «¿Quién es el dueño de la cebra?». Cada respuesta será una de las nacionalidades de los residentes: Englishman, Spaniard, Ukrainian, Norwegian o Japanese.
Obviamente, podrías simplemente escribir una función de una sola línea si le 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 para el rompecabezas y determine las dos respuestas correctas.
Regístrate en Exercism para aprender y dominar Go con 34 conceptos165 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 posibles soluciones, como ignorar las permutaciones no válidas lo antes posible, el algoritmo AC-3, una solución muy concisa basada en la lógica e incluso un algoritmo genético.