From 110935e6e8e353dc5f54dc3c7ce67fcf713a1068 Mon Sep 17 00:00:00 2001 From: sigmasternchen Date: Sat, 2 Nov 2024 15:02:48 +0100 Subject: [PATCH] feat: Remove duplicate states --- generator/__main__.py | 25 +++++++++++++------------ generator/model.py | 12 ++++++++++++ generator/template.html | 2 +- 3 files changed, 26 insertions(+), 13 deletions(-) diff --git a/generator/__main__.py b/generator/__main__.py index 78881d5..4b13ab2 100644 --- a/generator/__main__.py +++ b/generator/__main__.py @@ -1,6 +1,6 @@ from jinja2 import Environment, select_autoescape, FileSystemLoader -from generator.model import Board, NOT_DETERMINED, WIN +from generator.model import Board, NOT_DETERMINED, WIN, Move from generator.tictactoe import calculate_best_move import random @@ -29,37 +29,38 @@ def get_taunt(board, outcome): return "" -def render_board(initial_prefix, prefix, board, outcome): - with open("output/" + prefix + ".html", "w") as file: +def render_board(prefix, old_board, board, outcome): + with open("output/" + prefix + old_board.getId() + ".html", "w") as file: file.write( template.render( board=board, prefix=prefix, - reset=initial_prefix + ".html", - msg=get_taunt(board, outcome) + reset=prefix + ".html", + msg=get_taunt(board, outcome), + Move=Move, ) ) -def generate_options(initial_prefix, prefix, board, outcome): - render_board(initial_prefix, prefix, board, outcome) +def generate_options(prefix, old_board, board, outcome): + render_board(prefix, old_board, board, outcome) if board.winner() == NOT_DETERMINED: for move in board.moves(): future = board.apply(move) response, outcome = calculate_best_move(future) - print(prefix, move, response) + print(board.getId(), move, response) generate_options( - initial_prefix, - prefix + str(move), + prefix, + future, future.apply(response) if response else future, - outcome + outcome ) if __name__ == "__main__": board = Board() - generate_options("index", "index", board, NOT_DETERMINED) + generate_options("index", board, board, NOT_DETERMINED) diff --git a/generator/model.py b/generator/model.py index 2e53931..ce7a9e7 100644 --- a/generator/model.py +++ b/generator/model.py @@ -97,6 +97,18 @@ class Board: return DRAW + + def getId(self): + id = 0 + for y in range(3): + for x in range(3): + id += self.field[y][x] * int(pow(3, (y * 3 + x))) + if id == 0: + return "" + else: + return hex(id)[2:] + + def visualize(self): for y in range(3): for x in range(3): diff --git a/generator/template.html b/generator/template.html index 7d4cc6f..65db225 100644 --- a/generator/template.html +++ b/generator/template.html @@ -25,7 +25,7 @@ {%- elif winner != -1 -%}   {%- else -%} - ? + ? {%- endif -%} {%- endfor -%}