From f70ffaa9b3819ddea1942e860ab96826f6244011 Mon Sep 17 00:00:00 2001 From: Lucas Resch <lucas.resch@gmx.de> Date: Mon, 4 Dec 2023 20:48:02 +0100 Subject: [PATCH] 2023-04: Avoid HashMap overhead --- 2023-rust/README.md | 10 +++++----- 2023-rust/src/bin/04.rs | 11 ++++------- 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/2023-rust/README.md b/2023-rust/README.md index 34894b0..4288add 100644 --- a/2023-rust/README.md +++ b/2023-rust/README.md @@ -9,12 +9,12 @@ Solutions for [Advent of Code](https://adventofcode.com/) in [Rust](https://www. | Day | Part 1 | Part 2 | | :---: | :---: | :---: | -| [Day 1](./src/bin/01.rs) | `64.6µs` | `639.8µs` | -| [Day 2](./src/bin/02.rs) | `41.8µs` | `48.0µs` | -| [Day 3](./src/bin/03.rs) | `430.0µs` | `424.2µs` | -| [Day 4](./src/bin/04.rs) | `98.3µs` | `47.2ms` | +| [Day 1](./src/bin/01.rs) | `65.0µs` | `634.6µs` | +| [Day 2](./src/bin/02.rs) | `40.9µs` | `47.4µs` | +| [Day 3](./src/bin/03.rs) | `427.6µs` | `424.2µs` | +| [Day 4](./src/bin/04.rs) | `96.0µs` | `19.6ms` | -**Total: 48.95ms** +**Total: 21.34ms** <!--- benchmarking table ---> ## Usage diff --git a/2023-rust/src/bin/04.rs b/2023-rust/src/bin/04.rs index 3bc0115..2273542 100644 --- a/2023-rust/src/bin/04.rs +++ b/2023-rust/src/bin/04.rs @@ -1,4 +1,4 @@ -use std::collections::{HashMap, VecDeque}; +use std::collections::VecDeque; use itertools::Itertools; @@ -43,17 +43,14 @@ pub fn part_one(input: &str) -> Option<u32> { pub fn part_two(input: &str) -> Option<u32> { let cards = parse_input(input); - let lookup: HashMap<u32, Vec<u32>> = - cards.iter().map(|card| (card.id, card.copies())).collect(); + let lookup = cards.iter().map(|card| card.copies()).collect_vec(); let mut queue = VecDeque::from(cards.iter().map(|card| card.id).collect::<Vec<u32>>()); - let mut total = 0; - while let Some(card) = queue.pop_front() { + while let Some(id) = queue.pop_front() { total += 1; - let copies = lookup.get(&card).unwrap(); - queue.extend(copies); + queue.extend(&lookup[id as usize]); } Some(total)