O Zebra Puzzle é um famoso quebra-cabeça de lógica com cinco casas, cada uma pintada de uma cor diferente. As casas têm moradores diferentes, que têm nacionalidades diferentes, criam animais de estimação diferentes, bebem bebidas diferentes e têm hobbies diferentes.
Para ajudar você a resolver o quebra-cabeça, são dadas 15 afirmações que descrevem a solução. No entanto, só combinando as informações de todas as afirmações você vai conseguir encontrar a solução do quebra-cabeça.
O Zebra Puzzle é um problema de satisfação de restrições (CSP). Em um problema assim, você tem um conjunto de valores possíveis e um conjunto de restrições que limitam quais valores são válidos. Outro CSP bem conhecido é o Sudoku.
Sua tarefa é resolver o Enigma da Zebra para encontrar a resposta a estas duas perguntas:
As 15 afirmações a seguir são todas verdadeiras:
Além disso, cada uma das cinco casas é pintada de uma cor diferente, e seus moradores têm nacionalidades diferentes, têm animais de estimação diferentes, bebem bebidas diferentes e praticam hobbies diferentes.
Existem 24 bilhões (5!⁵ = 24.883.200.000) de soluções possíveis, então tente descartar o maior número possível de soluções.
Defina uma única função, SolvePuzzle, que retorna uma solução contendo duas strings, cujos valores são as respostas às perguntas do quebra-cabeça da zebra: "Quem bebe água?" e "Quem tem a zebra?". Cada resposta será uma das nacionalidades dos moradores: Englishman, Spaniard, Ukrainian, Norwegian ou Japanese.
É claro que você poderia simplesmente escrever uma função de uma linha só se desse uma espiada no programa de testes para ver a solução esperada. Mas o objetivo é desenvolver um algoritmo que use os fatos e as restrições fornecidos pelo quebra-cabeça e determine as duas respostas corretas.
Crie sua conta no Exercism para aprender e dominar Go com 34 conceitos165 exercícios e mentoria humana de verdade, tudo de graça.
Explore 8 maneiras diferentes de encontrar a solução do Zebra Puzzle entre 24 bilhões de soluções possíveis, incluindo ignorar permutações inválidas o quanto antes, o algoritmo AC-3, uma solução baseada em lógica bem sucinta e até um algoritmo genético!