# Bulls and cows/Player

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Bulls and cows/Player
You are encouraged to solve this task according to the task description, using any language you may know.

The task is to write a player of the Bulls and Cows game, rather than a scorer. The player should give intermediate answers that respect the scores to previous attempts.

## Python

<lang python> from itertools import permutations from random import shuffle

try:

```   raw_input
```

except:

```   raw_input = input
```

try:

```   izip
```

except:

```   izip = zip

```

digits = '123456789' size = 4

def parse_score(score):

```   score = score.strip().split(',')
return tuple(int(s.strip()) for s in score)
```

def scorecalc(guess, chosen):

```   bulls = cows = 0
for g,c in izip(guess, chosen):
if g == c:
bulls += 1
elif g in chosen:
cows += 1
return bulls, cows
```

choices = list(permutations(digits, size)) shuffle(choices) answers = [] scores = [] found = False

print ("Playing Bulls & Cows with %i unique digits\n" % size)

while True:

```   ans = choices[0]
#print ("(Narrowed to %i possibilities)" % len(choices))
score = raw_input("Guess %2i is %*s. Answer (Bulls, cows)? "
score = parse_score(score)
scores.append(score)
#print("Bulls: %i, Cows: %i" % score)
found =  score == (size, 0)
if found:
print ("Ye-haw!")
break
choices = [c for c in choices if scorecalc(c, ans) == score]
if not choices:
print ("Bad scoring? nothing fits those scores you gave:")
print ('  ' +
'\n  '.join("%s -> %s" % (.join(an),sc)
break</lang>
```

Sample output

```Playing Bulls & Cows with 4 unique digits

Guess  1 is 1935. Answer (Bulls, cows)? 0,2
Guess  2 is 4169. Answer (Bulls, cows)? 0,3
Guess  3 is 6413. Answer (Bulls, cows)? 1,1
Guess  4 is 9612. Answer (Bulls, cows)? 1,1
Guess  5 is 9481. Answer (Bulls, cows)? 3,0
Guess  6 is 9471. Answer (Bulls, cows)? 4,0
Ye-haw!```

```Playing Bulls & Cows with 4 unique digits