Advertisement
Guest User

Untitled

a guest
Jul 21st, 2017
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.19 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. from random import randint
  5. from random import choice as randchoice
  6.  
  7. N = 4
  8.  
  9. def get_count(smth1, smth2):
  10.     bulls = cows = 0
  11.     for i, value in enumerate(smth1):
  12.         try:
  13.             if i == smth2.index(value):
  14.                 bulls += 1
  15.             else:
  16.                 cows += 1
  17.         except ValueError:
  18.             pass
  19.     return bulls, cows
  20.  
  21. is_correct = lambda x: x[0] != '0' and len(set(x)) == len(x)
  22. ask = lambda x: tuple(map(int, raw_input('%s: ' % ''.join(map(str, x))).split()[:2]))
  23.  
  24. rules = []
  25. possible_numbers = [str(i) for i in xrange(10**(N-1), 10**N-1) if is_correct(str(i))]
  26.  
  27. while len(possible_numbers) > 1:
  28.     tmp = randchoice(possible_numbers)
  29.     rules.append((tmp, ask(tmp)))
  30.    
  31.     tmp = []
  32.     for number in possible_numbers:
  33.         is_possible = True
  34.         for rule in rules:
  35.             if get_count(number, rule[0]) != rule[1]:
  36.                 is_possible = False
  37.                 break
  38.         if is_possible:
  39.             tmp.append(number)
  40.     possible_numbers = tmp
  41.  
  42. if possible_numbers:
  43.     print 'Result: %s' % ''.join(map(str, possible_numbers[0]))
  44. else:
  45.     print 'Incorrect!'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement