Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use std::collections::VecDeque;
- use std::collections::HashMap;
- fn cycle(i: i32, circle: &mut VecDeque<usize>) {
- if i > 0 {
- let v = circle.pop_back().unwrap_or(0);
- circle.push_front(v);
- cycle(i - 1, circle);
- } else if i < 0 {
- let v = circle.pop_front().unwrap_or(0);
- circle.push_back(v);
- cycle(i + 1, circle);
- }
- }
- fn main() {
- let players: usize = 413;
- let last_marble_worth: usize = 7108200;
- let mut circle: VecDeque<usize> = VecDeque::new();
- let mut scores = HashMap::new();
- circle.push_back(0);
- for marble_value in 1..last_marble_worth+1 {
- if marble_value % 23 != 0 {
- cycle(2, &mut circle);
- circle.push_back(marble_value);
- } else {
- let player = ((marble_value as i32) - 1) % (players as i32);
- let score = scores.entry(player).or_insert(0);
- cycle(-7, &mut circle);
- *score += marble_value + circle.pop_back().unwrap_or(0);
- }
- }
- println!("{}", scores.values().max().unwrap_or(&0));
- }
Add Comment
Please, Sign In to add comment