Files
zern/examples/puzzles/aoc2025_03.zr
2026-06-06 18:53:11 +02:00

56 lines
1.3 KiB
Plaintext

func part1[lines: Array] : void
sum := 0
for i in 0..lines->size
line : str = array.nth(lines, i)
largest := 0
for j in 0..str.len(line)
for k in (j+1)..str.len(line)
s := _stackalloc(3) as str
s[0] = line[j]
s[1] = line[k]
s[2] = 0
n := str.parse_i64(s)
if n > largest
largest = n
sum += largest
io.println_i64(sum)
// had to cheat this one
func part2_rec[bank: str, start: i64, remaining: i64] : i64
largest := 0
largest_idx := start
len := str.len(bank)
for i in (start)..(len-remaining+1)
v := (bank[i] - '0') as i64
if v > largest
largest = v
largest_idx = i
if remaining > 1
return largest * math.pow(10, remaining - 1) + part2_rec(bank, largest_idx + 1, remaining - 1)
else
return largest
func part2[lines: Array] : void
sum := 0
for i in 0..lines->size
line : str = array.nth(lines, i)
sum += part2_rec(line, 0, 12)
io.println_i64(sum)
func main[] : i64
~input, ok := io.read_text_file("input.txt")
if !ok
panic("failed to open input.txt")
lines := str.split(input, "\n")
part1(lines)
part2(lines)