diff options
-rwxr-xr-x | solver.py | 200 |
1 files changed, 14 insertions, 186 deletions
@@ -41,8 +41,6 @@ class Kana: kana_void = Kana("void") - - def is_swappable(kana1, kana2): table_ok = { "norm": ("norm", "empt", "froz"), @@ -67,7 +65,6 @@ def test_is_swappable(): assert not is_swappable(Kana("empt"), Kana("empt")) - class KanaGrid: valid_types_for_chain = ("froz", "norm", "rock") @@ -114,22 +111,6 @@ class KanaGrid: new_grid.swap_kana(pos, pos_dest) return new_grid - def __repr__(self): - self.update_score() - return ( - ('KanaGrid (cnt: %d, score:%d): \n ' % (self.action_count, self.score)) - + '\n '.join(repr_grid(self.grid, (self.width, self.height)).splitlines()) - ) - - - def __eq__(self, other): - return ( - self.width == other.width - and self.height == other.height - and self.grid == other.grid - and self.action_count == other.action_count - ) - def generate_valid_pos_for_chain(self): for y in range(self.height): for x in range(self.width): @@ -226,7 +207,6 @@ class KanaGrid: pos_dst = (pos_dst[0] + vect[0], pos_dst[1] + vect[1]) kana_dst = self.get_kana(pos_dst) - def load(input_dict): grid = [] for serialized_kana in input_dict['grid']: @@ -239,6 +219,20 @@ class KanaGrid: def dump(self, stream): raise NotImplemented + def __repr__(self): + self.update_score() + return ( + ('KanaGrid (cnt: %d, score:%d): \n ' % (self.action_count, self.score)) + + '\n '.join(repr_grid(self.grid, (self.width, self.height)).splitlines()) + ) + + def __eq__(self, other): + return ( + self.width == other.width + and self.height == other.height + and self.grid == other.grid + and self.action_count == other.action_count + ) def test_kana_grid(): @@ -272,11 +266,6 @@ def test_kana_grid(): assert kanagrid_new.grid == expected_grid - - - - - def repr_grid(grid, grid_size): lines = [] kana_iter = iter(grid) @@ -306,7 +295,6 @@ def is_kana_compatible(kana1, kana2): return False - def generate_possible_grids(kanagrid): for y in range(kanagrid.height): for x in range(kanagrid.width): @@ -318,67 +306,6 @@ def generate_possible_grids(kanagrid): yield (x, y), action_type, new_grid # debug test - -class Node: - - def __init__(self, grid, parent=None, pos=None, action_type=None): - - self.grid = grid - self.parent = parent - self.action_type = action_type - self.pos = pos - self.children = [] - - def append(self, node): - self.children.append(node) - - def __repr__(self): - - return '(%s, %s, %s, %s, [%s])' % ( - id(self.parent), - self.grid.action_count, - self.pos, - self.action_type, - len(self.children)) - - #if not self.children: - # return repr(self.grid) - - #return ('Node(%d): ' % self.children[0].grid.action_count) + repr(self.children) - - -def make_actions(node, taboos={}, max_action=100, debug=False): - for pos, action_type, new_grid in generate_possible_grids(node.grid): - - #id_grid = id(new_grid.grid) - #if id_grid in taboos: - # best_count = taboos[id_grid] - # if new_grid.action_count >= best_count: - # continue - - #taboos[id_grid] = new_grid.action_count - - #node_test = node - #while node_test: - # if new_grid.grid == node_test.grid.grid: - # continue - # node_test = node_test.parent - - new_node = Node(new_grid, parent=node, pos=pos, action_type=action_type) - node.append(new_node) - - if debug: - #print() - #print("pos %s, action: %s" % (pos, action_type)) - print(new_grid) - - #if score(new_grid.grid) % 2: - #print(node, new_grid) - - if new_grid.action_count < max_action: - make_actions(new_node, taboos=taboos, max_action=max_action, debug=debug) - - def generate_all_possible_grids(grid, grids, max_actions): for pos, action_type, new_grid in generate_possible_grids(grid): grid_hash = new_grid.get_hash() @@ -389,14 +316,6 @@ def generate_all_possible_grids(grid, grids, max_actions): generate_all_possible_grids(new_grid, grids, max_actions) -def node_repr_with_parents(node): - items = [] - while node: - items.append("%s %s" % (str(node), str(node.grid))) - node = node.parent - return '\n'.join(reversed(items)) - - def repr_grid_with_parents(grid): items = [] while grid: @@ -415,95 +334,8 @@ def print_score_over(node, target_score): print_score_over(child, target_score) -def fact(n): - if n == 1: - return 1 - return n*fact(n-1) - - -def get_leafs(node): - if not node.children: - return [node] - children_extended = [] - for child in node.children: - children_extended.extend(get_leafs(child)) - return children_extended - - def main(): - #tree = KanaTree(root=grid) - - #my_grid = [ - # kana_void , Kana("myst", "su"), kana_void , Kana("myst", "ko"), kana_void , - # Kana("froz", "se"), Kana("empt" ), Kana("empt" ), Kana("empt" ), Kana("froz", "so"), - # Kana("froz", "ku"), Kana("empt" ), Kana("empt" ), Kana("empt" ), Kana("froz", "no"), - # kana_void , kana_void , Kana("rock", "ka"), kana_void , kana_void , - #] - #my_grid_size = 5, 4 - #chain_target = 7 - #kanagrid = KanaGrid(my_grid_size, my_grid) - - #print(kanagrid) - #root = Node(kanagrid) - - # guided - #node = root - #make_actions(node, max_action=1) - #node = node.children[1] - #print(node.grid) - #make_actions(node, max_action=1) - #node = node.children[1] - #print(node.grid) - #make_actions(node, max_action=1) - #node = node.children[4] - #print(node.grid) - #make_actions(node, max_action=1) - #node = node.children[3] - #print(node.grid) - #make_actions(node, max_action=1) - #node = node.children[4] - #print(node.grid) - #make_actions(node, max_action=1) - #node = node.children[5] - #print(node.grid) - #make_actions(node, max_action=1) - #node = node.children[5] - #print(node.grid) - #make_actions(node, max_action=1) - #node = node.children[0] - #print(node.grid) - #print_score_over(root, 0) - - # action by lvl1 - #make_actions(root, max_action=1) - #children_lvl1 = root.children - #print("%d lvl1 calculated" % len(root.children)) - #for index, child in enumerate(children_lvl1): - # print("calculating child %d" % index) - # #print(node_repr_with_parents(child)) - # make_actions(child, max_action=8) - # print_score_over(root, 6) - # # make space in memory - # child.children = [] - - # action by lvl2 - #make_actions(root, max_action=2) - #children_lvl2 = get_leafs(root) - #print("%d lvl2 calculated" % len(children_lvl2)) - #for index, child in enumerate(children_lvl2): - # print("calculating child %d" % index) - # #print(node_repr_with_parents(child)) - # make_actions(child, max_action=8-2) - # print_score_over(root, 6) - # child.children = [] - - #make_actions(root, max_action=8) - #print_score_over(root, 7) - - #for x, y in ((0,1), (4, 2), (2, 3)): - # print(grid.get_kana((x, y))) - args = docopt.docopt(__doc__) with open(args['YAML_GRID'], encoding='utf8') as stream: input_dict = yaml.safe_load(stream) @@ -530,9 +362,5 @@ def main(): print(grid) - - - # action by lvl in files - if __name__ == '__main__': main() |