Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use std::mem::swap;
- use itertools::Itertools;
- use crate::day25::Floor::{East, Empty, South};
- #[derive(Clone, PartialEq)]
- enum Floor {
- Empty,
- East,
- South,
- }
- pub fn day25_1() {
- let mut input = include_str!("../temp25").lines().map(|x| {
- x.chars().map(|x| {
- match x {
- '.' => {Empty}
- '>' => {East}
- 'v' => {South}
- _ => { unreachable!() }
- }
- }).collect_vec()
- }).collect_vec();
- let mut steps = 0;
- //let mut input2 = Vec::new();
- //for _ in 0..input.len() {
- // input2.append(&mut vec![Empty; input.len()])
- //}
- loop {
- let mut changed = false;
- let mut input2 = input.clone();
- for (i, row) in input.iter().enumerate() {
- for (j, val) in row.iter().enumerate()
- {
- //first east
- if *val == East {
- let new_j = if j + 1 == row.len() { 0 } else { j + 1 };
- //let new_j = (j + 1) % row.len();
- if input[i][new_j] == Empty {
- input2[i][new_j] = East;
- input2[i][j] = Empty;
- changed = true
- }
- }
- }
- }
- input = input2;
- let mut input2 = input.clone();
- for (i, row) in input.iter().enumerate() {
- for (j, val) in row.iter().enumerate()
- {
- //then south
- if *val == South {
- let new_i = if i + 1 == input.len() { 0 } else { i + 1 };
- //let new_i = (i + 1) % input.len();
- if input[new_i][j] == Empty {
- input2[new_i][j] = South;
- input2[i][j] = Empty;
- changed = true;
- }
- }
- }
- }
- steps += 1;
- if !changed {
- break;
- }
- input = input2;
- }
- println!("{}", steps);
- return;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement