Advent of Code 2015 Day 2
Part 1
- Oh, there will be plenty of math.
- Using several familiar tools in my toolbox
Oh, there will be plenty of math.
Much to my delight, a majority of the math throughout Advent of Code was in celebration of patterns underlying various scientific, arithmetic or algorithmic formulas and proofs.
Using several familiar tools in my toolbox
-
reduce()
to accumulate a total -
split()
to turn a string into an array -
map()
to coerce or manipulate data -
array destructuring
to concisely extract and store multiple values -
sort()
to, well, sort numbers -
slice()
to extract a subset of items from an array
My algorithm in JavaScript:
input.reduce(
(sqft, box) => {
let [l, w, h] = box.split('x').map(Number)
let smallestArea = [l, w, h]
.sort((a, b) => a - b)
.slice(0, 2)
.reduce((a, c) => a * c)
return sqft += 2*l*w + 2*w*h + 2*h*l + smallestArea
}
, 0)
Part 2
A minor mathematical tweak
- A shorter equation
- And a relatively unchanged algorithm
My algorithm in JavaScript:
input.reduce(
(sqft, box) => {
let [l, w, h] = box.split('x').map(Number)
let smallestPerimeter = [l, w, h]
.sort((a, b) => a - b)
.slice(0, 2)
.map(el => el * 2)
.reduce((a, c) => a + c)
return sqft += l*w*h + smallestPerimeter
}
, 0)
Both parts, a year ago
This was my working algorithm in JavaScript when I first solved this puzzle:
function dayTwoPart1(input) {
return input.map(box => wrappingPaperFor(box))
.reduce((acc, curr) => { return acc + curr }, 0)
}
function dayTwoPart2(input) {
return input.map(box => ribbonFor(box))
.reduce((acc, curr) => { return acc + curr }, 0)
}
function wrappingPaperFor(box) {
return surfaceAreaFor(box) + slackFor(box)
}
function surfaceAreaFor(box) {
let [l, w, h] = box.split("x").map(i => +i)
return (2 * l * w) + (2 * w * h) + (2 * h * l)
}
function slackFor(box) {
let sortedBox = box.split("x").map(i => +i).sort((a,b) => a - b)
return sortedBox[0] * sortedBox[1]
}
function ribbonFor(box) {
let [s1, s2, s3] = box.split("x").map(i => +i).sort((a,b) => a - b)
return (s1 + s1 + s2 + s2) + (s1 * s2 * s3)
}
- It's all very straightforward
- Almost to its detriment
- Then again, this puzzle did require a lot of straightforward math
- Much like with Day 3, I'm very proud of the code I wrote my second time around
I did it!!
- I solved both parts!
- At first in a very separated, functional approach...then again in a more chained-together, eloquent approach!
While the math in this puzzle wasn't too intriguing, it served as a callback to all of the other puzzles that featured wonderfully-intriguing math.
One day left!
Top comments (0)