//! # Day 5: Supply Stacks use std::collections::VecDeque; fn extract_crates_in_layer(layer: &str, piles_number: usize) -> Vec { let mut crates: Vec = Vec::with_capacity(piles_number); for i in 0..piles_number { let crate_name_idx: usize = i * 4 + 1; let crate_name: char = layer.chars().nth(crate_name_idx).unwrap(); crates[i] = crate_name; } crates } fn parse_crates_piles(entrepot: &str) -> Vec> { let mut piles: Vec> = Vec::new(); let mut number_of_piles: usize = 0; let mut entrepot_layers = entrepot.lines(); let last_line = entrepot_layers.nth_back(0); let piles_number: usize = (last_line.expect("reason").len() + 1) / 4 as usize; for pile_idx in 0..piles_number { piles[pile_idx] = VecDeque::new(); } let j = 0; let number_of_layers: usize = entrepot_layers.clone().count(); for layer in entrepot_layers { if j != number_of_layers - 1 { // Not the last line let crates = extract_crates_in_layer(layer, piles_number); // Enqueue below the pile for pile_idx in 0..crates.len() { piles[pile_idx].push_back(crates[pile_idx]); } } } piles } fn main() { let input_file = "../data/sample.txt"; }