#!/usr/bin/python3
# plays the wizard's ace-five count
#
# with the simple strategy at
#
#
#
# Player's hand Dealer's upcard
#
# -- hard --------------------------------
# 2 to 6 7 to A
# 4 to 8 H H
# 9 D H
# 10 or 11 D with more than dealer
# 12 to 16 S H
# 17 to 21 S S
#
# -- soft --------------------------------
# 2 to 6 7 to A
# 13 to 15 H H
# 16 to 18 D H
# 19 to 21 S S
#
# -- split -------------------------------
# 2 to 6 7 to A
# 22,33,66,77,99 Y N
# 88,AA Y Y
# 44,55,TT N N
#
# Plus:
# 1. surrender 16 vs 10
# 2. never take insurance
# 3. if not allowed to double, stand with soft 18
#
import sys
import fileinput
max_bet = 8
debug = False
n_player_cards = 0
count = 0
bet = 1
for linenl in fileinput.input():
line = linenl.rstrip()
if debug:
print("<- %s" % line, file = sys.stderr)
if line == "bye":
sys.exit(0)
elif line == "shuffling":
count = 0
bet = 1
elif line[:8] == "new_hand":
n_player_cards = 0
elif line == "insurance?":
print("no", flush = True)
if debug:
print("<- no", file = sys.stderr)
elif line == "bet?":
if count <= 1:
bet = 1
elif bet < max_bet:
bet *= 2
print(bet, flush = True)
#print("1", flush = True)
elif line[:15] == "player_split_ok":
n_player_cards = 1
elif line[:5] == "card_":
tokens = line.split()
if (len(tokens) > 1):
card = tokens[1][0]
else:
card = "" # the dealer's hole card
# count aces and fives
if card == "A":
count -= 1
if debug:
print("ACE, count is %d" % count, file = sys.stderr)
elif card == "5":
count += 1
if debug:
print("FIVE, count is %d" % count, file = sys.stderr)
if line[:11] == "card_player":
n_player_cards += 1
if n_player_cards == 1:
card_player_first = card
elif n_player_cards == 2:
card_player_second = card
elif line[:5] == "play?":
tokens = line.split()
player = int(tokens[1])
dealer = abs(int(tokens[2]))
action = "quit"
if n_player_cards == 2 and card_player_first == card_player_second and \
((card_player_first == "8" or card_player_first == "A") or \
(dealer < 7 and \
(card_player_first == "2" or \
card_player_first == "3" or \
card_player_first == "6" or \
card_player_first == "7" or \
card_player_first == "9"))): # --- split------------------------------------
action = "split" # always split aces and 8s but 2,3,6,7 & 9 only against 6 or less
else:
if player > 0: # --- hard ------------------------------------
if player < 9:
action = "hit" # hit 4 to 8 against anything
elif player == 9:
if dealer < 7:
if n_player_cards == 2:
action = "double" # double 9 against 2 to 6
else:
action = "hit" # else hit
else:
action = "hit" # hit 9 against 7 to A
elif player < 12:
if player > dealer:
if n_player_cards == 2:
action = "double" # double with 10 or 11 and more than dealer
else:
action = "hit"
else:
action = "hit" # otherwise hit
elif player < 17:
if dealer < 7:
action = "stand" # stand with 12 to 16 against 2 to 6
else:
action = "hit" # hit with 12 to 16 against 7 to A
else:
action = "stand" # stand with hard 17 or more
else:
# soft
player = abs(player)
if player < 16:
action = "hit" # hit every soft hand less than 16
elif player < 19:
if dealer < 7:
if n_player_cards == 2:
action = "double" # double soft 16 to 18 againt 2 to 6
elif player == 18:
action = "stand" # stand with soft 18
else:
action = "hit" # hit soft 17
else:
action = "hit" # hit soft 16 to 18 against 7 to A
else:
action = "stand" # stand with soft 19 or more
print(action, flush = True)
if debug:
print("-> %s" % action, file = sys.stderr)
elif line == "invalid_command":
print("I sent an invalid command!", file = sys.stderr)