Day 13 complete

This commit is contained in:
Cassandra de la Cruz-Munoz 2023-12-13 16:45:18 +01:00
parent 31cdd8b327
commit b8f91dee00
2 changed files with 228 additions and 0 deletions

107
src/13part1.rs Normal file
View File

@ -0,0 +1,107 @@
use std::fs;
fn main() {
let file_path = "input/13input.txt";
let contents = fs::read_to_string(file_path).expect("should read file");
let mut lines = contents.lines();
let mut matrices: Vec<Vec<Vec<char>>> = vec![Vec::new()];
loop {
let line = lines.next();
if line.is_none() {
break;
}
if line.unwrap() == "" {
matrices.push(Vec::new());
continue;
}
let matrices_len = matrices.len();
matrices[matrices_len-1].push(line.unwrap().chars().collect());
}
let mut total = 0;
for i in 0..matrices.len() {
let mut mirrored_lower = false;
let mut mirrored_upper = false;
let mut center_lower = matrices[i].len()/2;
let mut center_upper = matrices[i].len()/2+1;
while center_lower > 0 && center_upper < matrices[i].len() {
mirrored_lower = true;
mirrored_upper = true;
let mut first_pointer_low = center_lower-1;
let mut second_pointer_low = center_lower;
while second_pointer_low < matrices[i].len() && mirrored_lower {
mirrored_lower &= matrices[i][first_pointer_low] == matrices[i][second_pointer_low];
if first_pointer_low > 0 {
first_pointer_low -= 1;
} else {
break;
}
second_pointer_low += 1;
}
if mirrored_lower {
total += 100*center_lower;
break;
}
let mut first_pointer_up = center_upper-1;
let mut second_pointer_up = center_upper;
while second_pointer_up < matrices[i].len() && mirrored_upper {
mirrored_upper &= matrices[i][first_pointer_up] == matrices[i][second_pointer_up];
if first_pointer_up > 0 {
first_pointer_up -= 1;
} else {
break;
}
second_pointer_up += 1;
}
if mirrored_upper {
total += 100*center_upper;
break;
}
center_lower -= 1;
center_upper += 1;
}
if mirrored_upper || mirrored_lower {
continue;
}
center_lower = matrices[i][0].len()/2;
center_upper = matrices[i][0].len()/2+1;
while center_lower > 0 && center_upper < matrices[i][0].len() {
mirrored_lower = true;
mirrored_upper = true;
let mut first_pointer_low = center_lower-1;
let mut second_pointer_low = center_lower;
while second_pointer_low < matrices[i][0].len() && mirrored_lower {
for j in 0..matrices[i].len() {
mirrored_lower &= matrices[i][j][first_pointer_low] == matrices[i][j][second_pointer_low];
}
if first_pointer_low == 0 {
break;
}
first_pointer_low -= 1;
second_pointer_low += 1;
}
if mirrored_lower {
total += center_lower;
break;
}
let mut first_pointer_up = center_upper-1;
let mut second_pointer_up = center_upper;
while second_pointer_up < matrices[i][0].len() && mirrored_upper {
for j in 0..matrices[i].len() {
mirrored_upper &= matrices[i][j][first_pointer_up] == matrices[i][j][second_pointer_up];
}
if first_pointer_up == 0 {
break;
}
first_pointer_up -= 1;
second_pointer_up += 1;
}
if mirrored_upper {
total += center_upper;
break;
}
center_lower -= 1;
center_upper += 1;
}
}
println!("{}", total);
}

121
src/13part2.rs Normal file
View File

@ -0,0 +1,121 @@
use std::fs;
fn main() {
let file_path = "input/13input.txt";
let contents = fs::read_to_string(file_path).expect("should read file");
let mut lines = contents.lines();
let mut matrices: Vec<Vec<Vec<char>>> = vec![Vec::new()];
loop {
let line = lines.next();
if line.is_none() {
break;
}
if line.unwrap() == "" {
matrices.push(Vec::new());
continue;
}
let matrices_len = matrices.len();
matrices[matrices_len-1].push(line.unwrap().chars().collect());
}
let mut total = 0;
for i in 0..matrices.len() {
let mut center_lower = matrices[i].len()/2;
let mut center_upper = matrices[i].len()/2+1;
let mut smudge_count = 0;
while center_lower > 0 && center_upper < matrices[i].len() {
smudge_count = 0;
let mut first_pointer_low = center_lower-1;
let mut second_pointer_low = center_lower;
while second_pointer_low < matrices[i].len() && smudge_count < 2 {
if matrices[i][first_pointer_low] != matrices[i][second_pointer_low] {
for j in 0..matrices[i][first_pointer_low].len() {
if matrices[i][first_pointer_low][j] != matrices[i][second_pointer_low][j] {
smudge_count += 1;
}
}
}
if first_pointer_low == 0 {
break;
}
first_pointer_low -= 1;
second_pointer_low += 1;
}
if smudge_count == 1 {
total += 100*center_lower;
break;
}
smudge_count = 0;
let mut first_pointer_up = center_upper-1;
let mut second_pointer_up = center_upper;
while second_pointer_up < matrices[i].len() && smudge_count < 2 {
if matrices[i][first_pointer_up] != matrices[i][second_pointer_up] {
for j in 0..matrices[i][first_pointer_up].len() {
if matrices[i][first_pointer_up][j] != matrices[i][second_pointer_up][j] {
smudge_count += 1;
}
}
}
if first_pointer_up == 0 {
break;
}
first_pointer_up -= 1;
second_pointer_up += 1;
}
if smudge_count == 1 {
total += 100*center_upper;
break;
}
center_lower -= 1;
center_upper += 1;
}
if smudge_count == 1 {
continue;
}
center_lower = matrices[i][0].len()/2;
center_upper = matrices[i][0].len()/2+1;
while center_lower > 0 && center_upper < matrices[i][0].len() {
smudge_count = 0;
let mut first_pointer_low = center_lower-1;
let mut second_pointer_low = center_lower;
while second_pointer_low < matrices[i][0].len() && smudge_count < 2 {
for j in 0..matrices[i].len() {
if matrices[i][j][first_pointer_low] != matrices[i][j][second_pointer_low] {
smudge_count += 1;
}
}
if first_pointer_low == 0 {
break;
}
first_pointer_low -= 1;
second_pointer_low += 1;
}
if smudge_count == 1 {
total += center_lower;
break;
}
smudge_count = 0;
let mut first_pointer_up = center_upper-1;
let mut second_pointer_up = center_upper;
while second_pointer_up < matrices[i][0].len() && smudge_count < 2 {
for j in 0..matrices[i].len() {
if matrices[i][j][first_pointer_up] != matrices[i][j][second_pointer_up] {
smudge_count += 1;
}
}
if first_pointer_up == 0 {
break;
}
first_pointer_up -= 1;
second_pointer_up += 1;
}
if smudge_count == 1 {
total += center_upper;
break;
}
center_lower -= 1;
center_upper += 1;
}
}
println!("{}", total);
}