-
-
Save sts10/57753c4b0f413e84d2a66c5028d889c9 to your computer and use it in GitHub Desktop.
Advent of Code 2017 Day 3, part 1
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
fn main() { | |
println!("Ring number for 12 is {}", get_ring_number(12)); | |
println!("distance to closest railroad for 12 is {}", find_distance_to_closest_railroad(12)); | |
println!("total steps for 12 is {}", find_distance_to_closest_railroad(12) + get_ring_number(12)); | |
println!("total steps for 23 is {}", find_distance_to_closest_railroad(23) + get_ring_number(23)); | |
println!("total steps for 1024 is {}", find_distance_to_closest_railroad(1024) + get_ring_number(1024)); | |
println!("total steps for 347991 is {}", find_distance_to_closest_railroad(347991) + get_ring_number(347991)); | |
} | |
fn get_ring_number(num: usize) -> i64 { | |
let square_root: f64 = (num as f64).sqrt(); | |
let upper_perfect = square_root as i64 + 1; | |
println!("upper perfect is {}", upper_perfect); | |
if upper_perfect % 2 != 0{ | |
let ring_number = (upper_perfect - 1)/ 2; | |
return ring_number; | |
} else { | |
let ring_number = upper_perfect / 2; | |
return ring_number; | |
} | |
} | |
fn find_distance_to_closest_railroad(num: i64) -> i64 { | |
let square_root: f64 = (num as f64).sqrt(); | |
let upper_perfect: i64 = (square_root as i64 + 1) as i64; | |
println!("upper perfect for {} is {}", num, upper_perfect); | |
let odd_perfect: i64; | |
if upper_perfect % 2 != 0 { | |
odd_perfect = upper_perfect; | |
} else { | |
odd_perfect = upper_perfect + 1; | |
} | |
let length_of_side: i64 = odd_perfect; | |
println!("odd perfect for {} is {}", num, odd_perfect); | |
let last_of_row: i64 = odd_perfect * odd_perfect; | |
let first_of_row = (odd_perfect - 2) * (odd_perfect - 2) + 1; | |
let railroad_4: i64 = last_of_row - (length_of_side - 1)/ 2; | |
let railroad_3: i64 = railroad_4 - length_of_side + 1; | |
let railroad_2: i64 = railroad_3 - length_of_side + 1; | |
let railroad_1: i64 = railroad_2 - length_of_side + 1; | |
// find which of the four railroads are closest to num | |
if upper_perfect % 2 != 0{ | |
if (num - railroad_3).abs() >= (num - railroad_4).abs() { | |
return (num - railroad_4).abs(); | |
} else { | |
return (num - railroad_3).abs(); | |
} | |
} else { | |
println!("railroad 1 is {}, railroad 2 is {}, and num is {}", railroad_1, railroad_2, num); | |
if (num - railroad_1).abs() >= (num - railroad_2).abs() { | |
return (num - railroad_2).abs(); | |
} else { | |
return (num - railroad_1).abs(); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment