Guest User

Untitled

a guest
Nov 28th, 2025
41
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 2.12 KB | None | 0 0
  1. use std::time::Instant;
  2.  
  3. fn distribute_presents(street: &mut [usize], start_index: usize) -> (usize, usize) {
  4.     let street_length = street.len();
  5.  
  6.     let mut presents = street[start_index];
  7.     street[start_index] = 0;
  8.     let steps = presents;
  9.  
  10.     if presents > street_length - 1 {
  11.         let number_of_presents = presents.div_euclid(street_length);
  12.         presents -= number_of_presents * street_length;
  13.         street.iter_mut().for_each(|p| *p += number_of_presents);
  14.     }
  15.     // Check rest of presents:
  16.     let mut index = (start_index + 1) % street_length;
  17.     for _ in 0..presents {
  18.         street[index] += 1;
  19.         index = (index + 1) % street_length;
  20.     }
  21.     (steps, index)
  22. }
  23.  
  24. fn puzzle1() {
  25.     let mut street: Vec<usize> = include_str!("../../data/tweakers.input")
  26.         .split_whitespace()
  27.         .map(|s| s.parse::<usize>().expect("Invalid input"))
  28.         .collect();
  29.     println!("Start processing input... ");
  30.  
  31.     let start = Instant::now();
  32.     let mut total_steps = 0;
  33.     let mut start_index = 0;
  34.     loop {
  35.         let (steps, index) = distribute_presents(&mut street, start_index);
  36.         total_steps += steps + 1;
  37.         start_index = index;
  38.         if steps == 0 {
  39.             break;
  40.         }
  41.     }
  42.     println!("{:?}", total_steps - 1);
  43.  
  44.     let elapsed = start.elapsed();
  45.     println!("total time elapsed: {:?}", elapsed);
  46. }
  47.  
  48. fn puzzle2() {
  49.     let mut street: Vec<usize> = include_str!("../../data/tweakers.input")
  50.         .split_whitespace()
  51.         .map(|s| s.parse::<usize>().expect("Invalid input") * 2025)
  52.         .collect();
  53.     println!("Start processing input... ");
  54.  
  55.     let start = Instant::now();
  56.     let mut total_steps = 0;
  57.     let mut start_index = 0;
  58.     loop {
  59.         let (steps, index) = distribute_presents(&mut street, start_index);
  60.         total_steps += steps + 1;
  61.         start_index = index;
  62.         if steps == 0 {
  63.             break;
  64.         }
  65.     }
  66.     println!("{:?}", total_steps - 1);
  67.  
  68.     let elapsed = start.elapsed();
  69.     println!("total time elapsed: {:?}", elapsed);
  70. }
  71.  
  72. fn main() {
  73.     puzzle1();
  74.     puzzle2();
  75. }
  76.  
Advertisement
Add Comment
Please, Sign In to add comment