From 5502c35f06c2fb3d92721a55521ad0277a7e669f Mon Sep 17 00:00:00 2001 From: Daniel Bulant Date: Sun, 17 Dec 2023 12:21:14 +0100 Subject: [PATCH] experiment with less memory --- 2023/16/src/main.rs | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/2023/16/src/main.rs b/2023/16/src/main.rs index c2a4585..40244ed 100644 --- a/2023/16/src/main.rs +++ b/2023/16/src/main.rs @@ -1,4 +1,4 @@ -use std::{fs::File, io::{BufReader, BufRead, Write}, ops::Add, fmt::Debug, collections::HashSet, hash::{Hasher, BuildHasherDefault}, process::exit}; +use std::{fs::File, io::{BufReader, BufRead, Write}, ops::Add, fmt::Debug, hash::Hasher}; fn main() { part1(); @@ -73,10 +73,11 @@ struct Beam { // ]; impl Beam { - fn to_u64(&self) -> usize { + fn to_nums(&self) -> (usize, usize) { let vecval = (self.vector.x+1)*self.vector.x.abs()+(self.vector.y+2)*self.vector.y.abs(); let val = (self.point.x * 110 + self.point.y + 1) << 2 | vecval as usize; - val + (val >> 6, 1 << (val & 63)) + // 0b1000000000000000000000000000000000000000000000000000000000000000 } } @@ -281,10 +282,11 @@ fn setup() -> (Point, Vec>, Vec>) { fn get_count(max_point: Point, rows: Vec>, columns: Vec>, beam: Beam) -> usize { let mut energized : Vec> = vec![vec![false; max_point.x]; max_point.y]; // let mut beams_set = HashSet::>::default(); - let mut beams_set_vec = vec![false; (max_point.x + 1) * (max_point.y + 1) * 4]; + let mut beams_set_vec = vec![0; (max_point.x + 1) * (max_point.y + 1) / 8 + 1]; let mut beams : Vec = vec![beam]; // beams_set.insert(beams[0]); - beams_set_vec[beams[0].to_u64()] = true; + let b0 = beams[0].to_nums(); + beams_set_vec[b0.0] = b0.1; let mut offset = 0; @@ -337,9 +339,9 @@ fn get_count(max_point: Point, rows: Vec>, columns: Vec