1
0
Fork 0

day14 part 2 solution

main
Andrew Coleman 2022-12-18 14:46:26 -05:00
parent bbe7c7332f
commit 5113eba2a9
1 changed files with 15 additions and 8 deletions

View File

@ -9,7 +9,7 @@ enum Tile {
Sand,
}
type Cave = [[Tile; 540]; 200];
type Cave = [[Tile; 800]; 200];
pub fn run() -> Result<()> {
#[cfg(not(feature = "test_input"))]
@ -18,7 +18,7 @@ pub fn run() -> Result<()> {
#[cfg(feature = "test_input")]
let file_contents = fs::read_to_string("tests/day14.txt")?;
let mut cave: Cave = [[Tile::Air; 540]; 200];
let mut cave: Cave = [[Tile::Air; 800]; 200];
cave[0][500] = Tile::Source;
let mut minx = 520;
let mut maxx = 500;
@ -76,8 +76,8 @@ pub fn run() -> Result<()> {
}
}
//print_cave(&cave, minx, 0, maxx, maxy);
part1_sand_units(&cave, minx, maxx, maxy);
part2_sand_units(&cave, maxy);
Ok(())
}
@ -134,23 +134,31 @@ fn part1_sand_units(c: &Cave, minx: usize, maxx: usize, maxy: usize) {
print_cave(&cave, minx, 0, maxx, maxy);
}
fn part2_sand_units(c: &Cave, minx: usize, maxx: usize, maxy: usize) {
fn part2_sand_units(c: &Cave, maxy: usize) {
let mut cave = c.clone();
let mut units = 0;
let mut minx = 800;
let mut maxx = 0;
let floor = maxy + 2;
for i in 0..540 {
for i in 0..800 {
cave[floor][i] = Tile::Rock;
}
loop {
if let Tile::Sand = cave[500][0] {
if let Tile::Sand = cave[0][500] {
break;
}
let mut x = 500;
let mut placed = false;
for i in 0..floor {
if placed {
if x < minx {
minx = x;
}
if x > maxx {
maxx = x;
}
break;
}
match cave[i + 1][x] {
@ -164,7 +172,6 @@ fn part2_sand_units(c: &Cave, minx: usize, maxx: usize, maxy: usize) {
} else {
placed = true;
cave[i][x] = Tile::Sand;
break;
}
}
}
@ -176,5 +183,5 @@ fn part2_sand_units(c: &Cave, minx: usize, maxx: usize, maxy: usize) {
}
}
println!("part two units {}", units);
print_cave(&cave, minx, 0, maxx, maxy);
print_cave(&cave, minx, 0, maxx, floor);
}