import numpy as np def create_test_state() -> np.array: return np.array([['1', '2', '3'], ['4', '5', '6'], ['7', '8', '9']]) def create_empty_state() -> np.array: return np.array([['-', '-', '-'], ['-', '-', '-'], ['-', '-', '-']]) def to_state_string(state, state_nex=None): sp = ' ' sp_arrow = ' => ' sp_ = [sp, sp_arrow, sp] def col(str_in, state): str_out = str_in for c in range(0, 3): char = state[r][c] if char == '-': char = ' ' str_out += "|" + char str_out += '|' return str_out state_str = '' for r in range(0, 3): if state is not None: state_str = col(state_str, state) if state_nex is not None: state_str += sp_[r] state_str = col(state_str, state_nex) if r != 2: state_str += '\x0A' return state_str def get_potential_moves(state: np.array) -> np.array: st = state.reshape(state.size) indices = [idx for idx, s in enumerate(st) if '-' in s] return np.array(indices) def f_state_slices(): nr = 3 nc = 3 result = [] # Create row finishing states d1 = () d2_r = () for r in range(0, nr): d1 += (r,) for c in range(0, nc): d2 = (c,) * nc result.append((d1, d2)) # Create column finishing states for c in range(0, nc): d2 = (c,) * nc result.append((d2, d1)) for c in range(0, nc): d2_r += (nc - c - 1,) # Create diagonal finishing states #1 result.append((d1, d1)) # Create diagonal finishing states #2 result.append((d1, d2_r)) return result