1
0
Fork 0

A simple eager/greedy strategy bot

Also kinda serves as a benchmark:

ledoian@Promethium /dev/pts/8 560 /home/ledoian/Dev/Carpet (master) $ time python3.10 eager.py
Out of 10000 games, 7158 won, 2842 lost.

real	0m43.314s
user	0m43.255s
sys	0m0.049s
ledoian@Promethium /dev/pts/8 561 /home/ledoian/Dev/Carpet (master) $ time python3.11 eager.py
Out of 10000 games, 7198 won, 2802 lost.

real	0m46.816s
user	0m46.434s
sys	0m0.067s
ledoian@Promethium /dev/pts/8 562 /home/ledoian/Dev/Carpet (master) $ time python3.12 eager.py
Out of 10000 games, 7226 won, 2774 lost.

real	0m42.048s
user	0m41.653s
sys	0m0.075s
ledoian@Promethium /dev/pts/8 563 /home/ledoian/Dev/Carpet (master) $ time pypy3 eager.py
Out of 10000 games, 7050 won, 2950 lost.

real	0m11.247s
user	0m11.085s
sys	0m0.158s
master
LEdoian 2 years ago
parent d42191be75
commit a83f1cb273

@ -0,0 +1,40 @@
import carpet
ITERATIONS = 10000
def try_drop(game):
success = True
while success:
success = False
for suit in carpet.Suit:
value = game.foundations[suit]
if (suit, value + 1) in game.carpet:
success = True
game.autodrop()
if len(game.offers) > 0 and (suit, value + 1) == game.offers[-1]:
success = True
game.drop_card_from_offer()
stats = {'wins': 0, 'losses': 0}
for i in range(ITERATIONS):
game = carpet.Game()
while game.game_result() is None:
# Alg: if we can drop, we drop. If not and we can get card, we get. Else we flip.
try_drop(game)
if game.free_cells > 0 and len(game.offers) > 0:
game.get_card_from_deck()
elif len(game.deck) > 0:
game.flip_deck()
elif game.game_result is None: # otherwise this is last round
print('Did we lose?')
game.print()
if game.game_result():
#print(f'Game {i} won in {game.moves} moves.')
stats['wins'] += 1
else:
#print(f'Game {i} lost in {game.moves} moves.')
stats['losses'] += 1
print(f'Out of {ITERATIONS} games, {stats["wins"]} won, {stats["losses"]} lost.')
Loading…
Cancel
Save