finish day 1

This commit is contained in:
2025-12-05 21:46:55 -05:00
commit 5b03234008
2 changed files with 4765 additions and 0 deletions

106
day1/day1.odin Normal file
View File

@@ -0,0 +1,106 @@
package day1
import "core:strings"
import "core:testing"
import strconv "core:strconv"
import os "core:os"
sample :: `L68
L30
R48
L5
R60
L55
L1
L99
R14
L82`
solve_first :: proc(s: string) -> uint {
s := s
pointing_at_zero: uint
current_dial := 50
for line in strings.split_lines_iterator(&s) {
if line == "" do continue
value, _ := strconv.parse_int(line[1:])
if line[0] == 'L' {
current_dial -= value
} else {
current_dial += value
}
for current_dial < 0 {
current_dial += 100
}
for current_dial >= 100 {
current_dial -= 100
}
if current_dial == 0 {
pointing_at_zero += 1
}
}
return pointing_at_zero
}
solve_second :: proc(s: string) -> uint {
s := s
pointing_at_zero: uint
current_dial := 50
for line in strings.split_lines_iterator(&s) {
if line == "" do continue
value, _ := strconv.parse_int(line[1:])
for value >= 100 {
value -= 100
pointing_at_zero += 1
}
if line[0] == 'L' {
current_dial -= value
} else {
current_dial += value
}
for current_dial < 0 {
current_dial += 100
pointing_at_zero += 1
}
for current_dial > 100 {
current_dial -= 100
pointing_at_zero += 1
}
if current_dial == 0 {
pointing_at_zero += 1
}
}
return pointing_at_zero
}
@(test)
solve_first_sample :: proc(t: ^testing.T) {
pointing_at_zero := solve_first(sample)
testing.expect_value(t, pointing_at_zero, 3)
}
@(test)
solve_first_input :: proc(t: ^testing.T) {
contents, _ := os.read_entire_file("day1/input.txt")
defer delete(contents)
pointing_at_zero := solve_first(string(contents))
testing.expect_value(t, pointing_at_zero, 1158)
}
@(test)
solve_second_sample :: proc(t: ^testing.T) {
pointing_at_zero := solve_second(sample)
testing.expect_value(t, pointing_at_zero, 6)
}
@(test)
solve_second_input :: proc(t: ^testing.T) {
contents, _ := os.read_entire_file("day1/input.txt")
defer delete(contents)
pointing_at_zero := solve_second(string(contents))
testing.expect_value(t, pointing_at_zero, 6860)
}