From d49a395dbd8b9ef78a32d14b1d69f37a299ceeac Mon Sep 17 00:00:00 2001 From: Lizzy Hunt Date: Fri, 24 Feb 2023 15:15:29 -0700 Subject: [PATCH] Visual changes, fix solution not being optimal when one move away --- euler-golf/index.html | 2 +- euler-golf/js/game.js | 6 +++--- euler-golf/js/sol.js | 9 +++++++-- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/euler-golf/index.html b/euler-golf/index.html index 7679a34..b34ce3a 100644 --- a/euler-golf/index.html +++ b/euler-golf/index.html @@ -51,7 +51,7 @@
  • The inital point that you rotate around is the origin (blue).
  • -
  • You must navigate to the target point (green).
  • +
  • You must navigate to the target point (white).
  • Initial game by diff --git a/euler-golf/js/game.js b/euler-golf/js/game.js index 68fca94..a15c913 100644 --- a/euler-golf/js/game.js +++ b/euler-golf/js/game.js @@ -46,7 +46,7 @@ CanvasRenderingContext2D.prototype.draw_cartesian_path = function ( grid_spec, cartesian_path, width = 2, - color = "#000" + color = "#fff" ) { const path = cartesian_path.map((coord) => grid_to_canvas(coord, grid_spec)); path.slice(1).forEach((coord, i) => { @@ -168,7 +168,7 @@ const render = ({ width, height, ctx, rows, cols, target } = state) => { move(prev, curr, new cx(0, state.angle.im < 0 ? -1 : 1)), ].map((c) => grid_to_canvas(complex_to_grid(c, rows, cols), grid_spec)); - ctx.line(a, b, 6, "#aaa"); + ctx.line(a, b, 6, "rgba(127, 127, 127, 0.3)"); } const grid_target = complex_to_grid(target, rows, cols); @@ -182,7 +182,7 @@ const render = ({ width, height, ctx, rows, cols, target } = state) => { } else if (x == grid_target.x && y == grid_target.y) { return { radius: 8, - color: "#00ff00", + color: "#fff", }; } else { return { diff --git a/euler-golf/js/sol.js b/euler-golf/js/sol.js index bc403fc..b4e527f 100644 --- a/euler-golf/js/sol.js +++ b/euler-golf/js/sol.js @@ -16,9 +16,14 @@ const backtrack = (local_index, depth) => .map((direction) => (Number(direction) ? "+" : "-")); const sol = (target, start_from = new cx(0, 0), start_to = new cx(1, 0)) => { - let moves = [start_to, ...construct_moves(start_from, start_to)]; - let curr_depth = 2; + 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))];