this repo has no description
1<!-- livebook:{"persist_outputs":true} -->
2
3# Day 02
4
5```elixir
6Mix.install([:kino_aoc])
7```
8
9## Section
10
11<!-- livebook:{"attrs":"eyJhc3NpZ25fdG8iOiJwdXp6bGVfaW5wdXQiLCJkYXkiOiIyIiwic2Vzc2lvbl9zZWNyZXQiOiJBRFZFTlRfT0ZfQ09ERV9TRVNTSU9OIiwieWVhciI6IjIwMjQifQ","chunks":null,"kind":"Elixir.KinoAOC.HelperCell","livebook_object":"smart_cell"} -->
12
13```elixir
14{:ok, puzzle_input} =
15 KinoAOC.download_puzzle("2024", "2", System.fetch_env!("LB_ADVENT_OF_CODE_SESSION"))
16```
17
18<!-- livebook:{"output":true} -->
19
20```
21{:ok,
22 "75 76 77 80 82 85 84\n49 52 53 55 58 59 61 61\n54 57 60 62 66\n4 6 8 10 11 14 19\n82 85 86 83 85 87 89\n85 86 87 86 89 88\n69 72 73 76 77 74 75 75\n4 6 4 5 8 11 15\n6 9 10 12 15 16 15 20\n41 43 43 45 48 51\n48 51 53 53 56 58 59 58\n67 69 71 74 74 77 77\n82 83 85 85 89\n21 24 26 26 29 31 36\n4 7 10 11 15 18 20 21\n56 58 60 63 65 69 70 68\n24 26 30 32 33 35 35\n12 13 15 17 20 24 25 29\n52 53 54 57 58 59 63 68\n43 46 48 55 58 59\n15 16 23 26 27 28 26\n49 50 53 56 59 64 64\n56 58 59 65 69\n3 5 6 8 13 18\n45 44 46 47 50 52 54\n37 35 36 37 34\n53 50 51 53 54 56 56\n80 78 79 80 81 83 86 90\n32 31 34 37 40 45\n76 75 77 79 77 80\n26 25 22 24 23\n27 26 23 24 25 25\n96 93 96 93 97\n37 34 35 36 39 36 38 45\n68 65 66 67 67 70 72\n41 39 42 42 43 40\n88 86 89 90 90 91 93 93\n24 23 25 26 26 28 32\n79 77 77 80 83 88\n50 48 50 52 55 58 62 63\n39 38 39 41 45 47 48 45\n40 38 41 42 44 45 49 49\n50 49 53 56 60\n74 73 77 80 86\n40 37 38 39 42 48 49 50\n12 11 17 20 22 23 25 23\n74 71 73 75 80 83 83\n20 17 23 25 29\n32 30 37 39 42 48\n80 80 83 86 87\n73 73 76 78 80 83 85 82\n19 19 22 25 28 30 32 32\n43 43 46 49 53\n69 69 72 75 80\n24 24 25 22 25 27\n60 60 58 61 64 65 62\n52 52 50 51 53 55 55\n56 56 59 56 60\n37 37 38 36 38 45\n7 7 9 12 12 13 14 16\n52 52 55 57 57 56\n89 89 89 91 91\n7 7 7 10 13 15 17 21\n43 43 44 47 50 50 52 58\n4 4 5 9 10 11 14 17\n11 11 13 17 15\n7 7 11 14 14\n55 55 58 62 64 66 70\n75 75 78 79 81 85 88 94\n56 56 63 64 67\n5 5 7 10 12 13 18 16\n32 32 38 41 43 44 47 47\n36 36 43 44 48\n9 9 12 17 22\n11 15 16 18 20 21 23 26\n50 54 55 57 60 62 64 61\n86 90 92 94 95 95\n84 88 90 93 97\n3 7 9 12 15 21\n36 40 41 44 47 46 47 50\n39 43 45 43 46 47 50 47\n84 88 90 87 90 90\n2 6 7 4 6 10\n31 35 34 35 36 39 45\n11 15 15 16 18\n1 5 7 9 11 14 14 13\n54 58 60 60 63 63\n52 56 58 60 60 64\n61 65 65 66 71\n48 52 55 56 60 61\n77 81 84 88 89 86\n58 62 63 66 67 71 74 74\n71 75 78 81 82 84 88 92\n82 86 87 91 98\n41 45 48 50 55 58 61\n70 74 77 78 83 86 88 85\n71 75 82 84 84\n19 23 30 31 35\n59 63 70 72 77\n45 51 53 55 56\n8 14 16 19 17\n46 52 55 58 58\n71 77 79 82 84 87 88 92\n68 75 77 80 87\n29 35 38 35 36 38 39\n34 39 38 41 43 45 42\n26 33 35 34 36 39 41 41\n85 92 95 92 96\n33 38 40 39 40 41 48\n83 89 92 93 93 94 95 96\n85 92 95 95 97 96\n54 59 59 60 61 62 64 64\n27 34 35 37 37 41\n69 75 77 79 81 81 86\n25 30 31 32 36 38\n51 58 62 63 64 63\n54 61 62 65 69 72 74 74\n59 66 68 69 73 76 79 83\n14 19 20 24 30\n33 40 42 48 51 52\n28 33 36 37 42 45 43\n44 50 55 58 58\n14 21 22 29 30 34\n35 40 43 49 52 53 59\n63 61 58 56 54 51 53\n52 49 46 45 45\n74 72 69 68 67 63\n80 77 74 73 72 67\n77 74 76 73 70 68 67\n20 17 16 15 17 19\n45 42 41 38 36 35 38 38\n55 54 56 53 49\n20 18 17 15 14 16 10\n17 14 14 12 10 8 6\n72 71 69 68 66 66 63 65\n31 30 30 27 26 25 24 24\n51 49 48 48 47 43\n26 24 24 21 20 14\n19 18 14 13 10 8\n84 81 80 76 78\n47 45 41 38 35 35\n68 67 64 60 56\n74 71 68 66 62 60 54\n43 41 38 36 33 27 26\n63 60 53 51 54\n29 28 23 20 17 16 14 14\n46 45 42 39 34 31 30 26\n23 21 19 13 11 5\n27 29 26 24 23 22 19\n86 88 86 83 81 79 81\n57 59 57 54 52 50 47 47\n21 24 21 18 14\n61 63 62 61 59 57 50\n96 99 97 98 96 95 92\n66 69 71 69 71\n41 43 42 39 37 40 37 37\n79 82 85 84 80\n77 79 77 78 73\n22 24 24 22 20\n63 66 64 64 66\n19 22 22 21 18 18\n95 97 97 95 93 91 87\n32 33 31 29 29 28 25 18\n42 44 43 39 38 36 34 31\n27 29 27 24 22 18 20\n20 22 18 15 15\n68 69 65 63 59\n79 81 77 76 73 72 67\n68 70 69 63 62 60 59 56\n42 44 39 36 33 36\n88 90 87 82 81 79 79\n66 69 66 59 58 54\n70 71 70 68 66 60 54\n77 77 76 74 72 71 69 66\n43 43 40 37 34 33 36\n21 21 20 18 18\n34 34 32 29 27 25 22 18\n79 79 78 76 73 66\n89 89 92 90 88\n77 77 75 73 72 73 76\n84 84 83 85 85\n30 30 28 26 23 22 25 21\n22 22 25 23 21 20 15\n66 66 66 64 63 62 60 57\n75 75 73 70 67 67 68\n33 33 33 30 27 25 22 22\n55 55 52 50 50 46\n40 40 38 38 37 32\n63 63 62 58 55\n95 95 94 90 92\n87 87 85 82 78 78\n88 88 84 83 79\n85 85 83 79 73\n53 53 51 44 42\n12 12 7 5 4 6\n53 53 48 47 44 44\n35 35 32 25 22 18\n46 46 39 36 34 27\n26 22 21 19 18 15\n91 87 86 85 83 85\n24 20 17 15 14 14\n66 62 60 57 54 50\n67 63 62 60 59 57 51\n41 37 35 38 37 36 33 31\n18 14 15 12 9 8 5 8\n37 33 32 30 29 30 30\n70 66 64 63 60 61 58 54\n34 30 28 26 23 26 24 18\n28 24 22 19 16 16 15\n54 50 50 48 47 44 41 43\n82 78 75 75 75\n38 34 34 33 30 29 25\n52 48" <> ...}
23```
24
25```elixir
26inputs =
27 puzzle_input
28 |> String.split("\n", trim: true)
29 |> Enum.map(fn row ->
30 row
31 |> String.split(" ", trim: true)
32 |> Enum.map(&String.to_integer/1)
33 end)
34```
35
36<!-- livebook:{"output":true} -->
37
38```
39[
40 ~c"KLMPRUT",
41 ~c"1457:;==",
42 ~c"69<>B",
43 [4, 6, 8, 10, 11, 14, 19],
44 ~c"RUVSUWY",
45 ~c"UVWVYX",
46 ~c"EHILMJKK",
47 [4, 6, 4, 5, 8, 11, 15],
48 [6, 9, 10, 12, 15, 16, 15, 20],
49 ~c")++-03",
50 ~c"03558:;:",
51 ~c"CEGJJMM",
52 ~c"RSUUY",
53 [21, 24, 26, 26, 29, 31, 36],
54 [4, 7, 10, 11, 15, 18, 20, 21],
55 ~c"8:<?AEFD",
56 [24, 26, 30, 32, 33, 35, 35],
57 [12, 13, 15, 17, 20, 24, 25, 29],
58 ~c"4569:;?D",
59 ~c"+.07:;",
60 [15, 16, 23, 26, 27, 28, 26],
61 ~c"1258;@@",
62 ~c"8:;AE",
63 [3, 5, 6, 8, 13, 18],
64 ~c"-,./246",
65 ~c"%#$%\"",
66 ~c"5235688",
67 ~c"PNOPQSVZ",
68 [32, 31, 34, 37, 40, 45],
69 ~c"LKMOMP",
70 [26, 25, 22, 24, 23],
71 [27, 26, 23, 24, 25, 25],
72 ~c"`]`]a",
73 ~c"%\"#$'$&-",
74 ~c"DABCCFH",
75 ~c")'**+(",
76 ~c"XVYZZ[]]",
77 [24, 23, 25, 26, 26, 28, 32],
78 ~c"OMMPSX",
79 ~c"20247:>?",
80 ~c"'&')-/0-",
81 ~c"(&)*,-11",
82 ~c"2158<",
83 ~c"JIMPV",
84 ~c"(%&'*012",
85 [12, 11, 17, 20, ...],
86 ~c"JGIKPSS",
87 [20, 17, ...],
88 [32, ...],
89 ~c"PPSVW",
90 ...
91]
92```
93
94```elixir
95defmodule Day02 do
96 def correct?([a, b | _] = input) do
97 cmp = if a > b, do: &>/2, else: &</2
98 valid? = fn [c, d] -> abs(c - d) in 1..3 and cmp.(c, d) end
99
100 input
101 |> Enum.chunk_every(2, 1, :discard)
102 |> Enum.all?(valid?)
103 end
104end
105```
106
107<!-- livebook:{"output":true} -->
108
109```
110{:module, Day02, <<70, 79, 82, 49, 0, 0, 9, ...>>, {:correct?, 1}}
111```
112
113## Part 1
114
115```elixir
116Enum.count(inputs, &Day02.correct?/1)
117```
118
119<!-- livebook:{"output":true} -->
120
121```
122479
123```
124
125## Part 2
126
127```elixir
128Enum.count(inputs, fn row ->
129 Enum.any?(0..length(row), fn idx ->
130 row |> List.delete_at(idx) |> Day02.correct?()
131 end)
132end)
133```
134
135<!-- livebook:{"output":true} -->
136
137```
138531
139```
140
141<!-- livebook:{"offset":6719,"stamp":{"token":"XCP.G9JOBFd6jltWt-jkW37gzAIiay7brKZPFEBwgZCNOwBJpPmDyHp2GNGrNOADiSuyHghh61GSONlBGBUhRAPkPyonpwEHNjQtjnNbJGdA9f5v976Ir8CzhrtsvgWjFZ82wsQ","version":2}} -->