|
@@ -1,3 +1,5 @@
|
|
|
|
+import itertools
|
|
|
|
+
|
|
from graphviz import Digraph
|
|
from graphviz import Digraph
|
|
|
|
|
|
from chess_state import ChessState
|
|
from chess_state import ChessState
|
|
@@ -19,6 +21,8 @@ class Solver:
|
|
self.states[0].append(self.starting_state)
|
|
self.states[0].append(self.starting_state)
|
|
|
|
|
|
def solvable(self, state):
|
|
def solvable(self, state):
|
|
|
|
+ if (self.board_size * self.board_size - 1) % 3 != 0:
|
|
|
|
+ return False
|
|
bricks_on_field = len(state.history())
|
|
bricks_on_field = len(state.history())
|
|
current_id = (bricks_on_field, len(self.states[bricks_on_field]) - 1)
|
|
current_id = (bricks_on_field, len(self.states[bricks_on_field]) - 1)
|
|
|
|
|
|
@@ -63,10 +67,10 @@ class Solver:
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
if __name__ == '__main__':
|
|
- s = Solver(board_size=14)
|
|
|
|
|
|
+ s = Solver(board_size=11)
|
|
proof.node(name=state_id(0), label=s.starting_state.board_label())
|
|
proof.node(name=state_id(0), label=s.starting_state.board_label())
|
|
result = s.solvable(s.starting_state)
|
|
result = s.solvable(s.starting_state)
|
|
print('solvable:', result)
|
|
print('solvable:', result)
|
|
print('steps:', s.steps)
|
|
print('steps:', s.steps)
|
|
- print('states:', len(s.states))
|
|
|
|
|
|
+ print('states:', len(list(itertools.chain.from_iterable(s.states))))
|
|
proof.render(f'img/proof.gv', view=False)
|
|
proof.render(f'img/proof.gv', view=False)
|