# Day 03 ```elixir Mix.install([:kino_aoc]) ``` ## Section ```elixir {: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" <> ...} ``` ```elixir slope = puzzle_input |> String.split("\n", trim: true) ``` ``` ["....#...##.#.........#....#....", "#.......#...#...#.#............", "#..#..#.#.##....#.#........#...", "........##...................#.", "........#...##...#.#.###.......", "##............#...#.....#.##...", "...........#....###...#.....#..", ".......#......#..##..#.....#...", "..#.#..#....#.........#...#..#.", ".........##......#.....##..##..", "........#.....#....#..##......#", "..#..#.......#..............#..", ".....#.#.......................", ".#.#....#.........#............", ".......#.....#.###.............", "......##......#...........#..#.", ".#...............##...#........", ".....#..##........###.........#", "#...........#..#............#..", ".........#....#..#.#......#....", ".......#.........#..##.........", ".##.....#..................#...", "....#............#.#....#.....#", "..#....#...##....#...#.#...#...", "..........#................#.#.", "#...#.#.#.####..#.#..........#.", "..#...#.##......#...........#..", "..#.....#...#.......#......#..#", "..............#.......#........", ".#..#..........#.....#...#..#.#", "#........#...#......#.......#..", "#..................#...........", "..#...#........#...#..#........", "..............#.....#.....#..#.", "#.#.......#..............##.##.", "....#.#.....##....#...........#", "......#....#...#..#.......#....", "....#..#.#.....#..##.....#....#", "...........#.......#.#.#.......", "#.......#..##........#..#......", ".........#.##..#..............#", "...........#............###.#..", "..#.....#.....##...#.........#.", "....##............##........#..", ".....###..........#......##....", "#...##..#..#..........#........", "....#.....#.......#..#.#...##..", ".#....#........#.#.........#.#.", "##...#.#.....#......#..........", ".....##.....#....#.....###.#..#", ...] ``` ```elixir binary_slice("abc", 5, 1) ``` ``` "" ``` ```elixir 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 ```elixir Toboggan.slide(slope, {3, 1}) ``` ``` 254 ``` ## Part 2 ```elixir [ {1, 1}, {3, 1}, {5, 1}, {7, 1}, {1, 2} ] |> Enum.map(&Toboggan.slide(slope, &1)) |> Enum.product() ``` ``` 1666768320 ```