Function advent_solutions::advent2017::day21::solve
[−]
[src]
pub fn solve(input: &HashMap<Grid, Grid>, iterations: usize) -> usize
The program always begins with this pattern:
.#.
..#
###
Because the pattern is both 3 pixels wide and 3 pixels tall, it is
said to have a size of 3.
Then, the program repeats the following process:
- If the size is evenly divisible by
2, break the pixels up into2x2squares, and convert each2x2square into a3x3square by following the corresponding enhancement rule. - Otherwise, the size is evenly divisible by
3; break the pixels up into3x3squares, and convert each3x3square into a4x4square by following the corresponding enhancement rule.
Because each square of pixels is replaced by a larger one, the image gains pixels and so its size increases.
Suppose the book contained the following two rules:
../.# => ##./#../... .#./..#/### => #..#/..../..../#..#
As before, the program begins with this pattern:
.#.
..#
###
The size of the grid (3) is not divisible by 2, but it is divisible
by 3. It divides evenly into a single square; the square matches the
second rule, which produces:
#..#
....
....
#..#
The size of this enhanced grid (4) is evenly divisible by 2, so that
rule is used. It divides evenly into four squares:
#.|.#
..|..
--+--
..|..
#.|.#
Each of these squares matches the same rule (../.# => ##./#../...),
three of which require some flipping and rotation to line up with the
rule. The output for the rule is the same in all four cases:
##.|##.
#..|#..
...|...
---+---
##.|##.
#..|#..
...|...
Finally, the squares are joined into a new grid:
##.##.
#..#..
......
##.##.
#..#..
......
Thus, after 2 iterations, the grid contains 12 pixels that are on.
let input = parse_input("\ ../.# => ##./#../... .#./..#/### => #..#/..../..../#..# "); assert_eq!(solve(&input, 2), 12);