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) }