this repo has no description
at master 7.7 kB view raw
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}} -->