This commit is contained in:
Hugo Mårdbrink 2025-10-01 14:57:39 +02:00
parent eaedf6b76b
commit 39c86a9c8a

74
d03/main.odin Normal file
View file

@ -0,0 +1,74 @@
package main
import "core:math"
import "core:slice"
import "core:strconv"
import "core:strings"
import "core:bytes"
import "core:fmt"
import "core:os"
import "../util"
part_1 :: proc(lines: []string) {
result := 0
right := 0
for line in lines {
if line[right] == '#' {
result += 1
}
right = (right + 3) % len(line)
}
fmt.printfln("Part 1: %d", result)
}
Slope :: struct {
right: i64,
down: i64,
}
part_2 :: proc(lines: []string) {
result: i64 = 1
slopes := [?]Slope{
{ right = 1, down = 1 },
{ right = 3, down = 1 },
{ right = 5, down = 1 },
{ right = 7, down = 1 },
{ right = 1, down = 2 },
}
for slope in slopes {
right: i64 = 0
trees_hit: i64 = 0
for line_idx: i64 = 0; line_idx < i64(len(lines)); line_idx += slope.down {
line := lines[line_idx]
if line[right] == '#' {
trees_hit += 1
}
right = (right + slope.right) % i64(len(line))
}
result *= trees_hit
}
fmt.printfln("Part 2: %d", result)
}
main :: proc() {
context.allocator = context.temp_allocator
INPUT :: #load("input.txt", string)
lines := strings.split(INPUT, "\n")
lines = lines[:len(lines)-1]
part_1(lines)
part_2(lines)
free_all(context.temp_allocator)
}