Skip to content

Instantly share code, notes, and snippets.

Created December 4, 2017 15:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save anonymous/7307b01f47b2b93a5b8dab3a06efffcd to your computer and use it in GitHub Desktop.
Save anonymous/7307b01f47b2b93a5b8dab3a06efffcd to your computer and use it in GitHub Desktop.
Rust code shared from the playground
fn main() {
println!("Ring number for 12 is {}", get_ring_number(12));
//println!("Ring number for 20 is {}", get_ring_number(20));
//println!("Ring number for 28 is {}", get_ring_number(28));
//println!("Ring number for 46 is {}", get_ring_number(46));
println!("-----");
//println!("distance to closest railroad for 12 is {}", find_distance_to_closest_railroad(12));
//println!("closest rr to 12 is {}", find_closest_railroad(12));
//println!("part 2 of 12 is {}", get_ring_number(find_closest_railroad(12) as usize));
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 lower_perfect = square_root as i64;
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();
}
}
}
fn find_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 >= num - railroad_4 {
return railroad_4;
} else {
return railroad_3;
}
} else {
if num - railroad_1 >= num - railroad_2 {
return railroad_2;
} else {
return railroad_1;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment