use std::error::Error; use std::fs::File; use std::io::{self, BufRead}; use std::vec::Vec; fn main() -> Result<(), Box> { let file = File::open("inputs/day22.txt")?; let mut lines = io::BufReader::new(file).lines().map(|l| l.unwrap()); lines.next(); let mut deck1: Vec = Vec::new(); while let Some(line) = lines.next() { if line == "" { break; } deck1.push(line.parse().expect("Unable to parse card number")); } lines.next(); let mut deck2: Vec = Vec::new(); while let Some(line) = lines.next() { if line == "" { break; } deck2.push(line.parse().expect("Unable to parse card number")); } while deck1.len() != 0 && deck2.len() != 0 { println!("Deck 1: {:?}", deck1); println!("Deck 2: {:?}", deck2); let card1 = deck1.remove(0); let card2 = deck2.remove(0); if card1 > card2 { println!("Player 1 wins"); deck1.push(card1); deck1.push(card2); } else { println!("Player 2 wins"); deck2.push(card2); deck2.push(card1); } } let winning_deck = if deck1.len() != 0 { deck1 } else { deck2 }; let points = winning_deck .iter() .rev() .enumerate() .map(|(pos, card)| ((pos + 1) as u32) * card) .fold(0, |p, acc| p + acc); println!("Points: {}", points); Ok(()) } #[cfg(test)] mod tests { use crate::*; }