Powered by AppSignal & Oban Pro
Would you like to see your link here? Contact us

Day 03

2020/day03.livemd

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(&amp;Toboggan.slide(slope, &amp;1))
|> Enum.product()
1666768320