use fmt; use io; use math; use os; use strconv; use strings; fn digits(num: u64) u64 = { return math::ceilf64(math::log10f64(num: f64)): u64; }; export fn main() void = { let handle = os::open("input.txt")!; defer io::close(handle)!; let buf = io::drain(handle) as []u8; defer free(buf); let input = strings::fromutf8_unsafe(buf); let range_strings = strings::split(input, ",")!; let answer: u64 = 0; for (let i: size = 0; i < len(range_strings); i += 1) { let range_ends = strings::cut(strings::rtrim(range_strings[i], '\n'), "-"); let start = strconv::stou64(range_ends.0)!; let end = strconv::stou64(range_ends.1)!; let start_digits = digits(start); let end_digits = digits(end); if (start_digits % 2 != 0 && end_digits % 2 != 0 && start_digits == end_digits) { continue; }; for (let j = start; j <= end; j += 1) { let digits = digits(j); if (digits % 2 == 0) { let num_str = strconv::u64tos(j); let first_half = strings::sub(num_str, 0, len(num_str) / 2); let second_half = strings::sub(num_str, len(num_str) / 2, len(num_str)); if (first_half == second_half) { answer += j; }; }; }; }; fmt::printfln("Answer: {}", answer)!; };