Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use std::time::Instant;
- fn distribute_presents(street: &mut [usize], start_index: usize) -> (usize, usize) {
- let street_length = street.len();
- let mut presents = street[start_index];
- street[start_index] = 0;
- let steps = presents;
- if presents > street_length - 1 {
- let number_of_presents = presents.div_euclid(street_length);
- presents -= number_of_presents * street_length;
- street.iter_mut().for_each(|p| *p += number_of_presents);
- }
- // Check rest of presents:
- let mut index = (start_index + 1) % street_length;
- for _ in 0..presents {
- street[index] += 1;
- index = (index + 1) % street_length;
- }
- (steps, index)
- }
- fn puzzle1() {
- let mut street: Vec<usize> = include_str!("../../data/tweakers.input")
- .split_whitespace()
- .map(|s| s.parse::<usize>().expect("Invalid input"))
- .collect();
- println!("Start processing input... ");
- let start = Instant::now();
- let mut total_steps = 0;
- let mut start_index = 0;
- loop {
- let (steps, index) = distribute_presents(&mut street, start_index);
- total_steps += steps + 1;
- start_index = index;
- if steps == 0 {
- break;
- }
- }
- println!("{:?}", total_steps - 1);
- let elapsed = start.elapsed();
- println!("total time elapsed: {:?}", elapsed);
- }
- fn puzzle2() {
- let mut street: Vec<usize> = include_str!("../../data/tweakers.input")
- .split_whitespace()
- .map(|s| s.parse::<usize>().expect("Invalid input") * 2025)
- .collect();
- println!("Start processing input... ");
- let start = Instant::now();
- let mut total_steps = 0;
- let mut start_index = 0;
- loop {
- let (steps, index) = distribute_presents(&mut street, start_index);
- total_steps += steps + 1;
- start_index = index;
- if steps == 0 {
- break;
- }
- }
- println!("{:?}", total_steps - 1);
- let elapsed = start.elapsed();
- println!("total time elapsed: {:?}", elapsed);
- }
- fn main() {
- puzzle1();
- puzzle2();
- }
Advertisement
Add Comment
Please, Sign In to add comment