use fmt; use io; use math; use os; use strconv::{stou8}; use strings::{fromutf8_unsafe, split, sub}; fn joltage(bank: str) u64 = { let digits: [12]u8 = [0...]; let indexes: [12]size = [0...]; let total: u64 = 0; for (let i: size = 0; i < 12; i += 1) { let next_index: size = 0; if (i > 0) next_index = indexes[i - 1] + 1; if (i > next_index) next_index = i; for (let j: size = next_index; j < len(bank); j += 1) { let val = stou8(sub(bank, j, j + 1))!; if (val > digits[i] && j < len(bank) - (11 - i)) { digits[i] = val; indexes[i] = j; }; }; total += (digits[i]: u64 * math::powi64(10, 11 - i: uint): u64); }; return total; }; export fn main() void = { let handle = os::open("input.txt")!; defer io::close(handle)!; let buf = io::drain(handle)!; defer free(buf); let lines = split(fromutf8_unsafe(buf), "\n")!; let output: u64 = 0; for (let line .. lines) if (line != "") output += joltage(line); fmt::printfln("Answer: {}", output)!; };