summaryrefslogtreecommitdiff
path: root/analysis_board.py
diff options
context:
space:
mode:
authorTinWoodman92 <chrhodgden@gmail.com>2023-12-16 06:18:44 -0600
committerTinWoodman92 <chrhodgden@gmail.com>2023-12-16 06:18:44 -0600
commit158b36e51c8c2925d6c8af6e08380369d019378e (patch)
treef91fadecf85e982714927eb6ab451c9173e37de0 /analysis_board.py
Initial commit
Diffstat (limited to 'analysis_board.py')
-rw-r--r--analysis_board.py212
1 files changed, 212 insertions, 0 deletions
diff --git a/analysis_board.py b/analysis_board.py
new file mode 100644
index 0000000..044f20f
--- /dev/null
+++ b/analysis_board.py
@@ -0,0 +1,212 @@
+class AnalysisBoard():
+ def __init__(self, fen_board='3/3/3'):
+ self.file_name = ['a', 'b', 'c']
+ self.rank_name = ['1', '2', '3']
+ self.diag_name = ['a1_c3', 'a3_c1']
+ self.fen_board = fen_board
+
+ @property
+ def __dict__(self):
+ d = {}
+ for fn in self.file_name:
+ fi = self.file_name.index(fn)
+ d[fn] = {}
+ for rn in self.rank_name:
+ ri = self.rank_name.index(rn)
+ d[fn][rn] = self.board[fi][ri]
+ return d
+
+ @property
+ def fen_board(self):
+ fen = ''
+ space_count = 0
+ r = 0
+ for rank in reversed(self.ranks):
+ r += 1
+ for sqr in rank:
+ if sqr == ' ':
+ space_count += 1
+ else:
+ if space_count != 0:
+ fen += str(space_count)
+ space_count = 0
+ fen += sqr
+ if space_count != 0:
+ fen += str(space_count)
+ space_count = 0
+ if not r == 3:
+ fen += '/'
+ return fen
+
+ @fen_board.setter
+ def fen_board(self, fen):
+ str_board = ''
+ for s in fen.replace('/',''):
+ if s.isnumeric(): str_board += int(s) * ' '
+ else: str_board += s
+ self.board = [
+ [str_board[6], str_board[3], str_board[0]],
+ [str_board[7], str_board[4], str_board[1]],
+ [str_board[8], str_board[5], str_board[2]]
+ ]
+
+ @property
+ def all_sqr_vals(self):
+ return [
+ self.board[0][0],
+ self.board[0][1],
+ self.board[0][2],
+ self.board[1][0],
+ self.board[1][1],
+ self.board[1][2],
+ self.board[2][0],
+ self.board[2][1],
+ self.board[2][2]
+ ]
+
+ @property
+ def all_sqr_nms(self): return ['a1', 'a2', 'a3', 'b1', 'b2', 'b3', 'c1', 'c2', 'c3']
+
+ @property
+ def all_sqrs_dict(self): return dict(zip(self.all_sqr_nms, self.all_sqr_vals))
+
+ @property
+ def sqr_nms(self):
+ return [
+ ['a1', 'a2', 'a3'],
+ ['b1', 'b2', 'b3'],
+ ['c1', 'c2', 'c3']
+ ]
+
+ @property
+ def turn(self):
+ if self.all_sqr_vals.count('X') <= self.all_sqr_vals.count('O'): return 'X'
+ elif self.all_sqr_vals.count('X') > self.all_sqr_vals.count('O'): return 'O'
+
+ @property
+ def alt_turn(self):
+ if self.all_sqr_vals.count('X') <= self.all_sqr_vals.count('O'): return 'O'
+ elif self.all_sqr_vals.count('X') > self.all_sqr_vals.count('O'): return 'X'
+
+ @property
+ def legal_moves(self):
+ legal_moves = []
+ for f in range(3):
+ for r in range(3):
+ if self.board[f][r] == ' ': legal_moves.append('abc'[f] + '123'[r])
+ return legal_moves
+
+ @property
+ def move_num(self): return self.all_sqr_vals.count('O') + 1
+
+ @property
+ def turn_num(self): return 10 - self.all_sqr_vals.count(' ')
+
+ @property
+ def row_a(self): return self.board[0]
+ @property
+ def row_b(self): return self.board[1]
+ @property
+ def row_c(self): return self.board[2]
+ @property
+ def row_1(self): return [self.board[0][0], self.board[1][0], self.board[2][0]]
+ @property
+ def row_2(self): return [self.board[0][1], self.board[1][1], self.board[2][1]]
+ @property
+ def row_3(self): return [self.board[0][2], self.board[1][2], self.board[2][2]]
+ @property
+ def row_a1_c3(self): return [self.board[0][0], self.board[1][1], self.board[2][2]]
+ @property
+ def row_a3_c1(self): return [self.board[0][2], self.board[1][1], self.board[2][0]]
+
+ @property
+ def sqr_rows(self):
+ sr = {}
+ for sqr_nm in self.all_sqr_nms:
+ rows = [sqr_nm[0], sqr_nm[1]]
+ if sqr_nm in self.row_a1_c3_sqr_nms: rows.append('a1_c3')
+ if sqr_nm in self.row_a3_c1_sqr_nms: rows.append('a3_c1')
+ sr[sqr_nm] = rows
+ return sr
+
+ @property
+ def row_a_sqr_nms(self): return self.sqr_nms[0]
+ @property
+ def row_b_sqr_nms(self): return self.sqr_nms[1]
+ @property
+ def row_c_sqr_nms(self): return self.sqr_nms[2]
+ @property
+ def row_1_sqr_nms(self): return [self.sqr_nms[0][0], self.sqr_nms[1][0], self.sqr_nms[2][0]]
+ @property
+ def row_2_sqr_nms(self): return [self.sqr_nms[0][1], self.sqr_nms[1][1], self.sqr_nms[2][1]]
+ @property
+ def row_3_sqr_nms(self): return [self.sqr_nms[0][2], self.sqr_nms[1][2], self.sqr_nms[2][2]]
+ @property
+ def row_a1_c3_sqr_nms(self): return [self.sqr_nms[0][0], self.sqr_nms[1][1], self.sqr_nms[2][2]]
+ @property
+ def row_a3_c1_sqr_nms(self): return [self.sqr_nms[0][2], self.sqr_nms[1][1], self.sqr_nms[2][0]]
+
+ @property
+ def row_a_dict(self): return dict(zip(self.row_a_sqr_nms, self.row_a))
+ @property
+ def row_b_dict(self): return dict(zip(self.row_b_sqr_nms, self.row_b))
+ @property
+ def row_c_dict(self): return dict(zip(self.row_c_sqr_nms, self.row_c))
+ @property
+ def row_1_dict(self): return dict(zip(self.row_1_sqr_nms, self.row_1))
+ @property
+ def row_2_dict(self): return dict(zip(self.row_2_sqr_nms, self.row_2))
+ @property
+ def row_3_dict(self): return dict(zip(self.row_3_sqr_nms, self.row_3))
+ @property
+ def row_a1_c3_dict(self): return dict(zip(self.row_a1_c3_sqr_nms, self.row_a1_c3))
+ @property
+ def row_a3_c1_dict(self): return dict(zip(self.row_a3_c1_sqr_nms, self.row_a3_c1))
+
+ @property
+ def files(self): return self.board
+ @property
+ def ranks(self):return [self.row_1, self.row_2, self.row_3]
+ @property
+ def diagonals(self): return [self.row_a1_c3, self.row_a3_c1]
+
+ @property
+ def rows(self):
+ return [
+ self.row_a,
+ self.row_b,
+ self.row_c,
+ self.row_1,
+ self.row_2,
+ self.row_3,
+ self.row_a1_c3,
+ self.row_a3_c1
+ ]
+
+ @property
+ def row_dicts(self):
+ return [
+ self.row_a_dict,
+ self.row_b_dict,
+ self.row_c_dict,
+ self.row_1_dict,
+ self.row_2_dict,
+ self.row_3_dict,
+ self.row_a1_c3_dict,
+ self.row_a3_c1_dict
+ ]
+
+ @property
+ def row_names(self): return self.file_name + self.rank_name + self.diag_name
+
+ @property
+ def row_dict(self): return dict(zip(self.row_names, self.rows))
+
+ @property
+ def row_dict_dicts(self): return dict(zip(self.row_names, self.row_dicts))
+
+ def sqr_val(self, sqr_nm):
+ f = self.file_name.index(sqr_nm[0])
+ r = self.rank_name.index(sqr_nm[1])
+ return self.board[f][r]
+ \ No newline at end of file