Une réponse un peu plus détaillée:
On va supposer que les maisons sont alignées.
variables:
x 5 positions (1 gauche -> 5 droite)
y 5 couleurs (rouge, vert, blanc, jaune, bleu)
z 5 nationalités (anglais, suédois, danois, norvégien, allemand)
t 5 types de cigares (pall mall, dunhill, blend, blue master, prince)
v 5 types de boissons (thé, café, lait, bière, eau)
w 5 animaux domestiques (chiens, oiseaux, chats, cheval, poisson)
equations (d est la distance):
1. ?, rouge, anglais, ?, ?, ?
2. ?, ?, suédois, ?, ?, chiens
3. ?, ?, danois, ?, thé, ?
4. (blanc - 1), vert, ?, ?, ?, ?
5. ?, vert, ?, ?, café, ?
6. ?, ?, ?, pall mall, ?, oiseaux
7. ?, jaune, ?, dunhill, ?, ?
8. 3, ?, ?, ?, lait, ?
9. 1, ?, norvégien, ?, ?, ?
10. (d(chats) == 1), ?, ?, blend, ?, ?
11. (d(dunhill) == 1), ?, ?, ?, ?, cheval
12. ?, ?, ?, blue master, bière, ?
13. ?, ?, allemand, prince, ?, ?
14. (d(bleu) == 1), ?, norvégien, ?, ?, ?
15. ?, ?, ?, blend, (d(eau) == 1), ?
Problème: nationalité(poissons)
Résolution du système (les numéros négatifs sont les certitudes d'irréel):
14 et 9: (d(bleu) == 1) == 1, ?, norvégien, ?, ?, ?
-> bleu = 2
-> 16. 2, bleu, ?, ?, ?, ?
-> -1. 1, vert, ?, ?, ?, ?
-2. 2, vert, ?, ?, ?, ?
-3. 5, vert, ?, ?, ?, ?
d'après 4:
-> -4. 3, blanc, ?, ?, ?, ?
-> -5. 1, blanc, ?, ?, ?, ?
restent les positions 4 et 5 pour le blanc, soit 3 et 4 pour le vert respectivement
si vert est en 3, alors d'après 8, son proprio boit du lait, ce qui est contraire à 5 (il boit du café). D'où vert est en 4, et blanc en 5.
-> 17. 4, vert, ?, ?, café, ?
-> 18. 5, blanc, ?, ?, ?, ?
restent les positions 1 et 3 pour le jaune et le rouge
si rouge est en 1, alors d'après 9, son proprio est norvégien, ce qui est contraire à 1 (il est anglais). D'où rouge est en 3, et jaune en 1.
-> 19. 3, rouge, anglais, ?, lait, ?
-> 20. 1, jaune, norvégien, dunhill, ?, ?
donc d'après 11 et 20:
-> 21. 2, bleu, ?, ?, ?, cheval
L'allemand peut désormais être en 2, 4, ou 5, le suédois en 4 ou 5, et le danois en 2 ou 5.
3 combinaisons possibles: 2 - 4 - 5, 4 - 5 - 2, 5 - 4 - 2.
Si l'allemand est en 2, le suédois en 4 et le danois en 5, c'est en contradiction avec 12.
Si l'allemand est en 5, le suédois en 4 et le danois en 2, c'est en contradiction avec 12.
La combinaison 4 - 5 - 2 marche.
D'où le système devient:
1, jaune, norvégien, dunhill, ?, ?
2, bleu, danois, ?, thé, cheval
3, rouge, anglais, ?, lait, ?
4, vert, allemand, prince, café, ?
5, blanc, suédois, ?, ?, chiens
Reste à utiliser 6, 10, 12, 15.
12: 5, blanc, suédois, blue master, bière, chiens
6: 3, rouge, anglais, pall mall, lait, oiseaux
Donc vu qu'il n'en reste plus qu'un pour les cigares et la boisson:
1, jaune, norvégien, dunhill, eau, ?
2, bleu, danois, blend, thé, cheval
Reste l'équation 10: les chats sont à 1 case de blend, donc:
1, jaune, norvégien, dunhill, eau, chats
Restent les poissons:
4, vert, allemand, prince, café, poissons
Donc c'est l'allemand qui a les poissons.
Tableau final:
1 jaune norvégien dunhill eau chats
2 bleu danois blend thé cheval
3 rouge anglais pall mall lait oiseaux
4 vert allemand prince café poissons
5 blanc suédois blue master bière chiens
Je doute fortement que seul 2% de la population puisse résoudre ça. Ça va tout seul avec un petit tableur, et c'est que de la résolution de système de maths super basique. Je parie que 50% des gens qui ont atteint la terminale peuvent le résoudre.
Au passage quiconque résout ça en VB mérite d'être fouetté en place publique
, pour 2 raisons:
1. Python est le meilleur language de script depuis des lustres, faire du VB, du Perl, ou tout ce qu'on veut quand on a toutes les ressources d'un gros pc à notre disposition c'est de l'auto flagellation (faudra que j'en touche un mot à l'auteur du PHP un jour...). C'est comme faire du LISP alors qu'il y a Haskell, ce n'est pardonnable que lorsque l'on nous y force
.
2. C'est le boulot de PROLOG: les résolutions de systèmes ça se fait avec un moteur d'inférence (quoi c'est en contradiction avec 1
?). C'est super rapide à coder, et si on a déjà notre petit module d'analyse sémantique on peut directement poser les questions: où est la maison verte ? que fume le danois ? etc. C'est bien le seul domaine où PROLOG ait une quelconque utilité, faut pas l'ignorer le seul moment où il s'avère utile...