Pastebin launched a little side project called HostCabi.net, check it out ;-)Don't like ads? PRO users don't see any ads ;-)
Guest

RFH

By: a guest on Jun 23rd, 2009  |  syntax: Python  |  size: 1.98 KB  |  hits: 188  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
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.