Skip to content

Commit 17f1251

Browse files
authored
leodev, day 07 (#63)
1 parent 7c4c87b commit 17f1251

File tree

4 files changed

+44
-0
lines changed

4 files changed

+44
-0
lines changed

2024/07/.gitkeep

Whitespace-only changes.

2024/07/leodev.v

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import os
2+
3+
fn main() {
4+
lines := os.read_lines('calibration.input')!
5+
6+
mut total1 := i64(0)
7+
mut total2 := i64(0)
8+
for line in lines {
9+
expected_str, value_str := line.split_once(': ') or { panic(err) }
10+
expected := expected_str.i64()
11+
values := value_str.split(' ').map(it.i64())
12+
13+
if find(expected, 0, values, false) {
14+
total1 += expected
15+
}
16+
if find(expected, 0, values, true) {
17+
total2 += expected
18+
}
19+
}
20+
21+
println('part1: ${total1}')
22+
println('part2: ${total2}')
23+
}
24+
25+
fn find(expected i64, current_value i64, remaining_values []i64, part2 bool) bool {
26+
if remaining_values.len == 0 {
27+
return expected == current_value
28+
}
29+
if current_value > expected {
30+
return false
31+
}
32+
33+
if find(expected, current_value + remaining_values[0], remaining_values[1..], part2) {
34+
return true
35+
}
36+
if part2
37+
&& find(expected, (current_value.str() + remaining_values[0].str()).i64(), remaining_values[1..], part2) {
38+
return true
39+
}
40+
return find(expected, current_value * remaining_values[0], remaining_values[1..],
41+
part2)
42+
}

known/2024/07/.gitkeep

Whitespace-only changes.

known/2024/07/leodev.out

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
part1: 3749
2+
part2: 11387

0 commit comments

Comments
 (0)