Are you participating in the Advent of code this year?
If you don't know what the advent of code is, it's a website where you'll find a daily challenge (every day it gets harder). It's a really fun event, you should participate!
I try to solve the exercises using either JavaScript or TypeScript and will share my solutions daily (with one day delay so no one can cheat!). I only share the solution for the second part.
Fun exercise today! I panicked a bit with that "angle" thing, but then I realised it was always 90°, which made it pretty straightforward.
Here is my solution for day #12:
const Command = { North: 'N', South: 'S', East: 'E', West: 'W', Left: 'L', Right: 'R', Forward: 'F', } function addTo(state, command, value) { if (command === Command.East) return { ...state, wpx: state.wpx + value } if (command === Command.West) return { ...state, wpx: state.wpx - value } if (command === Command.North) return { ...state, wpy: state.wpy - value } if (command === Command.South) return { ...state, wpy: state.wpy + value } } function rotate(state, command, param) { if (param === 0) return state if (command === Command.Left) return rotate({ ...state, wpy: 0 - state.wpx, wpx: state.wpy }, command, param - 90) if (command === Command.Right) return rotate({ ...state, wpx: 0 - state.wpy, wpy: state.wpx }, command, param - 90) } function execute([command, param], state) { if (command === Command.Forward) return { ...state, x: state.x + param * state.wpx, y: state.y + param * state.wpy } if (command === Command.Right || command === Command.Left) return rotate(state, command, param) return addTo(state, command, param) } const resultState = input.reduce( (state, command) => { return execute(command, state) }, { x: 0, y: 0, wpx: 10, wpy: -1, }, ) Feel free to share your solution in the comments!
Photo by Markus Spiske on Unsplash
Top comments (0)