#[path = "../lib.rs"] mod lib; fn int_to_snafu(i: u64) -> String { let mut rest = i; let mut s = String::new(); while rest != 0 { let (c, carry) = match rest % 5 { 2 => ('2', false), 1 => ('1', false), 0 => ('0', false), 4 => ('-', true), 3 => ('=', true), _ => unreachable!(), }; if carry { rest += 5; } rest /= 5; s.insert(0, c); } return s; } fn snafu_to_int(s: String) -> u64 { let mut i: i64 = 0; for c in s.chars() { i *= 5; i += match c { '2' => 2, '1' => 1, '0' => 0, '-' => -1, '=' => -2, _ => unreachable!(), } } return i as u64; } fn main() { let sum = lib::iter_input() .map(|line| snafu_to_int(line.to_string())) .sum(); println!("part1: {}", sum); println!("part1: {}", int_to_snafu(sum)); }