day09 part 1
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
fn main() {
|
fn main() {
|
||||||
aoc_2018::tasks::day08::both();
|
aoc_2018::tasks::day09::task1();
|
||||||
// aoc_2018::tasks::day08::task2();
|
// aoc_2018::tasks::day08::task2();
|
||||||
}
|
}
|
||||||
|
|||||||
36
src/tasks/day09.rs
Normal file
36
src/tasks/day09.rs
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
const PLAYERS: usize = 468;
|
||||||
|
const MODULO: usize = 23;
|
||||||
|
const HIGHEST_MARBLE: usize = 71843;
|
||||||
|
|
||||||
|
pub fn task1() {
|
||||||
|
let mut player_score = [0usize; PLAYERS];
|
||||||
|
let mut current_player = 1;
|
||||||
|
let mut current_index: usize = 0;
|
||||||
|
let mut deck: Vec<usize> = Vec::new();
|
||||||
|
deck.push(0);
|
||||||
|
for marble in 1..=HIGHEST_MARBLE {
|
||||||
|
if marble % MODULO == 0 {
|
||||||
|
current_index = rem(current_index, 7, deck.len());
|
||||||
|
player_score[current_player] += marble;
|
||||||
|
player_score[current_player] += deck.remove(current_index);
|
||||||
|
} else {
|
||||||
|
current_index = (current_index + 2) % deck.len();
|
||||||
|
deck.insert(current_index, marble);
|
||||||
|
}
|
||||||
|
current_player = (current_player + 1) % PLAYERS;
|
||||||
|
}
|
||||||
|
|
||||||
|
let result = player_score.iter().max().unwrap();
|
||||||
|
println!("The highest score is {}", result); // 385469 too low
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn rem(a: usize, sub: usize, m: usize) -> usize {
|
||||||
|
if sub > a {
|
||||||
|
let mut x = a as isize;
|
||||||
|
x -= sub as isize;
|
||||||
|
x = x % m as isize;
|
||||||
|
(x + m as isize) as usize
|
||||||
|
} else {
|
||||||
|
(a - sub) % m
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,3 +6,4 @@ pub mod day05;
|
|||||||
pub mod day06;
|
pub mod day06;
|
||||||
pub mod day07;
|
pub mod day07;
|
||||||
pub mod day08;
|
pub mod day08;
|
||||||
|
pub mod day09;
|
||||||
|
|||||||
Reference in New Issue
Block a user