Day 03
Mix.install([:kino_aoc])
Section
{:ok, puzzle_input} =
KinoAOC.download_puzzle("2020", "3", System.fetch_env!("LB_ADVENT_OF_CODE_SESSION"))
{:ok,
"....#...##.#.........#....#....\n#.......#...#...#.#............\n#..#..#.#.##....#.#........#...\n........##...................#.\n........#...##...#.#.###.......\n##............#...#.....#.##...\n...........#....###...#.....#..\n.......#......#..##..#.....#...\n..#.#..#....#.........#...#..#.\n.........##......#.....##..##..\n........#.....#....#..##......#\n..#..#.......#..............#..\n.....#.#.......................\n.#.#....#.........#............\n.......#.....#.###.............\n......##......#...........#..#.\n.#...............##...#........\n.....#..##........###.........#\n#...........#..#............#..\n.........#....#..#.#......#....\n.......#.........#..##.........\n.##.....#..................#...\n....#............#.#....#.....#\n..#....#...##....#...#.#...#...\n..........#................#.#.\n#...#.#.#.####..#.#..........#.\n..#...#.##......#...........#..\n..#.....#...#.......#......#..#\n..............#.......#........\n.#..#..........#.....#...#..#.#\n#........#...#......#.......#..\n#..................#...........\n..#...#........#...#..#........\n..............#.....#.....#..#.\n#.#.......#..............##.##.\n....#.#.....##....#...........#\n......#....#...#..#.......#....\n....#..#.#.....#..##.....#....#\n...........#.......#.#.#.......\n#.......#..##........#..#......\n.........#.##..#..............#\n...........#............###.#..\n..#.....#.....##...#.........#.\n....##............##........#..\n.....###..........#......##....\n#...##..#..#..........#........\n....#.....#.......#..#.#...##..\n.#....#........#.#.........#.#.\n##...#.#.....#......#..........\n.....##.....#....#.....###.#..#\n..............#..###..#...#..#.\n....#...#....#.............#.#.\n.#.........#.....#........#.##.\n....#.........#..........#.....\n.......#........#.#.#..........\n#........##....#.........#.....\n..##..........#....#.#...#....#\n#...#.#......#..##..........#.#\n.....#..#...#..#...............\n#...#..............#...........\n.#...#....#..##.....#....#.#...\n.#...#.......#...#..#.##....#..\n#....#........#....#...#.......\n#..#......#.....#.....#..##....\n......#.#....##....##..#...#...\n..#....#.#.###..............#..\n.#.##.......#.#.#..#...#..#....\n..#..........#.#....#..#.#....#\n..........#...#...#..........#.\n..........#.....#.#..#..#....##\n.#.#...##...#...........####...\n........##..#.#..........#.##.#\n#......###...........#...#.....\n..#.#....##.........##....#....\n#....#.##..##..#..#.....#.....#\n.##.....##....##....#.......#..\n#...#.....##....#..........#...\n............#.#.##....#....#...\n....#............#.....#......#\n....................#..........\n..#....................#..#....\n....#.....#........#..##...#...\n#.....#.#....................##\n.#....#.#.#...#..........#....#\n....#...#......#...#.....##...#\n.....#.........................\n.......#..#.#...#...#...#.....#\n...#......#.##.#...#..#...##.#.\n...........................#..#\n..#.#.....#........##..........\n....#...##........#.#.#..#...##\n..##.....#..###.........##.##..\n.#..#.....#...#.............#..\n#..............##...#....##....\n.##......#.#............#......\n.............##...#.#.......#..\n.........#..#..#...............\n........##......#....##........\n...#.........#.#.#.............\n#..........#......#......#..#..\n.............##.#.#..#.#.#...#.\n.....#.........#...............\n..##.#..#.....##..#........#.#.\n.#..........#.#.......#......##\n.#........................#....\n#....#....#...#..#......#......\n........#.......#......#.....#.\n.....#....##..#...###...#....#.\n....#.........#....#......#....\n.............#...#....#.......#\n.....#.........#..#.#..........\n.........#..#........#.#.#.....\n......#.##......#....#.#.##.#..\n.#...#.#...#...#.#......#....##\n.#................#......#.....\n#.#.#...............#..........\n.....#.#.......#...#........#..\n#...#.#.#.##..#...........#..#.\n.............###.........#....#\n.#.....#.......##....##.......#\n....#...#.......#.##.....#.....\n...........##.........#...#....\n..............#.#..#.....#..#..\n#.#...#..#.#.........#......#.#\n#.##.....##....#........#.#.#.#\n##.#.###.........##.......#..#.\n#.....#.....................#..\n.........##........#...........\n" <> ...}
slope =
puzzle_input
|> String.split("\n", trim: true)
["....#...##.#.........#....#....", "#.......#...#...#.#............",
"#..#..#.#.##....#.#........#...", "........##...................#.",
"........#...##...#.#.###.......", "##............#...#.....#.##...",
"...........#....###...#.....#..", ".......#......#..##..#.....#...",
"..#.#..#....#.........#...#..#.", ".........##......#.....##..##..",
"........#.....#....#..##......#", "..#..#.......#..............#..",
".....#.#.......................", ".#.#....#.........#............",
".......#.....#.###.............", "......##......#...........#..#.",
".#...............##...#........", ".....#..##........###.........#",
"#...........#..#............#..", ".........#....#..#.#......#....",
".......#.........#..##.........", ".##.....#..................#...",
"....#............#.#....#.....#", "..#....#...##....#...#.#...#...",
"..........#................#.#.", "#...#.#.#.####..#.#..........#.",
"..#...#.##......#...........#..", "..#.....#...#.......#......#..#",
"..............#.......#........", ".#..#..........#.....#...#..#.#",
"#........#...#......#.......#..", "#..................#...........",
"..#...#........#...#..#........", "..............#.....#.....#..#.",
"#.#.......#..............##.##.", "....#.#.....##....#...........#",
"......#....#...#..#.......#....", "....#..#.#.....#..##.....#....#",
"...........#.......#.#.#.......", "#.......#..##........#..#......",
".........#.##..#..............#", "...........#............###.#..",
"..#.....#.....##...#.........#.", "....##............##........#..",
".....###..........#......##....", "#...##..#..#..........#........",
"....#.....#.......#..#.#...##..", ".#....#........#.#.........#.#.",
"##...#.#.....#......#..........", ".....##.....#....#.....###.#..#", ...]
binary_slice("abc", 5, 1)
""
defmodule Toboggan do
def slide(slope, {dx, dy}) do
slope
|> Enum.take_every(dy)
|> Enum.reduce({0, 0}, fn row, {pos, count} ->
dc = if binary_part(row, rem(pos, byte_size(row)), 1) == "#", do: 1, else: 0
{pos + dx, count + dc}
end)
|> elem(1)
end
end
{:module, Toboggan, <<70, 79, 82, 49, 0, 0, 9, ...>>, {:slide, 2}}
Part 1
Toboggan.slide(slope, {3, 1})
254
Part 2
[
{1, 1},
{3, 1},
{5, 1},
{7, 1},
{1, 2}
]
|> Enum.map(&Toboggan.slide(slope, &1))
|> Enum.product()
1666768320