Check out the Pastebin Gadgets Shop. We have thousands of fun, geeky & affordable gadgets on sale :-)Want more features on Pastebin? Sign Up, it's FREE!

# RFH

By: a guest on Jun 23rd, 2009  |  syntax: Python  |  size: 1.98 KB  |  views: 205  |  expires: Never
This paste has a previous version, view the difference. Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
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.
clone this paste RAW Paste Data
Top