this repo has no description
1<!-- livebook:{"persist_outputs":true} -->
2
3# Day 03
4
5```elixir
6Mix.install([:kino_aoc])
7```
8
9## Section
10
11<!-- livebook:{"attrs":"eyJhc3NpZ25fdG8iOiJwdXp6bGVfaW5wdXQiLCJkYXkiOiIzIiwic2Vzc2lvbl9zZWNyZXQiOiJBRFZFTlRfT0ZfQ09ERV9TRVNTSU9OIiwieWVhciI6IjIwMjAifQ","chunks":null,"kind":"Elixir.KinoAOC.HelperCell","livebook_object":"smart_cell"} -->
12
13```elixir
14{:ok, puzzle_input} =
15 KinoAOC.download_puzzle("2020", "3", System.fetch_env!("LB_ADVENT_OF_CODE_SESSION"))
16```
17
18<!-- livebook:{"output":true} -->
19
20```
21{:ok,
22 "....#...##.#.........#....#....\n#.......#...#...#.#............\n#..#..#.#.##....#.#........#...\n........##...................#.\n........#...##...#.#.###.......\n##............#...#.....#.##...\n...........#....###...#.....#..\n.......#......#..##..#.....#...\n..#.#..#....#.........#...#..#.\n.........##......#.....##..##..\n........#.....#....#..##......#\n..#..#.......#..............#..\n.....#.#.......................\n.#.#....#.........#............\n.......#.....#.###.............\n......##......#...........#..#.\n.#...............##...#........\n.....#..##........###.........#\n#...........#..#............#..\n.........#....#..#.#......#....\n.......#.........#..##.........\n.##.....#..................#...\n....#............#.#....#.....#\n..#....#...##....#...#.#...#...\n..........#................#.#.\n#...#.#.#.####..#.#..........#.\n..#...#.##......#...........#..\n..#.....#...#.......#......#..#\n..............#.......#........\n.#..#..........#.....#...#..#.#\n#........#...#......#.......#..\n#..................#...........\n..#...#........#...#..#........\n..............#.....#.....#..#.\n#.#.......#..............##.##.\n....#.#.....##....#...........#\n......#....#...#..#.......#....\n....#..#.#.....#..##.....#....#\n...........#.......#.#.#.......\n#.......#..##........#..#......\n.........#.##..#..............#\n...........#............###.#..\n..#.....#.....##...#.........#.\n....##............##........#..\n.....###..........#......##....\n#...##..#..#..........#........\n....#.....#.......#..#.#...##..\n.#....#........#.#.........#.#.\n##...#.#.....#......#..........\n.....##.....#....#.....###.#..#\n..............#..###..#...#..#.\n....#...#....#.............#.#.\n.#.........#.....#........#.##.\n....#.........#..........#.....\n.......#........#.#.#..........\n#........##....#.........#.....\n..##..........#....#.#...#....#\n#...#.#......#..##..........#.#\n.....#..#...#..#...............\n#...#..............#...........\n.#...#....#..##.....#....#.#...\n.#...#.......#...#..#.##....#..\n#....#........#....#...#.......\n#..#......#.....#.....#..##....\n......#.#....##....##..#...#...\n..#....#.#.###..............#..\n.#.##.......#.#.#..#...#..#....\n..#..........#.#....#..#.#....#\n..........#...#...#..........#.\n..........#.....#.#..#..#....##\n.#.#...##...#...........####...\n........##..#.#..........#.##.#\n#......###...........#...#.....\n..#.#....##.........##....#....\n#....#.##..##..#..#.....#.....#\n.##.....##....##....#.......#..\n#...#.....##....#..........#...\n............#.#.##....#....#...\n....#............#.....#......#\n....................#..........\n..#....................#..#....\n....#.....#........#..##...#...\n#.....#.#....................##\n.#....#.#.#...#..........#....#\n....#...#......#...#.....##...#\n.....#.........................\n.......#..#.#...#...#...#.....#\n...#......#.##.#...#..#...##.#.\n...........................#..#\n..#.#.....#........##..........\n....#...##........#.#.#..#...##\n..##.....#..###.........##.##..\n.#..#.....#...#.............#..\n#..............##...#....##....\n.##......#.#............#......\n.............##...#.#.......#..\n.........#..#..#...............\n........##......#....##........\n...#.........#.#.#.............\n#..........#......#......#..#..\n.............##.#.#..#.#.#...#.\n.....#.........#...............\n..##.#..#.....##..#........#.#.\n.#..........#.#.......#......##\n.#........................#....\n#....#....#...#..#......#......\n........#.......#......#.....#.\n.....#....##..#...###...#....#.\n....#.........#....#......#....\n.............#...#....#.......#\n.....#.........#..#.#..........\n.........#..#........#.#.#.....\n......#.##......#....#.#.##.#..\n.#...#.#...#...#.#......#....##\n.#................#......#.....\n#.#.#...............#..........\n.....#.#.......#...#........#..\n#...#.#.#.##..#...........#..#.\n.............###.........#....#\n.#.....#.......##....##.......#\n....#...#.......#.##.....#.....\n...........##.........#...#....\n..............#.#..#.....#..#..\n#.#...#..#.#.........#......#.#\n#.##.....##....#........#.#.#.#\n##.#.###.........##.......#..#.\n#.....#.....................#..\n.........##........#...........\n" <> ...}
23```
24
25```elixir
26slope =
27 puzzle_input
28 |> String.split("\n", trim: true)
29```
30
31<!-- livebook:{"output":true} -->
32
33```
34["....#...##.#.........#....#....", "#.......#...#...#.#............",
35 "#..#..#.#.##....#.#........#...", "........##...................#.",
36 "........#...##...#.#.###.......", "##............#...#.....#.##...",
37 "...........#....###...#.....#..", ".......#......#..##..#.....#...",
38 "..#.#..#....#.........#...#..#.", ".........##......#.....##..##..",
39 "........#.....#....#..##......#", "..#..#.......#..............#..",
40 ".....#.#.......................", ".#.#....#.........#............",
41 ".......#.....#.###.............", "......##......#...........#..#.",
42 ".#...............##...#........", ".....#..##........###.........#",
43 "#...........#..#............#..", ".........#....#..#.#......#....",
44 ".......#.........#..##.........", ".##.....#..................#...",
45 "....#............#.#....#.....#", "..#....#...##....#...#.#...#...",
46 "..........#................#.#.", "#...#.#.#.####..#.#..........#.",
47 "..#...#.##......#...........#..", "..#.....#...#.......#......#..#",
48 "..............#.......#........", ".#..#..........#.....#...#..#.#",
49 "#........#...#......#.......#..", "#..................#...........",
50 "..#...#........#...#..#........", "..............#.....#.....#..#.",
51 "#.#.......#..............##.##.", "....#.#.....##....#...........#",
52 "......#....#...#..#.......#....", "....#..#.#.....#..##.....#....#",
53 "...........#.......#.#.#.......", "#.......#..##........#..#......",
54 ".........#.##..#..............#", "...........#............###.#..",
55 "..#.....#.....##...#.........#.", "....##............##........#..",
56 ".....###..........#......##....", "#...##..#..#..........#........",
57 "....#.....#.......#..#.#...##..", ".#....#........#.#.........#.#.",
58 "##...#.#.....#......#..........", ".....##.....#....#.....###.#..#", ...]
59```
60
61```elixir
62binary_slice("abc", 5, 1)
63```
64
65<!-- livebook:{"output":true} -->
66
67```
68""
69```
70
71```elixir
72defmodule Toboggan do
73 def slide(slope, {dx, dy}) do
74 slope
75 |> Enum.take_every(dy)
76 |> Enum.reduce({0, 0}, fn row, {pos, count} ->
77 dc = if binary_part(row, rem(pos, byte_size(row)), 1) == "#", do: 1, else: 0
78
79 {pos + dx, count + dc}
80 end)
81 |> elem(1)
82 end
83end
84```
85
86<!-- livebook:{"output":true} -->
87
88```
89{:module, Toboggan, <<70, 79, 82, 49, 0, 0, 9, ...>>, {:slide, 2}}
90```
91
92## Part 1
93
94```elixir
95Toboggan.slide(slope, {3, 1})
96```
97
98<!-- livebook:{"output":true} -->
99
100```
101254
102```
103
104## Part 2
105
106```elixir
107[
108 {1, 1},
109 {3, 1},
110 {5, 1},
111 {7, 1},
112 {1, 2}
113]
114|> Enum.map(&Toboggan.slide(slope, &1))
115|> Enum.product()
116```
117
118<!-- livebook:{"output":true} -->
119
120```
1211666768320
122```
123
124<!-- livebook:{"offset":7450,"stamp":{"token":"XCP.NoSFu8ULnZhWAsLV6KwdSJblZR21o6kgNjJs3gczqJcYu7u7w_HScRZAL77iGr_ANQuyNyfr_CBU1KjRZ9e7nllBTnLxF6esiGCVXrSCKYPlWFFGN8VONns6BoBdQss9DU8","version":2}} -->