day 22 task 1

This commit is contained in:
Johannes
2020-01-11 12:09:23 +01:00
parent d18cfca5ed
commit 39e2e27533
6 changed files with 161 additions and 1 deletions

View File

@@ -1,5 +1,5 @@
mod tasks;
fn main() {
tasks::day18::run();
tasks::day22::run();
}

View File

@@ -80,6 +80,7 @@ struct StateSummaryDist(Pos, HashSet<char>, usize);
#[derive(PartialEq, Eq, Clone)]
struct Map(Vec<Vec<char>>);
#[allow(dead_code)]
impl Map {
fn coordinate_of(&self, symbol: char) -> Vec<Pos> {
self.0

57
src/tasks/day22.rs Normal file
View File

@@ -0,0 +1,57 @@
use std::collections::VecDeque;
#[allow(dead_code)]
pub fn run() {
let input = std::fs::read_to_string("input/day22.txt").unwrap();
task1(input);
}
type Deck = VecDeque<u16>;
fn task1(input: String) {
let deck_size = 10_007;
let mut deck: Deck = (0..deck_size).collect();
for line in input.lines() {
if line.starts_with("deal into new stack") {
deck = into_new_stack(deck);
} else if line.starts_with("cut") {
let s = line.split("cut ").collect::<Vec<_>>();
let n = s[1].parse::<i32>().unwrap();
deck = cut_cards(deck, n);
} else if line.starts_with("deal with increment") {
let s = line.split("deal with increment ").collect::<Vec<_>>();
let n = s[1].parse::<usize>().unwrap();
deck = deal_with_increment(deck, n);
}
}
let pos_2019 = deck
.iter()
.enumerate()
.find_map(|(i, card)| if *card == 2019 { Some(i) } else { None });
println!("Result: {:?}", pos_2019);
}
fn into_new_stack(deck: Deck) -> Deck {
deck.into_iter().rev().collect()
}
fn cut_cards(mut deck: Deck, n: i32) -> Deck {
if n > 0 {
deck.rotate_left(n as usize);
} else {
deck.rotate_right(-n as usize);
};
deck
}
fn deal_with_increment(deck: Deck, n: usize) -> Deck {
let mut new = vec![0; deck.len()];
let mut index = 0;
for card in deck.into_iter() {
new[index] = card;
index = (index + n) % new.len();
}
new.into_iter().collect()
}

View File

@@ -325,6 +325,7 @@ impl Pos {
}
}
#[allow(unused)]
mod test {
use super::Field;
#[test]

View File

@@ -16,4 +16,5 @@ pub mod day16;
pub mod day17;
pub mod day18;
pub mod day21;
pub mod day22;
pub mod day24;