use std::error::Error;
use std::path::Path;
-fn extract_values(line: &str) -> (i32, i32) {
+fn extract_values(line: &str) -> (i64, i64) {
let (_, xy) = line.split_once(":").unwrap();
let (x, y) = xy.split_once(",").unwrap();
- let x = x[3..x.len()].parse::<i32>().unwrap();
- let y = y[3..y.len()].parse::<i32>().unwrap();
+ let x = x[3..x.len()].parse::<i64>().unwrap();
+ let y = y[3..y.len()].parse::<i64>().unwrap();
(x, y)
}
-fn run_part1(input: &str) -> Result<u32, Box<dyn Error>> {
- println!("Running {} - part 1", get_day());
-
- let res: u32 = input.split("\n\n")
+fn solve(input: &str, offset: i64) -> u64 {
+ input.split("\n\n")
.map(|list| {
let list: Vec<_> = list.lines().collect();
let (xa, ya) = extract_values(list[0]);
let (xb, yb) = extract_values(list[1]);
let (xp, yp) = extract_values(list[2]);
+ let (xp, yp) = (xp + offset, yp + offset);
let det = xa*yb - ya*xb;
match det {
0 => 0,
else {
let a = an / det;
let b = bn / det;
- (a*3 + b) as u32
+ (a*3 + b) as u64
}
}
}
})
- .sum();
+ .sum()
+}
- Ok(res)
+fn run_part1(input: &str) -> Result<u64, Box<dyn Error>> {
+ println!("Running {} - part 1", get_day());
+ Ok(solve(input, 0))
}
-fn run_part2(input: &str) -> Result<u32, Box<dyn Error>> {
+fn run_part2(input: &str) -> Result<u64, Box<dyn Error>> {
println!("Running {} - part 2", get_day());
-
- Ok(0)
+ Ok(solve(input, 10000000000000))
}
pub fn run(input: &str) -> Result<(), Box<dyn Error>> {
fn test_part1() {
assert_eq!(480, run_part1(TEXT_INPUT).unwrap());
}
-
- #[test]
- fn test_part2() {
- assert_eq!(0, run_part2(TEXT_INPUT).unwrap());
- }
}