Day 3
This commit is contained in:
parent
4458f8021d
commit
64261b54f5
|
@ -0,0 +1,63 @@
|
|||
defmodule Day3 do
|
||||
@example """
|
||||
..##.......
|
||||
#...#...#..
|
||||
.#....#..#.
|
||||
..#.#...#.#
|
||||
.#...##..#.
|
||||
..#.##.....
|
||||
.#.#.#....#
|
||||
.#........#
|
||||
#.##...#...
|
||||
#...##....#
|
||||
.#..#...#.#
|
||||
"""
|
||||
|
||||
def part1(example \\ false) do
|
||||
count_trees(example, {3, 1})
|
||||
end
|
||||
|
||||
def part2(example \\ false) do
|
||||
one_one = count_trees(example, {1, 1})
|
||||
three_one = count_trees(example, {3, 1})
|
||||
five_one = count_trees(example, {5, 1})
|
||||
seven_one = count_trees(example, {7, 1})
|
||||
one_two = count_trees(example, {1, 2})
|
||||
|
||||
one_one * three_one * five_one * seven_one * one_two
|
||||
end
|
||||
|
||||
def count_trees(example, slope) do
|
||||
example
|
||||
|> parse_input()
|
||||
|> count_trees_for_slope(slope)
|
||||
end
|
||||
|
||||
def parse_input(example) do
|
||||
if(example, do: @example, else: File.read!("lib/day3/input.txt"))
|
||||
|> String.trim()
|
||||
|> String.split("\n")
|
||||
|> Enum.map(fn line ->
|
||||
line
|
||||
|> String.codepoints()
|
||||
|> Enum.map(fn
|
||||
"#" -> 1
|
||||
_ -> 0
|
||||
end)
|
||||
|> Stream.cycle()
|
||||
end)
|
||||
end
|
||||
|
||||
def count_trees_for_slope(lines, slope) do
|
||||
do_count(lines, slope, 0, 0)
|
||||
end
|
||||
|
||||
def do_count([current | rest], {dx, dy} = slope, x, trees) do
|
||||
rest = Enum.drop(rest, dy - 1)
|
||||
do_count(rest, slope, x + dx, trees + Enum.at(current, x))
|
||||
end
|
||||
|
||||
def do_count([], _, _, trees) do
|
||||
trees
|
||||
end
|
||||
end
|
|
@ -0,0 +1,323 @@
|
|||
.#....#..##.#..####....#.......
|
||||
......#..#....#....###......#.#
|
||||
#..#.....#..............##.#.#.
|
||||
#.#...#....#...#......##..#..#.
|
||||
...#..#.##..#..#........###.#.#
|
||||
...#.#..........#.........##...
|
||||
...#.#....#.#....#..#......#...
|
||||
..##.#.....#.......#.###..#..##
|
||||
..#.......#.......#....##......
|
||||
....##........##.##...#.###.##.
|
||||
#.......#.......##..#......#...
|
||||
..##.............##.#......#...
|
||||
...#.####....#.....#...##......
|
||||
.............##.#......#.......
|
||||
..#...#....#......#....#.......
|
||||
..#....#..#............#.......
|
||||
##...#..#........##..#......#..
|
||||
##........##........#.#.......#
|
||||
#.......#........#.#..#....###.
|
||||
.....#..#.#..........##...#....
|
||||
..##...#......#.#...#..#...#...
|
||||
##.##...#......#....#....#...#.
|
||||
#.......#..#.#..#....#..###.#.#
|
||||
#.............#.#....#..#.#....
|
||||
...#.......###.#.##.##.#...#..#
|
||||
.##.......##..##...#..###......
|
||||
.......#.#.#.#..####..#..#..#..
|
||||
...##......#.#.##.###....#.###.
|
||||
###......###......#.#####..#...
|
||||
..#........##..#..##.##..#...#.
|
||||
.....##..#...#..#.##.....#.#...
|
||||
#......#.##....#..##.#....#.#..
|
||||
##.#.##..#................#....
|
||||
......#.#....#......##.....#...
|
||||
..#...##..#..#...#..#.#..#.....
|
||||
........#.#.#.##...#.#.....#.#.
|
||||
#.#......#.....##..#...#.......
|
||||
..#.#......#...........###.....
|
||||
......##....#....##..#..#.#.#.#
|
||||
##....#.###...#......#..#...#..
|
||||
#.#.##....###...####.......#..#
|
||||
##...........#.....#........#.#
|
||||
.##.#..#.....#......#.......#..
|
||||
##..##..###....#.........##....
|
||||
..#..#..#.##...#.#...#........#
|
||||
#.##.###...#.......#...........
|
||||
.........#.................#...
|
||||
#.##...#.....#..##........#....
|
||||
....#.#...##...#...........#...
|
||||
.#.....#.#..#...##..##.....#...
|
||||
.#.....####....#..##..#........
|
||||
...#..#......##.#..##.#.#.#..#.
|
||||
.##.#.....#.....#...#.......##.
|
||||
......#..#..#......#...####....
|
||||
.......#......##..#..##.....#..
|
||||
......#.#..#...#..#.#..........
|
||||
....##.........#...............
|
||||
.#....#..##.....#....##.##.....
|
||||
#.#.....#...#....####....#.#...
|
||||
#.....#....#.#...#.............
|
||||
...#..#.....#....##..#..#......
|
||||
...#.#............#...........#
|
||||
###.#..#.#......#.....##.....#.
|
||||
####....#....###.....#..#.#####
|
||||
.###..#...#.#..#......##.#.#.#.
|
||||
.....#.##.#....#..##....#..#..#
|
||||
...#....#...##.....#......#.#..
|
||||
....#...#....#...#....#.....#.#
|
||||
.#.....#.....#.#..#......#..#..
|
||||
..#..##....##.##....#.....##...
|
||||
#..##...#.##...#..#.#.#.....#..
|
||||
...#..##.#..#....#.#....######.
|
||||
..........#..#.....#....#...##.
|
||||
#.#####.#.###..#.....#.........
|
||||
#....#......#..#.#.##.##..###..
|
||||
..#...###.#.#....##.##...##....
|
||||
.......#....#..#...##......#...
|
||||
...#.#...#..#.....#..##.#......
|
||||
###..##...........#............
|
||||
..#....#.##....#.#..##...#.....
|
||||
##....#...#....#.....#.#..##...
|
||||
..............#.##.#..#..##.###
|
||||
......#..#..#..#.#....###...##.
|
||||
.#...#..#.#.#....#..........#..
|
||||
..#.#.....#..#...........#.##..
|
||||
...#.#......#......#..#..#.#...
|
||||
...#....#.#.#.....#...#.##..#..
|
||||
.#.#..#...#........##.......#..
|
||||
##..........#..#...#....###.#..
|
||||
#.....###......#..#.#.#....#.#.
|
||||
..###.......#.#...............#
|
||||
#....#.....#.#......#..##.##...
|
||||
#.##.#.#....#..#.#...#.#...#..#
|
||||
#....#..#...........#.......#..
|
||||
...#.####.....#.........###.##.
|
||||
......#..#.....#..........#..#.
|
||||
#...#.#..####...#...#.#.##...##
|
||||
.##.........#......#.#.#.......
|
||||
.......##...##.##....###...##..
|
||||
...#..#....#..#.#.#.....#.#....
|
||||
#....#.#.#.......##..###..##...
|
||||
......#............#.#...#..#..
|
||||
#.#.....#......#...#.......###.
|
||||
...#.#................#...#....
|
||||
.....#......#.#..#...##.#.#...#
|
||||
#....#.#..#..#..##..#.##..#....
|
||||
#.................#..#....#....
|
||||
..#....#.......####....###.....
|
||||
.#..#.#.#...###..#...#..###....
|
||||
..#..#.#......#.###..........#.
|
||||
.....#......#.......##....##.#.
|
||||
.#....#........#.#.##.#........
|
||||
#.#..##..#..#.#...####....##...
|
||||
...#....#.#..#...#..........#..
|
||||
.#.....#.##....#...##..........
|
||||
....##....#.....#.....#...#.###
|
||||
.#...##.#.#..##..#...#.#..#..#.
|
||||
..#.......#.##.....#.#........#
|
||||
...#...#.....##..#.#.#....#....
|
||||
...#.....#.......##.........#.#
|
||||
.##.....#..#.#...#.#...#.#...#.
|
||||
...........#...#.###..#...#..#.
|
||||
#.##........#..###.##...####...
|
||||
.#.....#.#...##...#..#..#...##.
|
||||
..#....#..#...#.....#.....##...
|
||||
..###..#.#.....##........#.##..
|
||||
.#.#..##........#.##....#..#.##
|
||||
.####.#..##..#.#..#....##....#.
|
||||
.##....##...#.#........#.......
|
||||
....#..#..#...#..#..#..#.#.....
|
||||
...#......................#....
|
||||
#.....#.#....#..#..#.#..#....#.
|
||||
##.....#.....##..........###...
|
||||
.#..#..............#...##.#.#.#
|
||||
...#...#.#.............#.#..#.#
|
||||
..#.....#.......#......#.#.....
|
||||
.###.#..#..#..#.#..#.....#.....
|
||||
.....##..##...##.......#....###
|
||||
.#........###...##..#....##....
|
||||
#....#.#......##..#....#.##..#.
|
||||
#....#.#...#........##...###...
|
||||
.#.....#...#.###....#.##.#.####
|
||||
###......#....#...#....##..#..#
|
||||
##....#..###......#...#.#.#....
|
||||
..........#......##.#..#.......
|
||||
.#..#......###.........##...#..
|
||||
....#......#....#.........#.#.#
|
||||
##.#.#...#.#...#...#..#......#.
|
||||
....#.##.........#..#.....##.#.
|
||||
........#...#..#.#.#.#.....##..
|
||||
..#......#.#.#..#.....##.......
|
||||
..............#....#....##.#..#
|
||||
....#.#.....#....#.#.###.#....#
|
||||
..#..........#..#......#.##..#.
|
||||
...#...#.#.............#..#....
|
||||
#.......#..#..##.........##..#.
|
||||
..##..#............#.....#.....
|
||||
....#.#..##...#.#..#.........#.
|
||||
........#.......#.##....#....#.
|
||||
...#.....#.#.....#.#....#......
|
||||
..#......##.#.............#.#.#
|
||||
#.#.............#.#.....#......
|
||||
.##....##.#.....#....#...##....
|
||||
.#.#....##....#.....##.........
|
||||
...#.....#.....#.....#..#.###..
|
||||
.......#....#...##.#...#...#..#
|
||||
..#.#.......#...###.#...#....#.
|
||||
.....###..##....###.#.##.......
|
||||
....#..................##.#.##.
|
||||
.#.......###.##...#.#.....#....
|
||||
....#....##...##.....#.#...#..#
|
||||
#..#.....#......##...#....#....
|
||||
#..##.........#.....#...#......
|
||||
...#..##.......##......#..#####
|
||||
.#..###.###.#.##........#......
|
||||
.#...#....#....#.#....#...##...
|
||||
##........#....#.........##..#.
|
||||
.#.....##............#.#.......
|
||||
....#....#...........###.....##
|
||||
.#......#.#.#..#....#.#.....##.
|
||||
......#.##.#..##....#.#.#..#...
|
||||
#....#......#...#..####........
|
||||
......#..#..##..#.......#.#..#.
|
||||
##....##.###.#...#.##.#..#.###.
|
||||
.#.........#...##...#.#......#.
|
||||
..#.#...........####.#....##.##
|
||||
.....#.#..##.#...###...#..#.#..
|
||||
...#..#..##.#...#.....#.##...##
|
||||
..##......##..........#..###...
|
||||
.#......##.....#.##....#.#.##.#
|
||||
...#.......##..##.....#....#...
|
||||
.##...#...#....#..#............
|
||||
#..#....#...........#..........
|
||||
......#...#.#.......#...#.##..#
|
||||
..#.###..#.....#.....#..#.....#
|
||||
....#....#..........##....#..#.
|
||||
.......##.#.#.#......#....#...#
|
||||
####..#.###........#..#......#.
|
||||
#........##.#.#.#.............#
|
||||
.#......#......#..#.##.....#...
|
||||
.....##.##......##.#.....#.#.#.
|
||||
.......##.#.....##.......#.#.#.
|
||||
.#.#..#.#..#.##...#.#....#.#..#
|
||||
.#..##....#..#...##.......#..#.
|
||||
.#.#..#.......#................
|
||||
#........#.#.#......#.#.#.#....
|
||||
##......#...#..##.#...##.##....
|
||||
##.#..#...........##...#..###..
|
||||
......#.####...#........#.#.#..
|
||||
...#........##..###.#.#...#...#
|
||||
.#.....##..#......##......###..
|
||||
..#.#...#......#..#..##.#.....#
|
||||
#....#..#.#..........#...#.....
|
||||
.#......#.##..###..#.#....#..##
|
||||
.......#.......#..#..#......#..
|
||||
..##.....##.#..#..#.....##.....
|
||||
........#.##...#.#.#..#..#..#..
|
||||
...#.######.........#.....#..##
|
||||
.#.#............#....#.........
|
||||
#...#....###.#......#.#........
|
||||
#.........#....#...##..........
|
||||
....#...........#.###.#...###..
|
||||
.........#........#.#.#..#...#.
|
||||
.#.......#.#.....#.#.....#.##..
|
||||
.....#.......#.....#.#.#.......
|
||||
#.##..#..##.......#...#......#.
|
||||
.###.....##...##.#...##.##.#.#.
|
||||
...#......##..##............#.#
|
||||
...#......................#..##
|
||||
#..#..#................#...#...
|
||||
#..#....#.#.#...##.......#..#..
|
||||
....#.#..###.##...#..#.###..#..
|
||||
..#...#....####.#............#.
|
||||
......#....#.#...#.#.#.........
|
||||
#...#........#.....##..###.#..#
|
||||
#....#...#...##...#..#....##...
|
||||
#..#...#..#.......#.#..##.#..#.
|
||||
#.#..........#...........##....
|
||||
.#...###...#......#.......#.#.#
|
||||
.........#.........#...#...##..
|
||||
##.#..###......##..#.....#..#..
|
||||
....##...............#.....#...
|
||||
.....#.....###.#.....#.#.......
|
||||
....#..#......###..#..##..#....
|
||||
......................#.....#..
|
||||
..#..#...##....##....#........#
|
||||
..#....#...#...#.......#.....#.
|
||||
...##.#.#.##......#.#.#.#.####.
|
||||
.###...#..#......#.#..#........
|
||||
#..#...##.#..#..##..##....#...#
|
||||
...#...#..#..#..#........#..##.
|
||||
.##....#.##.#....#...#.#.#....#
|
||||
#..#....#..#....#.......##..#.#
|
||||
...#.#....####...........#...#.
|
||||
#...#####...#.#..#......#...#.#
|
||||
.##....#.#.#..#......#..##.....
|
||||
..........#..#.#.#.....##......
|
||||
.....#....#..................#.
|
||||
.........#...#...#....#..###...
|
||||
.#.#.#....#....................
|
||||
......##............##.###..#..
|
||||
#.#...#........####.##..#.#.##.
|
||||
#........#.#.#.#..#.##.....#...
|
||||
......####..#.##.......#....#..
|
||||
.........#...#...#.....#.......
|
||||
..##.....#...#...#.....##.....#
|
||||
....#...##....#.....#..#..##.##
|
||||
..#.........##...##..###..#....
|
||||
#....#.#.........##.###.#...##.
|
||||
.##...#....#..#..#.#....##.....
|
||||
##..#..#..#...........#.##....#
|
||||
....#..........#...#..#.....#..
|
||||
........###..#..#.#.#.....##...
|
||||
#...#...#..###............###..
|
||||
..#.....#.#.#..#..#.#..#......#
|
||||
..#...##..#....#...#......#....
|
||||
#....#........##.....#..##....#
|
||||
#.....#.#.#..#.......##.#.#.##.
|
||||
..##...#...#.....#..........#..
|
||||
##.....#....#......#..........#
|
||||
......#..#..........#.#..####..
|
||||
......#...#............##...##.
|
||||
..#.......##.......#...###.###.
|
||||
.#..#.#.#...#..##.#......#.#...
|
||||
.##.....##.#.#...#.##.........#
|
||||
#.#.######...........#.#####.#.
|
||||
........#.##...##....##.#.##.#.
|
||||
....#......#.....#.....###...##
|
||||
#..............#.#....#.#....#.
|
||||
....#..###.#.........##.#.#....
|
||||
..#.#.#..##....####..........#.
|
||||
...#..#.......#................
|
||||
...#....#..............#....#..
|
||||
.....#...#...#....#.#.#..#...#.
|
||||
......##.............###.##..##
|
||||
.#...#.#..#......#..#.##.......
|
||||
##.....#.....#.##...#....#.....
|
||||
..#..#.#.#.#.#..........#..###.
|
||||
##..........#........#....#.#..
|
||||
.....#...#........#.#..###....#
|
||||
.###.#........#.##......#.#...#
|
||||
#...##....#....#....##.#.#.....
|
||||
.....#.#............#..........
|
||||
..#.##....................#....
|
||||
.....#..#..#.#..#.##.......#...
|
||||
.....###......#......##......##
|
||||
#.....#.#.......##.......#...#.
|
||||
.#.#...#......#..###...#.....#.
|
||||
#.#..#...#..##.....#...#.#..#..
|
||||
.....#.#..........#..#.........
|
||||
.###..##..##.....#...#...#..##.
|
||||
#...#.#....#.......##..#.......
|
||||
###...#.#.#..#.......#......#..
|
||||
....##........#..........##....
|
||||
............#....#...........#.
|
||||
#..#.#....##..#.#..#......##...
|
||||
.###....##...#....##..........#
|
||||
.###........#........###.....#.
|
||||
...#...#.#......#...#....#.....
|
||||
.###.......#.........#.........
|
||||
....##.#......#...###......##.#
|
||||
.###...#..##.....##.......#....
|
||||
.#.#...#..#.##....#........#...
|
Loading…
Reference in New Issue