diff --git a/pictures/unsolved/tmp1ern14si.png b/pictures/unsolved/tmp1ern14si.png new file mode 100644 index 0000000..9f8b160 Binary files /dev/null and b/pictures/unsolved/tmp1ern14si.png differ diff --git a/pictures/unsolved/tmp2_0vn4tl.png b/pictures/unsolved/tmp2_0vn4tl.png new file mode 100644 index 0000000..5ce554e Binary files /dev/null and b/pictures/unsolved/tmp2_0vn4tl.png differ diff --git a/pictures/unsolved/tmp32jmcnfp.png b/pictures/unsolved/tmp32jmcnfp.png new file mode 100644 index 0000000..99184e7 Binary files /dev/null and b/pictures/unsolved/tmp32jmcnfp.png differ diff --git a/pictures/unsolved/tmpcml2ldfl.png b/pictures/unsolved/tmpcml2ldfl.png new file mode 100644 index 0000000..0ec521a Binary files /dev/null and b/pictures/unsolved/tmpcml2ldfl.png differ diff --git a/pictures/unsolved/tmpd7rbwwdb.png b/pictures/unsolved/tmpd7rbwwdb.png new file mode 100644 index 0000000..48edff0 Binary files /dev/null and b/pictures/unsolved/tmpd7rbwwdb.png differ diff --git a/pictures/unsolved/tmpdudxuw0s.png b/pictures/unsolved/tmpdudxuw0s.png new file mode 100644 index 0000000..f9e57d9 Binary files /dev/null and b/pictures/unsolved/tmpdudxuw0s.png differ diff --git a/pictures/unsolved/tmpeplvz9bk.png b/pictures/unsolved/tmpeplvz9bk.png new file mode 100644 index 0000000..3a3674a Binary files /dev/null and b/pictures/unsolved/tmpeplvz9bk.png differ diff --git a/pictures/unsolved/tmph_esy__3.png b/pictures/unsolved/tmph_esy__3.png new file mode 100644 index 0000000..3cd08c5 Binary files /dev/null and b/pictures/unsolved/tmph_esy__3.png differ diff --git a/pictures/unsolved/tmpn95ueb7_.png b/pictures/unsolved/tmpn95ueb7_.png new file mode 100644 index 0000000..013afb1 Binary files /dev/null and b/pictures/unsolved/tmpn95ueb7_.png differ diff --git a/pictures/unsolved/tmpqzay4q08.png b/pictures/unsolved/tmpqzay4q08.png new file mode 100644 index 0000000..2dc0764 Binary files /dev/null and b/pictures/unsolved/tmpqzay4q08.png differ diff --git a/pictures/unsolved/tmputbych59.png b/pictures/unsolved/tmputbych59.png new file mode 100644 index 0000000..12edf7f Binary files /dev/null and b/pictures/unsolved/tmputbych59.png differ diff --git a/pictures/unsolved/tmpx4uo6pg3.png b/pictures/unsolved/tmpx4uo6pg3.png new file mode 100644 index 0000000..41b17ec Binary files /dev/null and b/pictures/unsolved/tmpx4uo6pg3.png differ diff --git a/shenzhen_solitaire/solver/solver.py b/shenzhen_solitaire/solver/solver.py index 0f2f531..a4e15f1 100644 --- a/shenzhen_solitaire/solver/solver.py +++ b/shenzhen_solitaire/solver/solver.py @@ -12,16 +12,16 @@ from .board_possibilities import possible_actions @dataclass class ActionStackFrame: iterator: Iterator[board_actions.Action] - action: Optional[board_actions.Action] + last_action: Optional[board_actions.Action] state: int def next(self) -> Optional[board_actions.Action]: """Get next iteration of top action iterator""" try: - self.action = next(self.iterator) + self.last_action = next(self.iterator) except StopIteration: return None - return self.action + return self.last_action class ActionStack: @@ -35,7 +35,7 @@ class ActionStack: self.frames.append( ActionStackFrame( iterator=iter(possible_actions(board)), - action=None, + last_action=None, state=board.state_identifier, ) ) @@ -64,23 +64,23 @@ def solve( def _limit_stack_size(stack_size: int) -> None: if len(stack) == stack_size: stack.pop() - assert stack.top.action is not None - stack.top.action.undo(board) + assert stack.top.last_action is not None + stack.top.last_action.undo(board) assert board.state_identifier in state_set def _backtrack_action() -> None: stack.pop() - assert stack.top.action is not None - stack.top.action.undo(board) + assert stack.top.last_action is not None + stack.top.last_action.undo(board) assert board.state_identifier in state_set def _skip_loop_move(action: board_actions.Action) -> bool: if not isinstance(action, MoveAction): return False for frame in stack.frames[-2::-1]: - if not isinstance(frame.action, MoveAction): + if not isinstance(frame.last_action, MoveAction): continue - if frame.action.cards == action.cards: + if frame.last_action.cards == action.cards: return True return False @@ -111,8 +111,10 @@ def solve( action.apply(board) if board.solved(): - assert all(x.action is not None for x in stack.frames) - yield [typing.cast(board_actions.Action, x.action) for x in stack.frames] + assert all(x.last_action is not None for x in stack.frames) + yield [ + typing.cast(board_actions.Action, x.last_action) for x in stack.frames + ] iter_start = time.time() action.undo(board) assert board.state_identifier in state_set