Trilhas
/
Go
Go
/
Exercícios
/
Quebra-cabeça da zebra
Quebra-cabeça da zebra

Quebra-cabeça da zebra

Difícil

Introdução

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.

Note

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.

Instruções

Sua tarefa é resolver o Enigma da Zebra para encontrar a resposta a estas duas perguntas:

  • Qual dos moradores bebe água?
  • Quem é o dono da zebra?

O enigma

As 15 afirmações a seguir são todas verdadeiras:

  1. Existem cinco casas.
  2. O inglês mora na casa vermelha.
  3. O espanhol é o dono do cachorro.
  4. A pessoa que mora na casa verde bebe café.
  5. O ucraniano bebe chá.
  6. A casa verde fica imediatamente à direita da casa de marfim.
  7. Quem tem o caracol gosta de dançar.
  8. Quem mora na casa amarela é pintor.
  9. A pessoa que mora na casa do meio bebe leite.
  10. O norueguês mora na primeira casa.
  11. Quem gosta de ler mora na casa ao lado da pessoa que tem a raposa.
  12. A casa do pintor fica ao lado da casa onde está o cavalo.
  13. Quem joga futebol bebe suco de laranja.
  14. A pessoa japonesa joga xadrez.
  15. O norueguês mora ao lado da casa azul.

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.

Note

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.

Implementação

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.


Fonte

WikipediaO link abre em uma nova janela ou aba
Editar via GitHub O link abre em uma nova janela ou aba
Go Exercism

Tudo pronto para começar Quebra-cabeça da zebra?

Crie sua conta no Exercism para aprender e dominar Go com 34 conceitos165 exercícios e mentoria humana de verdade, tudo de graça.

Mergulho profundo em Quebra-cabeça da zebra!

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!