aoc20/d06/main.odin
2025-10-05 01:21:24 +02:00

79 lines
1.5 KiB
Odin

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
batches := make([dynamic]map[rune]bool)
batch := make(map[rune]bool)
for line, idx in lines {
if len(line) == 0 {
append(&batches, batch)
batch = make(map[rune]bool)
}
for letter in line {
batch[letter] = true
}
}
for answers in batches {
result += len(answers)
}
fmt.printfln("Part 1: %d", result)
}
Batch :: struct {
amount: int,
answers: map[rune]int
}
part_2 :: proc(lines: []string) {
result: = 0
batches := make([dynamic]Batch)
batch := Batch{}
for line, idx in lines {
if len(line) == 0 {
append(&batches, batch)
batch = Batch{}
} else {
for letter in line {
batch.answers[letter] += 1
}
batch.amount += 1
}
}
for batch in batches {
for _, num_answers in batch.answers {
if batch.amount == num_answers do result += 1
}
}
fmt.printfln("Part 2: %d", result)
}
main :: proc() {
context.allocator = context.temp_allocator
defer free_all(context.temp_allocator)
INPUT :: #load("input.txt", string)
lines := strings.split(INPUT, "\n")
lines = lines[:len(lines)-1]
part_1(lines)
part_2(lines)
}