Skip to content

Instantly share code, notes, and snippets.

@mahanmarwat
Last active October 27, 2015 08:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mahanmarwat/2d2d61601ed3f8ab4b7d to your computer and use it in GitHub Desktop.
Save mahanmarwat/2d2d61601ed3f8ab4b7d to your computer and use it in GitHub Desktop.
from collections import Counter
import random
def base_strategy():
return random.randrange(1, 10)
def computer_strategy(scores, player_answers, computer_answers,
total_iterations, current_iteration):
"""Guess a number with human like logic.
Result:
- Won 94 out of 100, when propponent played in range (1, 10)
Results - Player 6, Computer 94, Tie 0
- Won 9256 out of 10000, when propponent played in range (1, 10)
Results - Player 744, Computer 9256, Tie 0
- Won 77 out of 100, when propponent played in range (1, 3)
Results - Player 23, Computer 77, Tie 0
- Won 7805 out of 10000, when propponent played in range (1, 3)
Results - Player 2195, Computer 7805, Tie 0
"""
DEBUG = False
# Increament the user repeated num by 1 and return it.
if len(player_answers) >= 2 and player_answers[-1] == player_answers[-2]:
if player_answers[-1] == 4:
our_guess = 2
elif player_answers[-1] == 3:
our_guess = 1
elif player_answers[-1] == 2:
our_guess = 3
elif player_answers[-1] == 1:
our_guess = 2
else:
our_guess = random.randint(1, 3)
if DEBUG: print('Repeated: {0}'.format(our_guess))
return our_guess
# If one point to win return 1 or 2.
if scores['computer'] == 4:
our_guess = random.randint(1, 2)
if DEBUG: print('1 to Win: {0}'.format(our_guess))
return our_guess
# Increament user most guessed number by 1 and return it.
try:
counter = Counter(player_answers)
except NameError:
from collections import Counter
finally:
counter = Counter(player_answers)
if (len(player_answers) >= 4 and counter.most_common(1)[0][-1] >= 2
and counter.most_common(1)[0][1] <= 2):
our_guess = counter.most_common(1)[0][1] + 1
if DEBUG: print('Common: {0}'.format(our_guess))
return our_guess
# Guess number in a lower range.
our_guess = random.randint(1, 3)
if our_guess == 3:
our_guess = random.randint(1, 3)
if DEBUG: print('Guess: {0}'.format(our_guess))
if DEBUG: print('End: {0}'.format(our_guess))
return our_guess
def compute_score(player_answer, computer_answer, scores):
if player_answer + 1 == computer_answer:
scores['computer'] += 2
elif computer_answer + 1 == player_answer:
scores['player'] += 2
elif player_answer < computer_answer:
scores['player'] += 1
elif player_answer > computer_answer:
scores['computer'] += 1
return scores
def calculate_winner(scores, outcomes):
if scores['player'] > scores['computer']:
outcomes['player'] += 1
elif scores['computer'] > scores['player']:
outcomes['computer'] += 1
else:
outcomes['ties'] += 1
return outcomes
# run!
if __name__ == '__main__':
iterations = 100
scores = {'player': 0, 'computer': 0}
outcomes = {'player': 0, 'computer': 0, 'ties': 0}
player_nums = []
computer_nums = []
for x in range(0, iterations):
while scores['player'] < 5 and scores['computer'] < 5:
player_answer = base_strategy()
computer_answer = computer_strategy(
scores, player_nums, computer_nums, iterations, x)
player_nums.append(player_answer)
computer_nums.append(computer_answer)
compute_score(player_answer, computer_answer, scores)
calculate_winner(scores, outcomes)
scores = {'player': 0, 'computer': 0}
player_nums = []
computer_nums = []
print('Results - Player {0}, Computer {1}, Tie {2}'.format(
outcomes['player'], outcomes['computer'], outcomes['ties']))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment