[TASK] Completed Day11 Part 1 (although I'm not happy with the performance...)
This commit is contained in:
93
input/day11.txt
Normal file
93
input/day11.txt
Normal file
@@ -0,0 +1,93 @@
|
||||
LLLLLLLLLL.LLLL.LLLLLLL.LLLLLLL..LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLL.LL.LLLLLLL
|
||||
LLLL.LLLLL.LLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLL
|
||||
LL.LLLLLLLLLLLLLLLLLLLL..LLLLLL..LLLLLLL.LLLLLLL.LLLLLL.LLLL.LLLLLLL.LLLLLLLLL.LLLLLLL.LLLLLLL
|
||||
LLLL.LLLLL.LLL.LLLLLLLL.LLLLLLL.LLLLLLLL.LLLLLLL.LLLLLL.LLLLLLLLLLLL.LLLLLLLLL.LLLL.LLLLLLL.LL
|
||||
LLLLLLLLLL.LLLL.LLLLLLL.LLLLLLL.LLLLLLLL..LLLLLL.LLLLLL.LLLL.LLLLLLL.LLLLLLLLL.LLLL.LLLLLLLLLL
|
||||
LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLLL.LLLLLLL.LLLLLLLLL.LLLL..LLLLLLLLL
|
||||
LLLLLLLLLL.LLLL.LLLLLLL.LLLLLLL.LLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLL..LLLLLLLLLL.LLLL
|
||||
LLLLLLLLLL.LLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLL..LLLL.LLLLLLLLLLLLLLL.LLL.LLLLLLLLLLLLL
|
||||
LLLLLLLLLL.LL.L.LLLLLLL.LLLLLL..LLLLLLLL.LLLLLLL.L.LLLL.LLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL
|
||||
LLLL.LLLLL.LLLL.L.LLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLL.LLL.LLLL..LLLLLLLLL
|
||||
L..LL.L.LL.........LLL...LLL.........LL..LL.L..LL..L...L..L....LL.LL.L.LL.L..L...LLL......LL.L
|
||||
LL.LLLLLLLLLLLL.LLLLLLL.LLLLLLL.LLLLLLLL.LLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
|
||||
LLLLLLLLLL.LLLL.LLLLLLL.LLLLLLL.LLLLL.LLLLLLLLLLLLLLLLL.LLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLL
|
||||
LLLLLLLLLL.LLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLL
|
||||
LLLLLLLLLL.LLLLLLLLLLLLLL.LLLL.LLLLLLL.L.LLLLLLL.LLLLLL.LLLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLLL
|
||||
LLLLLLLLLL.LLLL.LLLLLLL.LLLLLLL.LLLLLLLL.LLLLLLL.LLLLLL.LLLL.LLLLLLL.LLLLLLLLL.LLLL.LLLLLLLLLL
|
||||
LLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLL
|
||||
LLLLLLLLLL.LLLL.L.LLLLL.LLLLLLL.LLLLLLLLLLLLLLLL.LLL.LL.LLLLLLLLLLLL.L.LLLLLLL.LLLL.LLLLLLLLLL
|
||||
LLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLL.LL.LLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLL
|
||||
LLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLL
|
||||
...L..L.LL......L..L..LL..LLL..L.L.L....L.LLLLL...L...L....L..L..........L..LL.LL.L........LL.
|
||||
LLLLLLLLLLLLLLL.LLLLL.L.LLLLLLL.LLLLLLLLLL.LLLLLLLLL.LLLLLLL.LLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLLL
|
||||
LLLLLLLLLL.LLLL.LLLLLLLLLLLLLLL.LLL.LLLL.LLLLLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLL
|
||||
LLLLLLLLLL.LLLL..LLLLLL.LLLLLLL.LLLLLLLL.LLLLLLL.LLLLLL.LLLL.LLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLLL
|
||||
.LLLLLLLLL.LLLL..LLLLLL.LLLLLL..LLLLL.LL.LLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLL
|
||||
LLLLL.LLLL.LLLLLLLLLLL..LLLLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LL.L.LLLLLLL..LLLLLLLL.LLLL.LLLLLLLLLL
|
||||
LLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLL.L.LLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLL.LL.LLLLLLLLLLLLLLL
|
||||
LLLLLLLL.L.LLLL.LLLLLLL.LLLLLLL.LLLLLLLLLLL.LLLL..LLLLL..LLL.LLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLL
|
||||
.LL..LLL.LLL..LL.LL....LLLL.....LLLL..LLLL.L.L...........L...L.LLLLLL..LL..LL.LL.L.....LL.L...
|
||||
LLLLLLLL.LLLLLL.LLLLLLLLLL.L.LLLLLLLLLLL.LLLLLLLLLLLLLLLLLLL..LLLLLL.LLLLLLLLLLL.LL.LLLLLLLLLL
|
||||
LLLLLLLLLLLLLLL.LLLLLLL.LLLLLLL.LLL.LLLL.LLLLLLL.LLLLLL.LLLL.LLLLLLL.LLLLLLLLL.LLLL.LLLLLLLLLL
|
||||
LLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLL..LLLLLL.LLLLLL.LLLL.LLLLLLL.LLLLLLLLL.LLLL.LLLLLLLLLL
|
||||
LLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLL..LLLLLL.LLLLLLLLLLLL.LLLLLLLLL.LLLL.LLLLLLLLLL
|
||||
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLL.LLLL.LLLLL.LLL.LLLL.LLLLLLL.LL
|
||||
...............L.....L.....L....L.L....L.L.L.L.L.L..L..LL..L.......L.LLL.L.L.L...L..L.L.L..LLL
|
||||
LLLLLLLL.LLLLLL.LLLLLLL.LLLLLLL..LLLLLLLLLLLLLLL..LLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLL..LLLLLLLLL
|
||||
L.LLLLLLLL.LLLLLLLLLLLL.LLLLL.L.LL.LLLLL.LLLLLLL.LLLLLL.LLLL.LLLLLLL.LLLLL.LLL.LLLL.LLLLLLLL.L
|
||||
LLLLLLLLLL.LLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLL.LLLLLLLLLL
|
||||
LLLLLLLLLL.LLLL.LLLLLLL..LLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLL
|
||||
LLLLLLLLLL.LLLL..LLLLLL.LLLLLLL.LLLLLLLLL.LL.LLL.LLLLLLLLLLL.LLLLLL..LLLLLL.LL.LLLLLLLLLLLLLLL
|
||||
LLLLLLLLLL.LLLL.L.LLLLL.LLLLLLL.LLLLLLLL.L.LLLLL.LLLLLL.LLLL.LLLLL.LLLLLLLLLLL.L..L.LLLLLLLLLL
|
||||
LLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLL.LLLL.LLLL.LLLLLLLLLL
|
||||
LLLLLLLLLL.LLLLLLLLLLLL.LLLLLLLLLLLLLLLL.L.LLLLLLLLLLLLLLLLL.LLLLLLL.LLLL.LLLL.LLLL.L.LLLLLLLL
|
||||
.LLL..L.L.LL.L.LL.LL.LLL.L..L.L.....L....L...L.L......L.LL....L.LL..L.......L..L...L..L...LLL.
|
||||
LLLLLLLLLL.LLLL.LLLLLLL.LLLLLL..LLLLLLLL.LLLLLLL.LLLLLL.LLLLLLLLLLLL.L.LLLLLLL..LLLL.LLLLLLLLL
|
||||
L..LLLLLLLLLLLL.LLLLLLL.LLLLLLL.LLLLL.LL.LLLLLLLLLLLLLLLLLLL.LLL.LLL.LL.LLLLLL.LLLL.LLLLLLLLLL
|
||||
LLLLLLLLLL.LLLL.LLLLLLL.LLLLLLL..LLLLLLLLLLLLLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLL
|
||||
LLLLLLLLLL.LLLL.LLLLLLL.LLLLLLL.LLLLLLLL.LLLLLLL.LLLLLL.LLLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLL.LL
|
||||
LLL.LLLLLL.LLLL.LLLLLLL.LLLLLLLLLLLLLLL..LLLLLLLLLLLLLLLLLL..LLLLLLL.LLLLLLLLL.LL.LLLLLL.LLLLL
|
||||
LLL.LLLLLL.LLLL.LLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLL
|
||||
..L...LLL......L....L..LL..LLLLL..L...L..LL.L.L....L...L.LL..L..L.LLL.....L.L...L......L.LL..L
|
||||
LL.LLLLLLL.LLLL.LLLL.LL.LLLLLLL..LLLLLLL.LLLLLLL.LLLL.LLLLLLLLLLLLLL.LLLLLLLL...LLL.L.LLLLLLLL
|
||||
LLLLLLLLLL.L.LL.L.LLLLL.LLLLLLLLLLLLLLLL.LLLLLLL.LLLLLL.L.LLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLL.LL
|
||||
LLLLLLLLLL.LLLL.LLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLL.LL.LLLLLLLLL.LLLLLLLLLLLLLLL
|
||||
LLLLLLLLLLLLLLL.LLLLLLL.LLLLLLL.LLLLLLLL.LLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLLL
|
||||
L.LLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLL.LLLLLLLLL.LLLL.LLLLLLLLLL
|
||||
LLLL.LLLLL.LLLL.LLLLLLL.LLLLLLL.LLLLLLLLLLLLL.LL.LLLLLL.LLLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLLL
|
||||
LL......LL...L......L.L...LL..L.L...LL.L........L.LL.LL.LL...L...LL.....L..LL.L....L.L..LLL..L
|
||||
LLLLLLLLLL.LLLL.L.LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLL.LLLLLL.LL.LLLL.LLLLLLLLLL
|
||||
LLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLL.LLLLLLL.LLLLLL.LLLL.LLLLLLL.LLLLLLLLL.LLLLL.LLLLL.LLL
|
||||
LLLL.LL.LL.LLLL.LLLLLLLLLL..LLL.LLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLL.L.LLLLLLLL
|
||||
LLLL.LLLLL.LLLL.LLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLL
|
||||
LLLLLLLLLL.LLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLL..LLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLL
|
||||
LLLLLLLLLL.LLLL.LLLLLLL.LLLLLLL.LLLLLLLL.LLLLLLL.LLLLLLLLLLL.LLLLLLLLLL.LLL.LLLLLLL.LLLLLLLLL.
|
||||
LLLLLLLLLL.LLLL.LLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.L..LLLLLLLLLLL.LLL.LLLLLL
|
||||
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLL.LLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLL
|
||||
LLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLLL.LL.LLLL.LLLLLL..LLLLLLLLL.LLLL.LLLLLLLLLL
|
||||
.....LL..LL.......L.L.....L.....L....L..L.L...L.L.L.L...L.L..L.LLL.............L...........L.L
|
||||
L.LLLLLLLL.LLLL.LLLLLLLLLLLLLLL.LLLL.LLLLLLLLLL.LLLLLLL.LLLL.LLLLLLL.LLLLLLLLL.LLLL.LLLLLLLLLL
|
||||
LLLLLLLLLL.LLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLL..LLLLLLLLLLLLLLLLLLLLL.LL.L.L.LLLLLLLL
|
||||
LLLLLLLLLL.LLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLLL.LLLLLL.LLLLLL..LLLLLLLLLL
|
||||
LLLLLLLLLL.LLLLLLLLLLLL.LLLLLLL.LLLLLLLL.LLLLLLL.LLLLLL.LLLL.LLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLL
|
||||
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL..LLLLLL.LLLLLL.LLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLL
|
||||
LLLLLLLLLL.LLLLLLLLLLLL.LLLLLLLLLLLL.LLL.LLLLLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLL
|
||||
.LLL.....L...L.LLL.L.....L.L........L..LL.L.L.LL.....L..L.L.LL.LLLLLL..LL...L..L...LL.L.LL....
|
||||
LLLLLLLLLL.LLLLLLLLLLLL.LLLLLLL.LLLLLLLL.LLLLLLL.LLLLLL.LLLL.LLLLL.L.LLLLLLLLL.LLLL.LLLLLLL.LL
|
||||
LLLLLLLL.LLLLLLLLLLLLLL.LLLLLLL.LLLLLLLL.LLLLLLL.LLLLLL.LLLL.LL.LLLLLLLLLLLLLLLLLLL.LLLLLLLLLL
|
||||
LLLLLLLLLL.LLLL.LLLLLLL.LL.LLLL.LLLLLLLL.LLLLLLL.LLLLLL.LLLL...LLLLL.LLLLLLLLL.LLLL.LLLLLLLLLL
|
||||
LLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLL.LLLLLL.LLL
|
||||
LLLLLLLLL..LLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLL
|
||||
.L..L.L.LL..........L..L.............LLLL..L.......LL....L..L.......L.........L..L.L..LL....LL
|
||||
LLLLLLLLLL.LLLL.LLLLLLL.LLLLLLL.LLLLLLLL.LLLLLLL.LLLLLLLLLLL.LLLLLLL.LLLL.LLLL.LLLL.LLLLLLLLLL
|
||||
LLLLLLLLLL.LLLL.LLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLL
|
||||
LLLLLLLLLL.LLLL.LLLLLLL.LLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLL.LLLL.LLLLLLL.LL
|
||||
LLLLLLLLLL.LLLL.LLL.LLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL
|
||||
LLLLL.LLLL.LLLL.LLLLLLL.LLLLLLL.LLLLLLLL.LLLLL.L.LLLLLLL.LLL.LLLLLLL.LLLLLLLLL.LLLL.LLLLLLLLLL
|
||||
..L.....L......L....L..LLL..L.L..L....L..LL....L.L........LL...L.......L..L.L.L..LL..L.L.....L
|
||||
LLLLLLLLLL.LLLL.LLLLLLL.LLLLLLL.LL.LLLLLLLLLLLLL.LLLLLL.LLLLLL.LLLLL.LLLLLLLLL.LLLLLLLLLLLLLLL
|
||||
LLLLLLLLLL.LLLL.LLLLLLL.LLLLLLL.LLLLLLLL.LLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLL..LLLLLLLLLL
|
||||
LLLLLLLLLL.LLLLLLLLLLLL.LLLLLLL.LLLLLLLL.LL..LLL.LLLLLL.LLLL.LLLLLLL.LLLLLLLL..LL.L.LLLLLLL.LL
|
||||
LLLLLLLLLL.LLLL.LLLLLLL.LLLLLLLLLLLLLLLL..LLL.LLLLLLLLLLLLLL.LLL.LLL.LLL.LLLLLLLLLLLLLLLLLLLL.
|
||||
LLLLLLLLLL.LL.L.LLLLLLL.LLLLLLL.LLLLLLLL.LLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLL
|
||||
LLLLLLLLLL.LLLL.LLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLL.LLLLLL.LLLL.LLLLLLL.LLLLLLLLLLL.LL.LLLLLLLLLL
|
||||
10
input/day11_example.txt
Normal file
10
input/day11_example.txt
Normal file
@@ -0,0 +1,10 @@
|
||||
L.LL.LL.LL
|
||||
LLLLLLL.LL
|
||||
L.L.L..L..
|
||||
LLLL.LL.LL
|
||||
L.LL.LL.LL
|
||||
L.LLLLL.LL
|
||||
..L.L.....
|
||||
LLLLLLLLLL
|
||||
L.LLLLLL.L
|
||||
L.LLLLL.LL
|
||||
@@ -75,6 +75,4 @@ fn count_arrangements(adapters: &Vec<u32>, start_idx: usize, end_idx: usize, sol
|
||||
|
||||
solution_cache[start_idx] = res;
|
||||
return res;
|
||||
|
||||
|
||||
}
|
||||
152
src/day11.rs
Normal file
152
src/day11.rs
Normal file
@@ -0,0 +1,152 @@
|
||||
use super::util;
|
||||
use crate::day11::GridState::Floor;
|
||||
use crate::day11::GridState::FilledSeat;
|
||||
use crate::day11::GridState::EmptySeat;
|
||||
// use std::mem::swap;
|
||||
|
||||
pub fn solve() {
|
||||
let lines = util::read_file("input/day11.txt");
|
||||
|
||||
let seats = Seats::parse(&lines);
|
||||
let part1 = solve_part1(&seats);
|
||||
|
||||
println!("Day 11 Part 1: {}", part1);
|
||||
|
||||
|
||||
}
|
||||
|
||||
fn solve_part1(seats: &Seats) -> usize {
|
||||
|
||||
let mut last_seats = seats.clone();
|
||||
let mut next_seats = seats.clone();
|
||||
|
||||
loop {
|
||||
let mut changes = false;
|
||||
for y in 0..seats.height {
|
||||
for x in 0..seats.width {
|
||||
let seat = last_seats.get(&x, &y);
|
||||
if seat != &Floor {
|
||||
let occupied = last_seats.count_occupied_neighbors(&x, &y);
|
||||
if seat == &EmptySeat && occupied == 0 {
|
||||
changes = true;
|
||||
next_seats.set(&x, &y, FilledSeat);
|
||||
} else if seat == &FilledSeat && occupied >= 4 {
|
||||
next_seats.set(&x, &y, EmptySeat);
|
||||
changes = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// next_seats.print();
|
||||
if !changes {
|
||||
break;
|
||||
}
|
||||
|
||||
last_seats = next_seats.clone();
|
||||
}
|
||||
return last_seats.grid.iter().filter(|s| s == &&FilledSeat).count();
|
||||
|
||||
}
|
||||
|
||||
#[derive(Clone)]
|
||||
struct Seats {
|
||||
grid: Vec<GridState>,
|
||||
width: usize,
|
||||
height: usize,
|
||||
}
|
||||
|
||||
const ONE: usize = 1;
|
||||
impl Seats {
|
||||
|
||||
fn parse(lines: &Vec<String>) -> Seats {
|
||||
|
||||
let height = lines.len();
|
||||
let width = lines[0].len();
|
||||
let mut grid = vec!(GridState::Floor; width * height);
|
||||
for y in 0..lines.len() {
|
||||
let line = &lines[y];
|
||||
let mut line_chars = line.chars();
|
||||
for x in 0..lines[0].len() {
|
||||
grid[x + y * width] = GridState::parse(&line_chars.next().unwrap())
|
||||
}
|
||||
}
|
||||
|
||||
return Seats { grid, width, height };
|
||||
}
|
||||
|
||||
fn count_occupied_neighbors(&self, x: &usize, y: &usize) -> u8 {
|
||||
|
||||
let x_upper = x == &(self.width - &ONE);
|
||||
let x_lower = x == &0;
|
||||
let y_upper = y == &(self.height - &ONE);
|
||||
let y_lower = y == &0;
|
||||
|
||||
return
|
||||
if !x_lower && !y_lower && self.is_occupied(&(x - &ONE), &(y - &ONE)) { 1 } else { 0 } +
|
||||
if !x_lower && self.is_occupied(&(x - &ONE), &y) { 1 } else { 0 } +
|
||||
if !x_lower && !y_upper && self.is_occupied(&(x - &ONE), &(y + ONE)) { 1 } else { 0 } +
|
||||
if !y_lower && self.is_occupied(&x, &(y - ONE)) { 1 } else { 0 } +
|
||||
if !y_upper && self.is_occupied(&x, &(y + ONE)) { 1 } else { 0 } +
|
||||
if !x_upper && !y_lower && self.is_occupied(&(x + ONE), &(y - ONE)) { 1 } else { 0 } +
|
||||
if !x_upper && self.is_occupied(&(x + ONE), &y) { 1 } else { 0 } +
|
||||
if !x_upper && !y_upper && self.is_occupied(&(x + ONE), &(y + ONE)) { 1 } else { 0 }
|
||||
|
||||
}
|
||||
|
||||
fn is_occupied(&self, x: &usize, y: &usize) -> bool {
|
||||
self.get(x, y) == &FilledSeat
|
||||
}
|
||||
|
||||
fn get(&self, x: &usize, y: &usize) -> &GridState {
|
||||
|
||||
return &self.grid[x + y * self.width];
|
||||
}
|
||||
|
||||
fn set(&mut self, x: &usize, y: &usize, state: GridState) {
|
||||
self.grid[x + y * self.width] = state;
|
||||
}
|
||||
|
||||
fn print(&self) {
|
||||
|
||||
for y in 0..self.height {
|
||||
for x in 0..self.width {
|
||||
print!("{}", self.get(&x, &y).to_char())
|
||||
}
|
||||
println!();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
impl PartialEq for Seats {
|
||||
fn eq(&self, other: &Self) -> bool {
|
||||
return self.width == other.width && self.height == other.height && self.grid == other.grid;
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Eq, PartialEq, Copy, Clone)]
|
||||
enum GridState {
|
||||
EmptySeat, FilledSeat, Floor
|
||||
}
|
||||
|
||||
impl GridState {
|
||||
|
||||
fn parse(c: &char) -> GridState {
|
||||
|
||||
return match c {
|
||||
'.' => GridState::Floor,
|
||||
'L' => GridState::EmptySeat,
|
||||
'#' => GridState::FilledSeat,
|
||||
_ => panic!("Unknown grid state")
|
||||
}
|
||||
}
|
||||
|
||||
fn to_char(&self) -> char {
|
||||
|
||||
return match self {
|
||||
GridState::Floor => '.',
|
||||
GridState::EmptySeat => 'L',
|
||||
GridState::FilledSeat => '#'
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -12,8 +12,9 @@ mod day7;
|
||||
mod day8;
|
||||
mod day9;
|
||||
mod day10;
|
||||
mod day11;
|
||||
|
||||
const MAX_DAY: u8 = 10;
|
||||
const MAX_DAY: u8 = 11;
|
||||
const BENCHMARK_AMOUNT: u32 = 100;
|
||||
|
||||
fn solve(day: u8) {
|
||||
@@ -28,6 +29,7 @@ fn solve(day: u8) {
|
||||
8 => day8::solve(),
|
||||
9 => day9::solve(),
|
||||
10 => day10::solve(),
|
||||
11 => day11::solve(),
|
||||
_ => println!("This day is not yet implemented")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user