View difference between Paste ID: f41c6cbf8 and
SHOW:
|
|
- or go back to the newest paste.
1 | - | |
1 | + | ''' |
2 | Python 3.x solution to puzzle at: | |
3 | http://programmingpraxis.com/2009/06/16/who-owns-the-zebra/ | |
4 | ''' | |
5 | ||
6 | import itertools | |
7 | ||
8 | colors = ('yellow', 'blue', 'red', 'ivory', 'green') | |
9 | nationalities = ('Norwegian', 'Ukranian', 'Englishman', 'Spaniard', 'Japanese') | |
10 | drinks = ('water', 'tea', 'milk', 'orange juice', 'coffee') | |
11 | brands = ('Kools', 'Chesterfields', 'Old Gold', 'Lucky Strikes', 'Parliaments') | |
12 | pets = ('fox', 'horse', 'snails', 'dog', 'zebra') | |
13 | ||
14 | count = 0 # Count of solutions, just in case there is more than one. | |
15 | ||
16 | for n in itertools.permutations(nationalities): | |
17 | if n.index('Norwegian') != 0: | |
18 | continue | |
19 | for d in itertools.permutations(drinks): | |
20 | if (d.index('milk') != 2 or | |
21 | n.index('Ukranian') != d.index('tea')): | |
22 | continue | |
23 | for c in itertools.permutations(colors): | |
24 | if (n.index('Englishman') != c.index('red') or | |
25 | d.index('coffee') != c.index('green') or | |
26 | c.index('green') != (c.index('ivory') + 1) or | |
27 | abs(n.index('Norwegian') - c.index('blue')) != 1): | |
28 | continue | |
29 | for b in itertools.permutations(brands): | |
30 | if (b.index('Kools') != c.index('yellow') or | |
31 | b.index('Lucky Strikes') != d.index('orange juice') or | |
32 | n.index('Japanese') != b.index('Parliaments')): | |
33 | continue | |
34 | for p in itertools.permutations(pets): | |
35 | if (n.index('Spaniard') != p.index('dog') or | |
36 | b.index('Old Gold') != p.index('snails') or | |
37 | abs(b.index('Chesterfields') - p.index('fox')) != 1 or | |
38 | abs(b.index('Kools') - p.index('horse')) != 1): | |
39 | continue | |
40 | count +=1 | |
41 | print('Solution #', count, ':', sep = '') | |
42 | print('Water drinker: ', n[d.index('water')]) | |
43 | print('Zebra owner: ', n[p.index('zebra')]) | |
44 | # End of script. |