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 := mem.alloc(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 = 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 = 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)