Robert Mion

Posted on

# Bathroom Security

## Part 1

1. Setting up the data structures
2. 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) =>
? [ coords[0] + map[path][0],
coords[1] + map[path][1] ]
: coords,
key.slice()
)
}, ""
)
``````

Part 1: solved!

## Part 2

#### 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]][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()
)
}, ""
)
``````

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!