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)