75 lines
1.4 KiB
Python
75 lines
1.4 KiB
Python
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
|