## Source: Blizzard Basin

## Part 1

Given a map with a series of moving walls (that wrap when the hit the edges of the simulation), calculate the fastest route from the top left to the bottom right.

Given a map with a series of moving walls (that wrap when the hit the edges of the simulation), calculate the fastest route from the top left to the bottom right.

Implement a cellular automaton with the following rules:

- If you have no neighbors, don’t move (
*important, I forgot this one for a while*) - Otherwise:
- Calculate a potential move:
- If you have no neighbors to the north, move north
- If not, check likewise for south, then west, than east

- If no other agent is moving to the same space, move to your potential move
- Otherwise, don’t move

- Calculate a potential move:
- On each frame, rotate the order the directions are checked in (
`NSWE`

,`SWEN`

,`WENS`

,`ENSW`

,`NSWE`

, …)

Given a series of given a series of

`blueprints`

, each of which gives instructions for how to build a single`robot`

from a collection of`materials`

that in turn will produce one of a given`material`

per turn, determine the best order of builds to maximize your`geode`

(the most valuable`material`

) production for each`blueprint`

given a time limit of`24 minutes`

.

Given a graph of nodes, some of which have a

`pressure`

(per tick output value) and an agent that can move through the graph and activate specific nodes (so that they output their per tick value every future tick), what is the maximum total output possible in 30 steps?

There are a collections of

`Sensor`

s and`Beacon`

s. As input, you are given the`Beacon`

closest to each`Sensor`

(using Manhattan Distance). If a`Beacon`

is not closest to any sensor, it will not appear in this list. Calculate how many points in the given row (`y=2000000`

) cannot contain a`Beacon`

.

Given a series of walls as input, run a falling sand simulation until any new sand falls of the map. Count how many grains of sand we end up with.

Given a height map, find the shortest path between two points such that the path can descend any distance but can only climb by a maximum of 1.

Given a grid of numbers, count how many of these numbers have a direct path in any cardinal direction to the edge of the grid.

Rust, yet again! Let’s take what we did last time with Solving Sudoku (again) and improve the code structure a bit more.

Goals:

- Create a ‘Solver’ struct that can maintain state (such as how many states we’ve visited, how much time we’ve spent)
- Track the above stats
- Turn the ‘Solver’ into an iterator which will iterate through given solutions (a single call will give the first solution or you can run through the iterator to get all of them)

If you’d like to follow along, I’ve started uploading the code here: https://github.com/jpverkamp/rust-solvers

More Rust! This time, I want to go back to my post on A Generic Brute Force Backtracking Solver. For one, because I’m learning Rust. For two, because there is a crate specifically for `im`

mutable data structures. And for three, because I expect it will be much faster. We shall see!