56 lines
1.3 KiB
Plaintext
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 = 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)
|