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 06
hauleth.dev
2 years ago
fceb5e95
4b718428
verified
This commit was signed with the committer's
known signature
.
hauleth.dev
SSH Key Fingerprint:
SHA256:1hEP8QO8nM2KQfQ8jK4Q19y/CmqVZQI/cNSht3c1QlI=
+107
1 changed file
expand all
collapse all
unified
split
2023
day06.livemd
+107
2023/day06.livemd
···
1
1
+
<!-- livebook:{"persist_outputs":true} -->
2
2
+
3
3
+
# Day 06
4
4
+
5
5
+
```elixir
6
6
+
Mix.install([:kino_aoc])
7
7
+
```
8
8
+
9
9
+
## Section
10
10
+
11
11
+
<!-- livebook:{"attrs":{"assign_to":"puzzle_input","day":"6","session_secret":"ADVENT_OF_CODE_SESSION","year":"2023"},"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("2023", "6", System.fetch_env!("LB_ADVENT_OF_CODE_SESSION"))
16
16
+
```
17
17
+
18
18
+
<!-- livebook:{"output":true} -->
19
19
+
20
20
+
```
21
21
+
{:ok, "Time: 44 80 65 72\nDistance: 208 1581 1050 1102"}
22
22
+
```
23
23
+
24
24
+
```elixir
25
25
+
# puzzle_input =
26
26
+
"""
27
27
+
Time: 7 15 30
28
28
+
Distance: 9 40 200
29
29
+
"""
30
30
+
|> String.trim()
31
31
+
```
32
32
+
33
33
+
<!-- livebook:{"output":true} -->
34
34
+
35
35
+
```
36
36
+
"Time: 7 15 30\nDistance: 9 40 200"
37
37
+
```
38
38
+
39
39
+
```elixir
40
40
+
defmodule Day06 do
41
41
+
def solve(t, d) do
42
42
+
delta = t ** 2 - 4 * d
43
43
+
44
44
+
sq_delta = :math.sqrt(delta)
45
45
+
46
46
+
diff = if sq_delta == floor(sq_delta), do: 1, else: 0
47
47
+
48
48
+
x1 = (-t + sq_delta) / -2
49
49
+
x2 = (-t - sq_delta) / -2
50
50
+
51
51
+
ceil(x2) - ceil(x1) - diff
52
52
+
end
53
53
+
end
54
54
+
```
55
55
+
56
56
+
<!-- livebook:{"output":true} -->
57
57
+
58
58
+
```
59
59
+
{:module, Day06, <<70, 79, 82, 49, 0, 0, 8, ...>>, {:solve, 2}}
60
60
+
```
61
61
+
62
62
+
## Part 1
63
63
+
64
64
+
```elixir
65
65
+
puzzle_input
66
66
+
|> String.split("\n")
67
67
+
|> Enum.map(fn line ->
68
68
+
line
69
69
+
|> String.split(" ", trim: true)
70
70
+
|> tl()
71
71
+
|> Enum.map(&String.to_integer/1)
72
72
+
end)
73
73
+
|> Enum.zip()
74
74
+
|> Enum.map(fn {t, d} -> Day06.solve(t, d) end)
75
75
+
|> Enum.product()
76
76
+
```
77
77
+
78
78
+
<!-- livebook:{"output":true} -->
79
79
+
80
80
+
```
81
81
+
32076
82
82
+
```
83
83
+
84
84
+
## Part 2
85
85
+
86
86
+
```elixir
87
87
+
[t, d] =
88
88
+
puzzle_input
89
89
+
|> String.split("\n")
90
90
+
|> Enum.map(fn line ->
91
91
+
line
92
92
+
|> String.split(" ", trim: true)
93
93
+
|> tl()
94
94
+
|> Enum.join()
95
95
+
|> String.to_integer()
96
96
+
end)
97
97
+
98
98
+
Day06.solve(t, d)
99
99
+
```
100
100
+
101
101
+
<!-- livebook:{"output":true} -->
102
102
+
103
103
+
```
104
104
+
34278221
105
105
+
```
106
106
+
107
107
+
<!-- livebook:{"offset":1728,"stamp":{"token":"XCP.RVwRJJq0k3Evn9IAmQDOmuVfBQ2xs0pbIqwAVIMLYEO8Olj2RUttefJ6ky9G2BD-EzyDh-ZjERuBL8PVkFPkYz8g7hdsY0keFA-TEIL4GC3n2j_IwPT1JHFDQ0FwiPBw5g","version":2}} -->