Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // data spiral
- // 17 16 15 14 13
- // 18 5 4 3 12
- // 19 6 1 2 11
- // 20 7 8 9 10
- // 21 22 23---> ...
- function getStepsToData (target)
- {
- const directions = [[1, 0], [0, 1], [-1, 0], [0, -1]];
- let directionPointer = 0;
- let x = 0;
- let y = 0;
- let stepsToNextCorner = 1;
- let stepsTaken = 0;
- let cornersTaken = 0;
- let currentNumber = 0;
- for (let i = 1; i < target; i += 1)
- {
- x += directions[directionPointer][0];
- y += directions[directionPointer][1];
- stepsTaken += 1;
- if (stepsTaken === stepsToNextCorner)
- {
- directionPointer = (directionPointer + 1) % directions.length;
- stepsTaken = 0;
- cornersTaken += 1;
- if (cornersTaken % 2 === 0)
- {
- stepsToNextCorner += 1;
- }
- }
- }
- return Math.abs(x) + Math.abs(y);
- }
- const input = 325489;
- const output = getStepsToData(325489);
Add Comment
Please, Sign In to add comment