1
0
forked from danmax/aoc

DeaDvey day 4

This commit is contained in:
2025-12-04 14:16:41 +00:00
parent fbc32d12de
commit 522b0d364f
3 changed files with 150 additions and 24 deletions

View File

@@ -18,9 +18,7 @@ fn algorithm(banks: &Vec<&str>) -> (u64, u64)
overall_index += 1;
if joltage as u64 > highest {
prev_index = overall_index;
unsafe {
ptr::write(&mut highest as *mut u64, joltage as u64);
}
unsafe {ptr::write(&mut highest as *mut u64, joltage as u64);}
if joltage == 57 { break; }
}
}
@@ -28,27 +26,6 @@ fn algorithm(banks: &Vec<&str>) -> (u64, u64)
joltages[i] = highest ^ 48;
highest = 0;
}
prev_index = 0;
for i in 0..=10 {
if joltages[i] > highest.into() {
unsafe {
ptr::write(&mut highest as *mut u64, joltages[i] as u64);
}
prev_index = i+1;
if joltages[i] == 9 { break; }
}
}
total1 += highest * 10;
highest = 0;
for i in prev_index..=11 {
if joltages[i] > highest.into() {
unsafe {
ptr::write(&mut highest as *mut u64, joltages[i] as u64);
}
if joltages[i] == 9 { break; }
}
}
total1 += highest;
total2 += joltages[0] * 10_u64.pow(11)
+ joltages[1] * 10_u64.pow(10)
+ joltages[2] * 10_u64.pow(9)
@@ -61,6 +38,25 @@ fn algorithm(banks: &Vec<&str>) -> (u64, u64)
+ joltages[9] * 10_u64.pow(2)
+ joltages[10] * 10_u64
+ joltages[11];
// part 1
prev_index = 0;
for i in 0..=10 {
if joltages[i] > highest.into() {
unsafe {ptr::write(&mut highest as *mut u64, joltages[i] as u64);}
prev_index = i+1;
if joltages[i] == 9 { break; }
}
}
total1 += highest * 10;
highest = 0;
for i in prev_index..=11 {
if joltages[i] > highest.into() {
unsafe {
ptr::write(&mut highest as *mut u64, joltages[i] as u64);}
if joltages[i] == 9 { break; }
}
}
total1 += highest;
}
(total1, total2)

View File

@@ -0,0 +1,6 @@
[package]
name = "deadvey"
version = "0.1.0"
edition = "2024"
[dependencies]

124
2025/4/deadvey/src/main.rs Normal file
View File

@@ -0,0 +1,124 @@
use std::fs;
use std::time::Instant;
fn remove_dem(rows: &mut Vec<Vec<char>>, i: usize, j: usize) {
rows[i][j] = 'x';
}
fn algorithm(rows: &mut Vec<Vec<char>>) -> (u64, u64) {
let mut total1: u64 = 0;
let mut total2: u64 = 0;
let grid_width: usize = rows[0].len().try_into().unwrap();
let grid_height: usize = rows.len().try_into().unwrap();
let directions = vec![(-1,0),(1,0),(0,-1),(0,1),(-1,-1),(-1,1),(1,-1),(1,1)];
let mut removed: bool = true;
let mut count: u8 = 66;
// First loop
for i in 0usize..(grid_height) {
for j in 0usize..(grid_width) {
if rows[i][j] == '@' { // @
let mut surrounded_by = 0;
for (dr, dc) in &directions {
let new_row = i as isize + dr;
let new_column = j as isize + dc;
if new_row >= grid_height as isize {
continue
}
if new_row < 0 {
continue
}
if new_column >= grid_width as isize {
continue
}
if new_column < 0 {
continue
}
if rows[new_row as usize][new_column as usize] == '@'
|| rows[new_row as usize][new_column as usize] == 'A'
{
surrounded_by += 1;
}
if surrounded_by >= 4 {
break
}
}
if surrounded_by < 4 {
rows[i][j] = 'A';
total2 += 1;
total1 += 1;
removed = true;
}
}
}
}
// All other loops
while removed {
removed = false;
for i in 0usize..(grid_height) {
for j in 0usize..(grid_width) {
if rows[i][j] == '@' { // @
let mut surrounded_by = 0;
for (dr, dc) in &directions {
let new_row = i as isize + dr;
let new_column = j as isize + dc;
if new_row >= grid_height as isize {
continue
}
if new_row < 0 {
continue
}
if new_column >= grid_width as isize {
continue
}
if new_column < 0 {
continue
}
if rows[new_row as usize][new_column as usize] == '@'
{
surrounded_by += 1;
}
else if rows[new_row as usize][new_column as usize] == count as char
{
surrounded_by += 1;
}
if surrounded_by >= 4 { break }
}
if surrounded_by < 4 {
rows[i][j] = count as char;
total2 += 1;
removed = true;
}
}
}
}
count += 1;
}
(total1, total2)
}
fn main() {
let file_contents: String = fs::read_to_string("../large.txt").unwrap();
let start = Instant::now();
let mut grid: Vec<Vec<char>> = file_contents
.lines()
.map(|line| line.chars().collect())
.collect();
let preamble = start.elapsed();
let (total1, total2) = algorithm(&mut grid);
let end = start.elapsed();
println!("part1: {total1}");
println!("part2: {total2}");
println!("Times:
Preamble: {:.2?}
Loop: {:.2?}
Avg time per bank: {:.2?}
Total: {:.4?}
",
preamble,
end-preamble,
(end-preamble)/(grid.len()).try_into().unwrap(),
end);
}