Files
zern/examples/puzzles/aoc2025_03.zr

52 lines
1.3 KiB
Plaintext

func part1[lines: Array] : void
let sum = 0
for i in 0..lines->size
let line: str = array.nth(lines, i)
let largest = 0
for j in 0..str.len(line)
for k in (j+1)..str.len(line)
let s: str = mem.alloc(3) as str
s[0] = line[j]
s[1] = line[k]
s[2] = 0
let n: i64 = str.parse_i64(s)
if n > largest
largest = n
sum = sum + largest
io.println_i64(sum)
// had to cheat this one
func part2_rec[bank: str, start: i64, remaining: i64] : i64
let largest = 0
let largest_idx: i64 = start
let len: i64 = str.len(bank)
for i in (start)..(len-remaining+1)
let v: i64 = (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
let sum = 0
for i in 0..lines->size
let line: str = array.nth(lines, i)
sum = sum + part2_rec(line, 0, 12)
io.println_i64(sum)
func main[] : i64
let lines: Array = must(io.read_text_file?("input.txt")) |> str.split("\n")
part1(lines)
part2(lines)