feat: Remove duplicate states

This commit is contained in:
sigmasternchen 2024-11-02 15:02:48 +01:00
parent e4b0ec83dc
commit 110935e6e8
3 changed files with 26 additions and 13 deletions

View file

@ -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,31 +29,32 @@ 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
)
@ -62,4 +63,4 @@ def generate_options(initial_prefix, prefix, board, outcome):
if __name__ == "__main__":
board = Board()
generate_options("index", "index", board, NOT_DETERMINED)
generate_options("index", board, board, NOT_DETERMINED)

View file

@ -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):

View file

@ -25,7 +25,7 @@
{%- elif winner != -1 -%}
 
{%- else -%}
<a href={{ prefix }}{{ x }}{{ y }}.html>?</a>
<a href={{ prefix }}{{ board.apply(Move(x, y)).getId() }}.html>?</a>
{%- endif -%}
</td>
{%- endfor -%}