"""The starter brain, in the Gomocup protocol (START, BEGIN, TURN, BOARD, END on stdin; "x,y" on stdout): win if it can, else block a five, else a random point next to the stones. Copy it into routes//bot.py and make it better.""" import random, sys N, board, me = 15, {}, 1 D = [(1, 0), (0, 1), (1, 1), (1, -1)] def five(x, y, c): for dx, dy in D: n = 1 for s in (1, -1): i = 1 while board.get((x + s * i * dx, y + s * i * dy)) == c: n += 1; i += 1 if n == 5: return True return False def move(): empty = [(x, y) for x in range(N) for y in range(N) if (x, y) not in board] near = [p for p in empty if any((p[0] + a, p[1] + b) in board for a in (-1, 0, 1) for b in (-1, 0, 1))] or [(N // 2, N // 2)] for c in (me, 3 - me): for p in near: if five(*p, c): return p return random.choice(near) def play(): x, y = move(); board[(x, y)] = me print(f'{x},{y}', flush=True) random.seed(int(sys.argv[1]) if len(sys.argv) > 1 else 0) for line in sys.stdin: cmd, _, arg = line.strip().partition(' ') cmd = cmd.upper() if cmd == 'START': N = int(arg); board.clear(); print('OK', flush=True) elif cmd == 'BEGIN': play() elif cmd == 'TURN': x, y = map(int, arg.split(',')); board[(x, y)] = 2; play() elif cmd == 'RESTART': board.clear(); print('OK', flush=True) elif cmd == 'BOARD': board.clear() for l in sys.stdin: if l.strip().upper() == 'DONE': break x, y, f = map(int, l.split(',')); board[(x, y)] = 1 if f == 1 else 2 play() elif cmd == 'ABOUT': print('name="starter", version="0.1", author="shoal-games"', flush=True) elif cmd == 'END': break elif cmd != 'INFO': print('UNKNOWN', flush=True)