tangled
alpha
login
or
join now
hauleth.dev
/
advent-of-code
3
fork
atom
this repo has no description
3
fork
atom
overview
issues
pulls
pipelines
Day 01 of 2025
New year, new challenges, new fun
hauleth.dev
3 months ago
23be2307
89e91428
verified
This commit was signed with the committer's
known signature
.
hauleth.dev
SSH Key Fingerprint:
SHA256:1hEP8QO8nM2KQfQ8jK4Q19y/CmqVZQI/cNSht3c1QlI=
+150
1 changed file
expand all
collapse all
unified
split
2025
day01.livemd
+150
2025/day01.livemd
···
1
1
+
<!-- livebook:{"persist_outputs":true} -->
2
2
+
3
3
+
# Day 01
4
4
+
5
5
+
```elixir
6
6
+
Mix.install([:kino_aoc])
7
7
+
```
8
8
+
9
9
+
## Setup
10
10
+
11
11
+
<!-- livebook:{"attrs":"eyJhc3NpZ25fdG8iOiJwdXp6bGVfaW5wdXQiLCJkYXkiOiIxIiwic2Vzc2lvbl9zZWNyZXQiOiJBRFZFTlRfT0ZfQ09ERV9TRVNTSU9OIiwieWVhciI6IjIwMjUifQ","chunks":null,"kind":"Elixir.KinoAOC.HelperCell","livebook_object":"smart_cell"} -->
12
12
+
13
13
+
```elixir
14
14
+
{:ok, puzzle_input} =
15
15
+
KinoAOC.download_puzzle("2025", "1", System.fetch_env!("LB_ADVENT_OF_CODE_SESSION"))
16
16
+
```
17
17
+
18
18
+
<!-- livebook:{"output":true} -->
19
19
+
20
20
+
```
21
21
+
{:ok,
22
22
+
"R19\nL18\nL17\nR21\nR8\nL23\nL42\nL37\nR21\nL9\nL14\nR38\nR10\nR19\nR27\nL47\nL13\nL3\nL45\nL13\nL43\nL31\nR15\nR17\nR11\nR50\nR10\nL23\nR7\nR2\nR49\nR23\nL8\nR11\nL44\nR19\nR18\nR14\nR41\nL3\nR6\nR42\nL47\nL6\nL20\nR13\nR10\nR45\nL1\nL9\nR47\nR10\nR28\nR22\nR93\nL10\nR75\nL65\nL64\nL97\nR24\nR22\nL85\nL18\nL65\nL17\nL53\nL79\nR55\nR85\nL8\nL9\nR95\nR14\nL41\nR41\nR62\nL37\nR15\nL17\nL60\nR77\nR60\nL36\nR36\nL32\nR32\nL45\nL55\nR23\nL62\nR39\nR64\nL57\nL7\nR60\nL89\nL70\nL89\nR72\nL84\nR48\nL866\nL15\nR877\nR56\nR94\nR40\nL23\nR54\nR35\nL321\nR21\nL32\nR872\nR56\nR50\nL340\nL6\nR44\nL44\nL67\nR94\nL95\nR68\nR32\nL32\nL57\nL99\nR7\nL589\nR81\nR957\nR67\nR31\nR683\nR19\nR12\nL14\nR2\nL80\nR502\nL88\nR15\nL10\nL739\nL4\nL66\nL24\nL42\nR45\nL88\nL75\nR491\nL48\nR11\nR14\nL14\nR81\nL81\nR63\nR37\nR8\nL47\nR39\nR73\nL73\nR947\nR973\nR42\nL75\nR13\nL207\nL45\nL59\nR11\nR42\nL42\nR15\nL615\nL32\nL151\nL86\nL42\nL2\nR77\nL64\nR87\nR13\nR189\nL89\nR22\nR90\nR88\nR56\nR91\nR53\nR71\nL71\nR68\nL16\nR42\nR6\nL70\nL30\nR17\nL89\nR59\nR13\nL14\nR14\nL87\nR573\nL386\nR9\nL32\nL2\nR46\nL1\nL35\nL46\nR61\nR91\nR3\nL64\nL30\nL76\nR999\nR17\nR86\nR62\nR71\nR471\nR5\nR65\nR76\nL76\nL91\nL9\nL86\nL94\nL75\nR55\nR93\nL24\nL89\nL80\nL86\nL14\nR86\nL86\nL19\nR32\nR87\nL738\nL62\nL44\nL750\nL6\nL98\nR366\nR65\nR67\nR86\nR514\nR164\nR20\nR46\nL60\nR30\nL62\nR62\nR55\nR45\nR84\nL86\nL99\nR1\nR414\nL62\nR893\nR97\nR73\nL739\nL76\nR362\nR17\nL211\nR41\nL25\nL112\nL64\nR66\nL15\nR52\nL76\nL35\nR38\nR129\nL72\nL6\nR11\nL30\nR21\nR9\nL54\nL46\nL94\nR280\nL59\nR84\nL616\nR595\nR745\nL35\nR334\nR114\nR95\nL43\nR12\nL51\nR55\nR84\nL91\nL706\nR2\nR95\nR76\nL76\nR397\nR15\nR927\nL39\nL23\nL77\nL74\nR34\nR440\nR21\nL221\nL45\nR45\nL80\nL16\nL7\nL14\nL283\nL18\nR18\nR839\nL239\nR91\nL91\nR66\nR54\nR37\nR42\nL99\nR836\nL11\nR575\nR54\nR41\nL29\nR94\nR40\nL72\nR72\nL556\nR10\nL854\nR21\nL79\nR15\nR331\nL83\nL32\nL88\nL35\nL50\nR29\nL210\nR65\nL346\nL38\nL44\nR44\nR314\nR79\nL56\nL14\nR77\nR1\nL20\nL581\nR49\nL28\nL725\nR54\nR450\nR53\nR73\nL57\nL79\nR726\nL37\nL79\nR50\nR29\nL879\nR92\nR1\nL55\nR62\nL550\nR95\nR932\nR70\nL97\nL63\nR10\nL214\nL33\nL50\nL834\nR534\nR31\nL31\nR41\nL70\nL71\nL94\nL406\nR43\nR264\nR48\nR53\nL36\nR56\nR85\nR71\nL127\nR79\nR986\nL22\nR74\nR26\nR13\nL47\nL66\nR45\nL63\nL677\nR636\nR59\nR97\nL97\nR23\nL32\nR24\nL654\nL81\nL280\nL598\nL2\nR98\nR286\nL247\nR632\nL39\nL11\nL38\nR32\nR87\nR28\nL24\nL61\nL62\nR82\nL63\nR627\nR73\nR526\nR74\nR23\nL23\nR84\nR37\nR6\nR18\nL45\nL61\nR58\nR63\nL91\nL69\nL60\nL40\nL52\nR118\nL66\nR28\nR872\nL50\nL54\nL96\nL50\nR520\nR30\nL78\nR578\nR242\nR47\nL21\nL68\nR46\nR54\nL55\nR48\nR7\nR93\nR726\nR81\nL8\nR25\nR983\nR255\nL752\nL52\nR83\nL75\nR92\nL29\nL47\nR25\nR66\nR34\nL352\nR92\nL44\nR30\nL321\nR56\nL303\nL58\nR64\nR936\nR118\nL57\nL72\nL49\nR58\nL98\nL54\nR63\nL62\nR8\nR8\nL28\nR51\nR43\nL39\nL46\nL63\nL781\nL256\nR101\nR32\nR985\nR38\nL975\nL538\nL1\nL203\nR25\nR592\nR64\nL664\nR37\nR63\nL34\nR34\nR64\nR536\nR689\nL89\nR13\nR587\nL27\nL573\nL747\nR462\nL15\nL78\nL16\nL99\nR71\nL60\nL125\nL93\nL863\nR71\nR92\nL92\nL8\nR72\nL72\nL23\nR323\nL66\nR139\nL187\nR14\nL42\nL53\nL92\nR87\nL46\nR46\nR12\nL12\nL30\nR75\nL645\nR73\nL44\nR71\nR50\nR15\nR235\nL57\nL426\nL60\nR39\nL96\nL1\nR1\nL3\nR6\nL37\nL766\nL420\nL80\nL42\nR66\nR50\nL58\nL81\nL35\nL365\nR565\nL369\nL6\nR75\nR42\nR8\nL50\nR2\nL81\nL21\nL23\nR80\nR47\nR96\nR50\nL314\nL36\nL97\nR460\nL63\nL103\nL86\nL11\nL43\nR43\nR45\nR55\nR27\nL19\nR92\nL4\nL33\nR98\nL87\nR60\nR66\nL82\nL621\nL44\nL85\nR65\nR67\nR18\nR82\nL9\nR9\nR30\nL44\nR774\nR81\nR49\nR91\nR11\nL92\nL14\nL60\nR81\nR593\nR62\nR38\nR36\nR277\nR90\nR93\nR75\nL59\nR37\nR824\nL73\nR69\nL79\nL241\nR27\nR726\nR5\nR82\nR98\nR513\nL55\nL18\nR41\nL92\nL52\nL8\nR784\nR90\nL4\nL56\nR98\nL667\nR12\nL73\nR21\nL821\nR149\nL6\nR25\nL21\nR53\nL46\nL19\nR12\nR569\nL99\nL90\nL65\nR36\nR302\nR37\nL37\nR388\nL88\nL61\nR16\nR14\nL85\nR16\nR602\nR698\nR57\nR43\nR56\nL80\nL76\nL71\nL601\nR4\nL69\nR5\nL115\nR21\nL74\nL23\nR68\nL23\nL63\nR41\nR18\nL18\nL784\nL26\nL38\nR48\nL98\nL91\nR62\nL73\nL811\nR39\nR72\nL97\nL93\nR935\nL45\nL31\nR36\nR95\nR51\nL15\nL36\nR410\nL805\nL5\nL86\nR86\nL71\nR371\nR43\nR10\nR61\nL59\nR11\nR34\nR11\nL93\nL18\nR58\nL79\nR588\nR233\nR9\nR91\nL496\nL4\nR92\nL40\nR1\nL828\nL85\nR61\nR66\nL998\nR83\nR64\nL45\nL71\nL32\nR42\nR653\nL49\nR79\nR92\nR15\nL6\nR6\nL45\nR194\nR29\nL78\nL76\nR76\nL37\nR359\nL5\nL17\nR92\nL957\nR62\nL8\nR11\nL78\nR11\nL457\nR57\nR72\nL5\nL52\nR51\nL14\nL48\nR460\nL617\nL80\nL154\nR68\nL57\nL357\nR32\nL32\nL52\nL48\nL467\nR12\nR855\nR51\nR49\nL90\nR90\nL73\nR40\nR91\nR32\nR10\nL88\nL46\nR851\nR683\nR7\nR649\nR313\nL544\nR75\nL92\nL9\nR198\nL97\nL61\nR61\nR53\nR68\nR65\nL685\nR99\nR55\nR12\nL51\nR89\nL5\nL35\nL64\nL98\nR97\nR453\nL53\nR37\nR40\nR5\nR54\nR42\nR45\nL3\nL12\nL83\nL181\nL44\nR4\nL62\nR7\nL49\nL46\nL36\nR72\nL90\nL98\nL2\nR73\nR79\nR548\nR696\nR4\nL347\nR47\nL89\nL11\nL572\nL22\nR94\nL885\nL15\nL62\nL76\nR70\nL830\nL61\nL41\nR24\nL93\nL31\nR63\nR51\nR821\nL24\nL47\nR41\nR42\nL970\nL77\nR32\nR68\nR49\nR251\nL49\nR49\nL63\nL37\nL43\nL36\nR5" <> ...}
23
23
+
```
24
24
+
25
25
+
```elixir
26
26
+
instructions =
27
27
+
puzzle_input
28
28
+
|> String.split("\n", trim: true)
29
29
+
|> Enum.map(fn <<dir>> <> rest ->
30
30
+
num = String.to_integer(rest)
31
31
+
32
32
+
if dir == ?R do
33
33
+
{div(num, 100), rem(num, 100)}
34
34
+
else
35
35
+
{div(num, 100), -rem(num, 100)}
36
36
+
end
37
37
+
end)
38
38
+
```
39
39
+
40
40
+
<!-- livebook:{"output":true} -->
41
41
+
42
42
+
```
43
43
+
[
44
44
+
{0, 19},
45
45
+
{0, -18},
46
46
+
{0, -17},
47
47
+
{0, 21},
48
48
+
{0, 8},
49
49
+
{0, -23},
50
50
+
{0, -42},
51
51
+
{0, -37},
52
52
+
{0, 21},
53
53
+
{0, -9},
54
54
+
{0, -14},
55
55
+
{0, 38},
56
56
+
{0, 10},
57
57
+
{0, 19},
58
58
+
{0, 27},
59
59
+
{0, -47},
60
60
+
{0, -13},
61
61
+
{0, -3},
62
62
+
{0, -45},
63
63
+
{0, -13},
64
64
+
{0, -43},
65
65
+
{0, -31},
66
66
+
{0, 15},
67
67
+
{0, 17},
68
68
+
{0, 11},
69
69
+
{0, 50},
70
70
+
{0, 10},
71
71
+
{0, -23},
72
72
+
{0, 7},
73
73
+
{0, 2},
74
74
+
{0, 49},
75
75
+
{0, 23},
76
76
+
{0, -8},
77
77
+
{0, 11},
78
78
+
{0, -44},
79
79
+
{0, 19},
80
80
+
{0, 18},
81
81
+
{0, 14},
82
82
+
{0, 41},
83
83
+
{0, -3},
84
84
+
{0, 6},
85
85
+
{0, 42},
86
86
+
{0, -47},
87
87
+
{0, -6},
88
88
+
{0, -20},
89
89
+
{0, 13},
90
90
+
{0, 10},
91
91
+
{0, 45},
92
92
+
{0, ...},
93
93
+
{...},
94
94
+
...
95
95
+
]
96
96
+
```
97
97
+
98
98
+
## Part 1
99
99
+
100
100
+
```elixir
101
101
+
Enum.reduce(instructions, {50, 0}, fn {_rot, val}, {curr, sum} ->
102
102
+
next = Integer.mod(curr + val, 100)
103
103
+
104
104
+
{next, sum + if(next == 0, do: 1, else: 0)}
105
105
+
end)
106
106
+
|> elem(1)
107
107
+
```
108
108
+
109
109
+
<!-- livebook:{"output":true} -->
110
110
+
111
111
+
```
112
112
+
1158
113
113
+
```
114
114
+
115
115
+
## Part 2
116
116
+
117
117
+
```elixir
118
118
+
<<0x434C49434B::40>>
119
119
+
```
120
120
+
121
121
+
<!-- livebook:{"output":true} -->
122
122
+
123
123
+
```
124
124
+
"CLICK"
125
125
+
```
126
126
+
127
127
+
```elixir
128
128
+
Enum.reduce(instructions, {50, 0}, fn {rot, val}, {curr, sum} ->
129
129
+
next = curr + val
130
130
+
131
131
+
pass =
132
132
+
cond do
133
133
+
curr == 0 and next < 0 -> 0
134
134
+
next not in 0..99 -> 1
135
135
+
rem(next, 100) == 0 -> 1
136
136
+
true -> 0
137
137
+
end
138
138
+
139
139
+
{Integer.mod(next, 100), sum + pass + rot}
140
140
+
end)
141
141
+
|> elem(1)
142
142
+
```
143
143
+
144
144
+
<!-- livebook:{"output":true} -->
145
145
+
146
146
+
```
147
147
+
6860
148
148
+
```
149
149
+
150
150
+
<!-- livebook:{"offset":7198,"stamp":{"token":"XCP.BHSOPunco0pDpQv-38vear-fTqa2_h8Mqa9T6W_PKNUp9vv5OF4HlDkEjtSWN7zBUT_Houfqvq3RBUcZ1C2n04AJEv0BGPSZD_3cPwIlkk3T2z7C2qnbCrP__8EuwANKiw","version":2}} -->