day 22 task 1
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
mod tasks;
|
||||
|
||||
fn main() {
|
||||
tasks::day18::run();
|
||||
tasks::day22::run();
|
||||
}
|
||||
|
||||
@@ -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
57
src/tasks/day22.rs
Normal 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()
|
||||
}
|
||||
@@ -325,6 +325,7 @@ impl Pos {
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(unused)]
|
||||
mod test {
|
||||
use super::Field;
|
||||
#[test]
|
||||
|
||||
@@ -16,4 +16,5 @@ pub mod day16;
|
||||
pub mod day17;
|
||||
pub mod day18;
|
||||
pub mod day21;
|
||||
pub mod day22;
|
||||
pub mod day24;
|
||||
|
||||
Reference in New Issue
Block a user