summaryrefslogtreecommitdiff
path: root/src/toys/euler-golf/js/sol.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/toys/euler-golf/js/sol.js')
-rw-r--r--src/toys/euler-golf/js/sol.js44
1 files changed, 0 insertions, 44 deletions
diff --git a/src/toys/euler-golf/js/sol.js b/src/toys/euler-golf/js/sol.js
deleted file mode 100644
index b4e527f..0000000
--- a/src/toys/euler-golf/js/sol.js
+++ /dev/null
@@ -1,44 +0,0 @@
-const DEPTH = 15;
-
-const DIRECTION = {
- 0: new cx(0, 1),
- 1: new cx(0, -1),
-};
-
-const construct_moves = (curr, prev) =>
- Object.keys(DIRECTION).map((x) => move(curr, prev, DIRECTION[x]));
-
-const backtrack = (local_index, depth) =>
- local_index
- .toString(2)
- .padStart(depth, "0")
- .split("")
- .map((direction) => (Number(direction) ? "+" : "-"));
-
-const sol = (target, start_from = new cx(0, 0), start_to = new cx(1, 0)) => {
- const next_moves = construct_moves(start_from, start_to);
- const solved_in_first_move = next_moves.findIndex((move) =>
- cx.eq(move, target)
- );
- if (solved_in_first_move != -1) return backtrack(solved_in_first_move, 1);
-
- let moves = [start_to, ...next_moves];
- let curr_depth = 2;
- while (curr_depth < DEPTH) {
- for (let i = 0; i < Math.pow(2, curr_depth); i++) {
- const direction = DIRECTION[Number(i.toString(2).at(-1))];
- // Current element is at i >> 1 + the offset for the previous group (which is
- // the sum of the geometric series 2**n until curr_depth - 1)
- const current_i = (i >> 1) + (1 - Math.pow(2, curr_depth - 1)) / (1 - 2);
- const previous_i = (i >> 2) + (1 - Math.pow(2, curr_depth - 2)) / (1 - 2);
-
- const new_move = move(moves[previous_i], moves[current_i], direction);
-
- moves.push(new_move);
- if (cx.eq(new_move, target)) return backtrack(i, curr_depth);
- }
- curr_depth++;
- }
-
- return null;
-};