def make_O_circuit(X_moves): dont_care = Constant(0) def f(env): grid = empty_grid for Xm_var in X_moves: Xm = env[Xm_var] if Xm is None or grid[Xm] != ' ': return dont_care grid = update(grid, Xm, 'X') Om = choose_move(grid, 'O')[1] grid = update(grid, Om, 'O') if is_won(grid): return dont_care return Constant(choose_move(grid, 'O')[1]) return realize(f, X_moves)
grid = empty_grid for Xm_var in X_moves: Xm = env[Xm_var] if Xm is None or grid[Xm] != ' ': return dont_care grid = update(grid, Xm, 'X') Om = choose_move(grid, 'O')[1] grid = update(grid, Om, 'O') if is_won(grid): return dont_care return Constant(choose_move(grid, 'O')[1]) return realize(f, X_moves) def crap(): for X1 in available_moves(empty_grid): gridX1 = update(empty_grid, X1, 'X') O1 = choose_move(gridX1, 'O')[1] gridO1 = update(gridX1, O1, 'O') for X2 in available_moves(gridO1): gridX2 = update(gridO1, X2, 'X') O2 = choose_move(gridX2, 'O')[1] gridO2 = update(gridX2, O2, 'O') if False: X1 = Variable('X1', tuple(range(9))) O1 = realize(lambda env: Constant(choose_move(update(empty_grid, env[X1], 'X'), 'O')[1]), [X1]) ## O1 #. Mux(X1, 4, 7, 4, 6, 8, 8, 4, 8, 4) X2 = Variable('X2', (None,) + tuple(range(9))) print make_ttt_circuit()