aoc20/d01/main.odin
2025-10-01 11:41:26 +02:00

64 lines
1.5 KiB
Odin

package main
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) {
nums := slice.mapper(lines[:], proc(line: string) -> i64 {
num, ok := strconv.parse_int(line); assert(ok)
return i64(num)
})
maybe_result: Maybe(i64) = nil
for num1, idx1 in nums {
for num2 in nums[idx1:] {
sum := num1 + num2
if sum == 2020 {
maybe_result = num1 * num2
break
}
}
}
result, ok := maybe_result.?; assert(ok)
fmt.printfln("Part 1: %d", result)
}
part_2 :: proc(lines: []string) {
nums := slice.mapper(lines[:], proc(line: string) -> i64 {
num, ok := strconv.parse_i64(line); assert(ok)
return num
})
maybe_result: Maybe(i64) = nil
for num1, idx1 in nums {
for num2, idx2 in nums[idx1:] {
for num3 in nums[idx2:] {
sum := num1 + num2 + num3
if sum == 2020 {
maybe_result = num1 * num2 * num3
break
}
}
}
}
result, ok := maybe_result.?; assert(ok)
fmt.printfln("Part 2: %d", result)
}
main :: proc() {
INPUT :: #load("input.txt", string)
lines := strings.split(INPUT, "\n")
defer delete(lines)
lines = lines[:len(lines)-1]
part_1(lines)
part_2(lines)
}