Advent of Code 2016 Day 2
Part 1
- Setting up the data structures
- A double-
reduce()r to solve the puzzle
Setting up the data structures
My map for traversing the array based on the direction:
{ 'U': [-1,0], 'R': [0,1], 'D': [1,0], 'L': [0,-1] } My data structure for the keypad:
[ [1,2,3], [4,5,6], [7,8,9] ] 5 is at [1,1]
A double-reduce()r to solve the puzzle
The iteration portion of my algorithm in pseudocode:
For each line from the input Accumulate a code - starting as an empty string For each character in the line Accumulate a 2-element array of coordinates If the next location is a valid cell Return the coordinate of the next location Else Return the coordinate of the current location Add the value at the final cell to the string The iteration portion of my algorithm in JavaScript:
input.reduce( (code, line) => { key = line.reduce( (coords, path) => keypad[coords[0] + map[path][0]] && keypad[coords[0] + map[path][0]][coords[1] + map[path][1]] ? [ coords[0] + map[path][0], coords[1] + map[path][1] ] : coords, key.slice() ) return code += keypad[key[0]][key[1]] }, "" ) Part 1: solved!
Part 2
Three updates and done!
Update 1: Expand the data structure
My data structure for the keypad:
[ [0, 0, 1, 0, 0], [0, 2, 3, 4, 0], [5, 6, 7, 8, 9], [0, 'A','B','C', 0], [0, 0, 'D', 0, 0] ] Update 2: Adjust the starting location
5 is at [2,0] now
Update 3: Add a clause to the array-cell-checking condition - checking for a value of 0
The iteration portion of my algorithm in JavaScript:
input.reduce( (code, line) => { key = line.reduce( (coords, path) => keypad[coords[0] + map[path][0]] && keypad[coords[0] + map[path][0]][coords[1] + map[path][1]] && keypad[coords[0] + map[path][0]][coords[1] + map[path][1]] !== 0 ? [ coords[0] + map[path][0], coords[1] + map[path][1] ] : coords, key.slice() ) return code += keypad[key[0]][key[1]] }, "" ) Part 2: solved!
I did it!!
- I solved both parts!
- Using nested
reduce()s again! - And using my tried and true array traversing techniques!
Bring on Day 1...and hopefully a strong end to an overall fun and relatively fast-solved year!
Top comments (1)
Some comments may only be visible to logged-in visitors. Sign in to view all comments.