AoC2020/src/bin/day22.rs

61 lines
1.5 KiB
Rust

use std::error::Error;
use std::fs::File;
use std::io::{self, BufRead};
use std::vec::Vec;
fn main() -> Result<(), Box<dyn Error>> {
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<u32> = 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<u32> = 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::*;
}