Project website: Advent of Code.

I started on these puzzles on 7 Dec 2015. So far I’ve completed all of them, all but a few on the same day they were posted.

I use Perl for all the solutions.

Most assume the input data is in a file called
`input.txt`

in the same directory as the file. Some require extra
modules from CPAN.

#### A note on scoring

I score my problems to mark where I’ve finished a solution myself or given up and looked for hints. A score of 2 means I solved both the daily problems myself, a score of 1 means I looked up a hint for one of the problems, and a zero score means I didn’t solve any of the problems myself.

Final score: **43** / 50.

Days 1 to 4 - Day 5 - Day 6 - Day 7 - Day 8 - Day 9 - Day 10 - Day 11 - Day 12 - Day 13 - Day 14 - Day 15 - Day 16 - Day 17 - Day 18 - Day 19 - Day 20 - Day 21 - Day 22 - Day 23 - Day 24 - Day 25

#### Days 1 to 4

- Day 1 — Not Quite Lisp - Day 1 - complete solution. Score: 2.
- Day 2 — I Was Told There Would Be No Math - my solution. Score: 2.
- Day 3 — Perfectly Spherical Houses in a Vacuum - part 1, part 2. Score: 2.
- Day 4 — The Ideal Stocking Stuffer - my solution. Score: 2.

#### Day 5 — Doesn’t He Have Intern-Elves For This?

I had to get help with part 2 here, found a regexp in the daily solutions thread for this day.

Score: 1.

#### Day 6 — Probably a Fire Hazard

These could definitely be faster, both run in around 30s.

Score: 2.

#### Day 7 — Some Assembly Required

Had to scrounge around for tips on how to solve this. I had the basic idea down but the problem was keeping track of the solutions as I iterated around.

Score: 0.

*Update 2017-12-28* Day 7 - alternative complete solution

#### Day 8 — Matchsticks

Easily the most boring of the problems so far.

Score: 2.

#### Day 9 — All in a Single Night

Essentially the travelling salesman
problem
but the number of destinations is small enough to brute-force
easily. Uses the
Algorithm::Combinatorics
module. Output is a list of permutations with the total travelling
distance prepended, so just use `sort -n`

to find the answer from the
output.

*Update 2017-12-28* Day 9 - alternative complete solution. This solution removes the need to sort an output file.

Score: 2.

#### Day 10 — Elves Look, Elves Say

Another computationally expensive problem but even part 2 runs in under 1 minute for me.

Submitted 3h25m after puzzle release.

*Update 2017-12-28* Day 10 - alternative complete
solution. Much
faster regex-based solution from Rosettacode.

Score: 2.

#### Day 11 — Corporate Policy.

So far my favorite problem!

Submitted 5h56m after puzzle release.

Score: 2.

#### Day 12 — JSAbacusFramework.io.

Another good puzzle. Uses the JSON module.

Submitted 9h25m after puzzle release (I blame family commitments on weekends!).

Score: 2.

#### Day 13 — Knights of the Dinner Table.

This is a modified day 9 with bidirectionally. Even part 2 which adds another element to the permutation finishes very quickly using brute force.

Submitted 5h03m after puzzle release.

Score: 2.

#### Day 14 — Reindeer Olympics.

A troll! The immediate brute force approach is to simply advance time 1s at a time and check the “position” of each deer at that time. But this is “obviously” dumb so I used a quicker approach for part 1. Part 2 made me regret it…

Submitted for 2 stars 4h04m after puzzle release.

Day 14 - complete solution with fancy scoreboard

Score: 2.

#### Day 15 — Science for Hungry People.

A combination of outside factors and frustration at getting my indexes right made this a tedious slog.

Submitted for 2 stars 9h45m after puzzle release.

Score: 2.

#### Day 16 — Aunt Sue.

A fun one. Submitted for 2 stars after 2h37m.

Score: 2.

#### Day 17 — No Such Thing as Too Much

Tried a recursive approach first, but got stuck for the part 2 and looked in the daily thread for inspiration. Figured out how to use combinations by looking at other’s code.

Submitted for 2 stars after 6h18m.

Score: 1.

#### Day 18 — Like a GIF For Your Yard

Conway’s Game of Life! I’ve never coded this before so it was a fun exercise.

I tried using arrayrefs first but got tripped up by the deep copy (`dclone`

in the code) and decided to go for a hash of hashes instead. I think this contributes to the slow execution time of ~15s.

Submitted for 2 stars after 6h00m.

Score: 2.

#### Day 19 (Saturday) — Medicine for Rudolph

A tough one! I solved part 1 no problems but had to hunt around for hints for part 2.

Day 19 - part 1. Day 19 - part 2 alternative solution.

Score: 1.

#### Day 20 (Sunday) — Infinite Elves and Infinite Houses

Lack of time and impatience led me to look for hints for this. I had
the right initial idea but thought looking for divisors of an integer
without the `PARI`

package would be too slow, and I have yet to find a
way to install that on the machine I’m using.

In the end it didn’t matter but I wanted this done.

Full credits in source.

Score: 0.

#### Day 21 — RPG Simulator 20XX

I went for a straightforward solution of generating all combos of items and then running a simulated battle with each.

Score: 2.

#### Day 22 — Wizard Simulator 20XX

Not a very good solution, relies on brute force to simulate all possible spell casts and then prints out a win or loss. Note that I had to run it for 5M iterations to get the answer to part 2. This is the only problem I didn’t finish in the same day as it was released (apart from the 7 first ones).

Score: 2.

#### Day 23 — Opening the Turing Lock

Straightforward apart from the slightly ambigious `jio`

instruction —
read carefully what it means.

Score: 2.

#### Day 24 (Christmas eve) — It Hangs in the Balance

I tried to finesse the answer by hand first but it didn’t simply work to manually adjust the packages to get desired answer. Instead I checked valid combinations, but with the following assumptions/optimizations:

- I sorted the packages in descending order to check those combinations first.
- I assumed the answer wouldn’t contain more than 6 elements, so just checked combinations up to that value of
`k`

. - I didn’t bother to confirm the remaining packages would sum correctly.

Runs in about 2s.

Score: 2.

#### Day 25 (Christmas day) — Let It Snow

Straightforward iterative solution. Runs in over half a minute, those with CS backgrounds used modular exponentiation and got much faster results.

Score: 2.