Esse problema pode ser resolvido usando grafos de forma razoavelmente facil.
Caso alguem queira resolver ele na mão, ai vão algumas dicas, eu já tinha resolvido esse problema a mais de um ano:
-Não saia preenchendo logo de cara o resultado.
-Primeiro monte 5 tabelas relacionando cada um dos parametros (nacionalidade, bebida, animal, cor da casa e cigarro) com as várias possibilidades dos demais e então vá aplicando as regras de forma a eliminar combinações, ex: ‘o dinamarquês bebe chá’, logo ele não pode beber outra coisa e os outros não podem beber chá.
Aplique todas regras nas 5 tábelas, isso já vai elucidar boa parte do problema. Passe então a compará-las procurando eliminar mais combinações, ex: na tabela de bebidas, coluna ‘chá’ não consta o alemão, logo apague chá da coluna ‘alemão’ da tabela de pessoas.
O ultimo passo, que exige 1 pouco de sorte é montar o resultado. Com essas 5 tabelas à mão é facil fazer isso, basta tomar 1 pouco de cuidado.