Advertisement
Guest User

Day 25 AoC

a guest
Dec 25th, 2021
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 2.09 KB | None | 0 0
  1. use std::mem::swap;
  2. use itertools::Itertools;
  3. use crate::day25::Floor::{East, Empty, South};
  4.  
  5. #[derive(Clone, PartialEq)]
  6. enum Floor {
  7.     Empty,
  8.     East,
  9.     South,
  10. }
  11.  
  12.  
  13. pub fn day25_1() {
  14.     let mut input = include_str!("../temp25").lines().map(|x| {
  15.         x.chars().map(|x| {
  16.             match x {
  17.                 '.' => {Empty}
  18.                 '>' => {East}
  19.                 'v' => {South}
  20.                 _ => { unreachable!() }
  21.             }
  22.         }).collect_vec()
  23.     }).collect_vec();
  24.  
  25.     let mut steps = 0;
  26.     //let mut input2 = Vec::new();
  27.     //for _ in 0..input.len() {
  28.     //    input2.append(&mut vec![Empty; input.len()])
  29.     //}
  30.     loop {
  31.         let mut changed = false;
  32.         let mut input2 = input.clone();
  33.         for (i, row) in input.iter().enumerate() {
  34.             for (j, val) in row.iter().enumerate()
  35.             {
  36.                 //first east
  37.                 if *val == East {
  38.                     let new_j = if j + 1 == row.len() { 0 } else { j + 1 };
  39.                     //let new_j = (j + 1)  % row.len();
  40.                     if input[i][new_j] == Empty {
  41.                         input2[i][new_j] = East;
  42.                         input2[i][j] = Empty;
  43.                         changed = true
  44.                     }
  45.                 }
  46.             }
  47.         }
  48.         input = input2;
  49.         let mut input2 = input.clone();
  50.         for (i, row) in input.iter().enumerate() {
  51.             for (j, val) in row.iter().enumerate()
  52.             {
  53.                 //then south
  54.                 if *val == South {
  55.                     let new_i = if i + 1 == input.len() { 0 } else { i + 1 };
  56.                     //let new_i = (i + 1) % input.len();
  57.                     if input[new_i][j] == Empty {
  58.                         input2[new_i][j] = South;
  59.                         input2[i][j] = Empty;
  60.                         changed = true;
  61.                     }
  62.                 }
  63.             }
  64.         }
  65.         steps += 1;
  66.         if !changed {
  67.             break;
  68.         }
  69.         input = input2;
  70.     }
  71.     println!("{}", steps);
  72.     return;
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement