Finished December 11

This commit is contained in:
2021-12-12 01:04:11 +01:00
parent e197a5c546
commit c56fcff09c
4 changed files with 120 additions and 0 deletions

8
december_11/Cargo.toml Normal file
View File

@@ -0,0 +1,8 @@
[package]
name = "december_11"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]

10
december_11/example.txt Normal file
View File

@@ -0,0 +1,10 @@
5483143223
2745854711
5264556173
6141336146
6357385478
4167524645
2176841721
6882881134
4846848554
5283751526

10
december_11/input.txt Normal file
View File

@@ -0,0 +1,10 @@
6318185732
1122687135
5173237676
8754362612
5718474666
8443654137
1247634346
1446514585
6717288267
1727871228

92
december_11/src/main.rs Normal file
View File

@@ -0,0 +1,92 @@
use std::fs::File;
use std::io::{BufReader};
use std::io::prelude::*;
const RADIX: u32 = 10;
static mut LINE_VEC: Vec<Vec<u32>> = Vec::new();
static mut TOTAL_FLASHES: u32 = 0;
const STEPS: u32 = 300;
fn main(){
let file = File::open("./input.txt").expect("Read failed");
let reader = BufReader::new(file);
for line in reader.lines(){
let line_as_string = line.unwrap();
let line_as_int_vec = line_as_string.chars().map(|x| x.to_digit(RADIX).unwrap()).collect::<Vec<u32>>();
unsafe{LINE_VEC.push(line_as_int_vec);}
}
unsafe {
let height = LINE_VEC.len();
let width = LINE_VEC[0].len();
for _i in 1..=STEPS {
// Energy of each Octopus increases by 1
for line_nr in 0..height {
for column_nr in 0..width {
LINE_VEC[line_nr][column_nr] += 1;
}
}
// Flash all Octopus over 9 and reset to 9
for line_nr in 0..height {
for column_nr in 0..width {
if LINE_VEC[line_nr][column_nr] > 9 {
flash(line_nr, column_nr, height, width);
}
}
}
// Reset all flashed to 0
for line_nr in 0..height {
for column_nr in 0..width {
if LINE_VEC[line_nr][column_nr] >98 {
LINE_VEC[line_nr][column_nr] = 0;
}
}
}
// Check if all flash
let mut all_flashed = true;
for line_nr in 0..height {
for column_nr in 0..width {
if LINE_VEC[line_nr][column_nr] != 0 {
all_flashed = false;
}
}
}
if all_flashed {println!("All Flashed at step {}", _i);}
}
}
unsafe { println!("Total flashes: {}", TOTAL_FLASHES); }
}
fn flash(line_nr: usize, column_nr: usize, height: usize, width: usize) {
unsafe {
//Set Current Octopus to 0
if LINE_VEC[line_nr][column_nr] == 10 || LINE_VEC[line_nr][column_nr] == 9 {
LINE_VEC[line_nr][column_nr] = 99;
TOTAL_FLASHES += 1;
if line_nr > 0 && column_nr > 0 {flash(line_nr - 1, column_nr - 1, height, width);}
if line_nr > 0 {flash(line_nr - 1, column_nr, height, width);}
if line_nr > 0 && column_nr < width - 1 {flash(line_nr - 1, column_nr + 1, height, width);}
if column_nr > 0 {flash(line_nr, column_nr - 1, height, width);}
if column_nr < width - 1 {flash(line_nr , column_nr + 1, height, width);}
if line_nr < height - 1 && column_nr > 0 {flash(line_nr + 1, column_nr - 1, height, width);}
if line_nr < height - 1 {flash(line_nr + 1, column_nr, height, width);}
if line_nr < height - 1 && column_nr < width - 1 {flash(line_nr + 1, column_nr + 1, height, width);}
} else {
LINE_VEC[line_nr][column_nr] += 1;
}
}
}