79 lines
2.1 KiB
Plaintext
79 lines
2.1 KiB
Plaintext
func concat[a: i64, b: i64] : i64
|
|
let a_str = str.from_i64(a)
|
|
let b_str = str.from_i64(b)
|
|
let ab_str = str.concat(a_str, b_str)
|
|
let out = str.parse_i64(ab_str)
|
|
// without freeing the program works but leaks 2GB of memory :p
|
|
mem.free(a_str)
|
|
mem.free(b_str)
|
|
mem.free(ab_str)
|
|
return out
|
|
|
|
func solve[ops: Array, e: Array] : i64
|
|
let e_1: Array = array.nth(e, 1)
|
|
let n = e_1->size - 1
|
|
let indices = []
|
|
for i in 0..n
|
|
array.push(indices, 0)
|
|
|
|
while true
|
|
let res: i64 = array.nth(e_1, 0)
|
|
for i in 0..n
|
|
let op: str = array.nth(ops, array.nth(indices, i))
|
|
|
|
if str.equal(op, "add")
|
|
res = res + array.nth(e_1, i + 1)
|
|
else if str.equal(op, "mul")
|
|
res = res * array.nth(e_1, i + 1)
|
|
else if str.equal(op, "concat")
|
|
res = concat(res, array.nth(e_1, i + 1))
|
|
if res == array.nth(e, 0)
|
|
return res
|
|
|
|
let done = true
|
|
let i = n - 1
|
|
|
|
while i >= 0
|
|
array.set(indices, i, array.nth(indices, i) + 1)
|
|
if array.nth(indices, i) < ops->size
|
|
done = false
|
|
break
|
|
array.set(indices, i, 0)
|
|
i = i - 1
|
|
|
|
if done
|
|
return 0
|
|
|
|
func part1[equations: Array] : void
|
|
let out = 0
|
|
|
|
for i in 0..equations->size
|
|
out = out + solve(["add", "mul"], array.nth(equations, i))
|
|
|
|
io.println_i64(out)
|
|
|
|
func part2[equations: Array] : void
|
|
let out = 0
|
|
|
|
for i in 0..equations->size
|
|
out = out + solve(["add", "mul", "concat"], array.nth(equations, i))
|
|
|
|
io.println_i64(out)
|
|
|
|
func main[] : i64
|
|
let lines = must(io.read_text_file?("input.txt")) |> str.split("\n")
|
|
let equations = []
|
|
|
|
for i in 0..lines->size
|
|
let line: str = array.nth(lines, i)
|
|
let parts = str.split(line, ": ")
|
|
|
|
let xs = str.split(array.nth(parts, 1), " ")
|
|
for j in 0..xs->size
|
|
array.set(xs, j, str.parse_i64(array.nth(xs, j)))
|
|
|
|
array.push(equations, [str.parse_i64(array.nth(parts, 0)), xs])
|
|
|
|
part1(equations)
|
|
part2(equations)
|