AoC 2017 Day 22: Langton's Ant

Source: Sporifica Virus

Part 1: Implement a cellular automaton on an infinite grid of . and # pixels such that:

  1. Start at (0, 0), facing Up
  2. Repeat:
    • If the cursor is on . swap it to # and turn Left
    • If the cursor is on # swap it to . and turn Right
    • Either way, after turning, move forward once

After 10,000 iterations, how many pixels were turned from . to #?

AoC 2017 Day 21: Fractal Expander

Source: Fractal Art

Part 1: Start with an input image made of . and # pixels. For n iterations, break the image into blocks:

  • If the current size is even, break the image into 2x2 chunks and replace each with a 3x3 chunk
  • If the current size is odd, break the image into 3x3 chunks and replace each with a 4x4 chunk

The replacement rules will be specified in the following format (example is a 3x3 -> 4x4 rule):

.#./..#/### => #..#/..../..../#..#

In that example, replace this:


With this:


Any rotation or reflection of a chunk can be used to match the input of a replacement rule.

After n = 18 iterations, how many # pixels are there?

Feet of Clay

Feet of Clay’s central story tackles one key idea: What makes a person a person?

In this case, the idea is personified by the golems–a constructed race of humanoids made of clay, animated by a religious text stored inside of their head, and bound to service (inspired by Jewish folklore). According to just about everyone, golems aren’t alive. They are nothing more than tools.

AoC 2017 Day 19: Networkout

Source: A Series of Tubes

Part 1: Take a network diagram of the following form:

    |  +--+    
    A  |  C    
    |  |  |  D
    +B-+  +--+

Starting at the single node at the top and following the lines, what order would the nodes be visited in?

AoC 2017 Day 18: Duetvm

Source: Duet

Part 1: Create a virtual machine with the following instruction set:

  • snd X plays a sound with a frequency equal to the value of X
  • set X Y sets register X to Y
  • add X Y set register X to X + Y
  • mul X Y sets register X to X * Y
  • mod X Y sets register X to X mod Y
  • rcv X recovers the frequency of the last sound played, if X is not zero
  • jgz X Y jumps with an offset of the value of Y, iff X is greater than zero

In most cases, X and Y can be either an integer value or a register.

What is the value recovered by rcv the first time X is non-zero?

SSH Config ProxyCommand Tricks

Working in security/operations in the tech industry, I use SSH a lot. To various different machines (some with hostnames, some without), using various different users and keys, and often (as was the case in my previous post) via a bastion host. Over the years, I’ve collected a number of SSH tricks that make my life easier.

AoC 2017 Day 17: Spinlock

Source: Spinlock1

Part 1: Start with a circular buffer containing [0] and current_position = 0. For n from 1 up to 2017:

  1. Step forward steps (puzzle input)
  2. Input the next value for n, set current_position to n, increment n
  3. Repeat

What is the value after 2017?

It’s a bit weird to describe, but the given example helps (assume steps = 3):

0 (1)
0 (2) 1
0  2 (3) 1
0  2 (4) 3  1
0 (5) 2  4  3  1
0  5  2  4  3 (6) 1
0  5 (7) 2  4  3  6  1
0  5  7  2  4  3 (8) 6  1
0 (9) 5  7  2  4  3  8  6  1

Boundary Lines

After getting tossed into the world of the supernatural in Boundary Crossed, Lex is back and starting to learn just why everyone seems to be out to get her in Boundary Lines.

Someone is stirring up local magic, brining back magical beasties from an age long gone and driving the (semi-)local werewolf mad. We get a good amount of world building, learning a fair bit more about the werewolves and finally seeing a second boundary mage–even if she died a long time ago. We get a bit more characterization of the other witches and vampires, a bit more on the local politics and tensions between the various supernatural factions. Neat worldbuilding all around and a few decent plot twists.

AoC 2017 Day 16: Swing Your Partner

Source: Permutation Promenade

Part 1: Running on the string a...p apply a series of the following commands:

  • sX rotates the string right by X positions
  • xX/Y swaps positions X and Y
  • pA/B swaps the letters A and B no matter their positions