Watch
1
0
Fork
You've already forked advent-of-code
0

Remove the garbage-collection code (lol)

This commit is contained in:
Jeremy Kaplan 2022-12-17 17:01:38 -08:00
commit 5f8bee679c

View file

@ -181,7 +181,6 @@ impl From<Vec<bool>> for Row {
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
struct Tower { struct Tower {
grid: Vec<Row>, grid: Vec<Row>,
rows_removed: usize,
pieces: usize, pieces: usize,
} }
@ -189,13 +188,12 @@ impl Tower {
fn new() -> Self { fn new() -> Self {
Self { Self {
grid: vec![], grid: vec![],
rows_removed: 0,
pieces: 0, pieces: 0,
} }
} }
fn height(&self) -> usize { fn height(&self) -> usize {
self.grid.len() + self.rows_removed self.grid.len()
} }
fn spawn(&mut self, piece: Piece, jets: &mut impl Iterator<Item = Direction>) -> usize { fn spawn(&mut self, piece: Piece, jets: &mut impl Iterator<Item = Direction>) -> usize {
@ -204,11 +202,11 @@ impl Tower {
self.grid.extend([Row::EMPTY; 4]); self.grid.extend([Row::EMPTY; 4]);
let mut dj = 0; let mut jets_used = 0;
loop { loop {
// Push! // Push!
let dir = jets.next().unwrap(); let dir = jets.next().unwrap();
dj += 1; jets_used += 1;
if let Some(new_block) = block.push(dir) { if let Some(new_block) = block.push(dir) {
if self.can_place(y, &new_block) { if self.can_place(y, &new_block) {
block = new_block; block = new_block;
@ -230,7 +228,7 @@ impl Tower {
self.clean(); self.clean();
self.pieces += 1; self.pieces += 1;
dj jets_used
} }
fn clean(&mut self) { fn clean(&mut self) {
@ -316,8 +314,7 @@ fn find_loop(jets: Vec<Direction>) -> (Tower, State) {
break; break;
} }
let dj = tower.spawn(piece, &mut jets_iter); jets_used += tower.spawn(piece, &mut jets_iter);
jets_used += dj;
} }
(tower, loop_start.unwrap().0) (tower, loop_start.unwrap().0)
@ -355,8 +352,7 @@ fn run_loop(base_tower: &Tower, jets: Vec<Direction>, loop_start: &State) -> Loo
}; };
} }
let dj = tower.spawn(piece, &mut jets); jets_used += tower.spawn(piece, &mut jets);
jets_used += dj;
} }
unreachable!(); unreachable!();
@ -382,7 +378,7 @@ impl Tower {
let width = format!("{}", self.height()).chars().count(); let width = format!("{}", self.height()).chars().count();
for (i, row) in self.grid.iter().enumerate().rev() { for (i, row) in self.grid.iter().enumerate().rev() {
println!("{: >width$} {}", i + self.rows_removed, row); println!("{: >width$} {}", i, row);
} }
println!(" -------"); println!(" -------");
} }