64 lines
1.5 KiB
Odin
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)
|
|
}
|