From 67e8c7a6398467a207cd34521724c6d82a137136 Mon Sep 17 00:00:00 2001 From: omri Date: Sat, 24 Aug 2024 11:16:23 +0300 Subject: [PATCH] fix nasty bug where eolr permutation would also change orientation --- __main__.py | 1 - cube.py | 9 +-------- eolr.py | 3 ++- solver.py | 5 ++--- 4 files changed, 5 insertions(+), 13 deletions(-) diff --git a/__main__.py b/__main__.py index 81a1f38..032fb42 100644 --- a/__main__.py +++ b/__main__.py @@ -6,7 +6,6 @@ import sys from eolr import ( eolrb_states_generator, EOLROrientation, - EOLRPermutation, EOLR_PERMUTATIONS, ) import humanize diff --git a/cube.py b/cube.py index 0cbd384..7d098d2 100644 --- a/cube.py +++ b/cube.py @@ -29,14 +29,6 @@ class LSECube: self.reset() def reset(self): - # self.edges = { - # "UB": Edge("UB", True), - # "UR": Edge("UR", True), - # "UF": Edge("UF", True), - # "UL": Edge("UL", True), - # "DB": Edge("DB", True), - # "DF": Edge("DF", True), - # } self.edges = { "UB": Edge("UB", True), "UR": Edge("UR", True), @@ -70,6 +62,7 @@ class LSECube: eolrb_state[location] = Edge("", edge.oriented) eolrb_state["center_oriented"] = self.centers["U"] in ["U", "D"] + # the value of UFR is supposed to be the key of the value "UFR" in self.corners but whatever eolrb_state["UFR"] = self.corners["UFR"] return int( diff --git a/eolr.py b/eolr.py index a57d85e..5fb7539 100644 --- a/eolr.py +++ b/eolr.py @@ -69,8 +69,9 @@ def eolrb_states_generator( for auf in range(4): state = LSECube() apply_eolr_auf(state, auf) - apply_eolr_orientation(state, ori) + # applying permutation before orientation is crucial, as permutation swaps pieces and doesn't care about their orientation apply_eolr_permutation(state, perm) + apply_eolr_orientation(state, ori) yield (state, ori, perm, auf) return generator(), num_permutations diff --git a/solver.py b/solver.py index 776180f..acc07db 100644 --- a/solver.py +++ b/solver.py @@ -61,8 +61,7 @@ def create_eolrb_prune_table(prune_depth: int): for alg in generator: cube.reset() cube.alg(" ".join(alg)) - solution = reverse_algorithm(alg) - prune_table[cube.eolrb_hash()].append(solution) + prune_table[cube.eolrb_hash()].append(reverse_algorithm(alg)) return prune_table @@ -83,7 +82,7 @@ def solve_eolrb(cube: LSECube, prune_table: Dict, solve: int): for prune_solution in prune_table[c.eolrb_hash()]: alg = condense_algorithm(moves + prune_solution) # TODO: this is very weird - for _ in range(10): + for _ in range(5): alg = condense_algorithm(alg) if len(alg) > 2: # TODO: check if this is mc