d13
This commit is contained in:
parent
eac5a9dff7
commit
4f06bb8fe5
5 changed files with 1509 additions and 3 deletions
15
res/13/example
Normal file
15
res/13/example
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
#.##..##.
|
||||||
|
..#.##.#.
|
||||||
|
##......#
|
||||||
|
##......#
|
||||||
|
..#.##.#.
|
||||||
|
..##..##.
|
||||||
|
#.#.##.#.
|
||||||
|
|
||||||
|
#...##..#
|
||||||
|
#....#..#
|
||||||
|
..##..###
|
||||||
|
#####.##.
|
||||||
|
#####.##.
|
||||||
|
..##..###
|
||||||
|
#....#..#
|
1349
res/13/input
Normal file
1349
res/13/input
Normal file
File diff suppressed because it is too large
Load diff
|
@ -1,4 +1,4 @@
|
||||||
use std::{collections::HashMap, fs};
|
use std::fs;
|
||||||
|
|
||||||
pub fn solve() {
|
pub fn solve() {
|
||||||
let path = "res/09/input";
|
let path = "res/09/input";
|
||||||
|
|
143
src/days/d13.rs
Normal file
143
src/days/d13.rs
Normal file
|
@ -0,0 +1,143 @@
|
||||||
|
use std::fs;
|
||||||
|
|
||||||
|
pub fn solve() {
|
||||||
|
let path = "res/13/input";
|
||||||
|
|
||||||
|
let contents = fs::read_to_string(path).expect("I/O error, wrong path?");
|
||||||
|
//let contents = BufReader::new(fs::File::open(path).expect("I/O error, wrong path?"));
|
||||||
|
|
||||||
|
let patterns = contents
|
||||||
|
.split("\n\n")
|
||||||
|
.map(|block| {
|
||||||
|
block
|
||||||
|
.lines()
|
||||||
|
.map(|line| line.chars().collect::<Vec<_>>())
|
||||||
|
.collect::<Vec<_>>()
|
||||||
|
})
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
|
let result: usize = patterns
|
||||||
|
.iter()
|
||||||
|
.map(|block| {
|
||||||
|
|
||||||
|
// check columns
|
||||||
|
let mut ks: Vec<usize> = vec![];
|
||||||
|
for k in 1..block[0].len() {
|
||||||
|
if (0..k.min(block[0].len() - k)).all(|j| {
|
||||||
|
let col1: Vec<char> = (0..block.len()).map(|i| block[i][k - 1 - j]).collect();
|
||||||
|
let col2: Vec<char> = (0..block.len()).map(|i| block[i][k + j]).collect();
|
||||||
|
col1.eq(&col2)
|
||||||
|
}) {
|
||||||
|
ks.push(k)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ks.len() > 1 {
|
||||||
|
dbg!(&ks);
|
||||||
|
}
|
||||||
|
if !ks.is_empty() {
|
||||||
|
return ks[ks.len() / 2];
|
||||||
|
}
|
||||||
|
|
||||||
|
// check rows
|
||||||
|
let mut ks: Vec<usize> = vec![];
|
||||||
|
for k in 1..block.len() {
|
||||||
|
if (0..k.min(block.len() - k)).all(|i| block[k - 1 - i].eq(&block[k + i])) {
|
||||||
|
ks.push(k);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ks.len() > 1 {
|
||||||
|
dbg!(&ks);
|
||||||
|
}
|
||||||
|
if !ks.is_empty() {
|
||||||
|
return ks[ks.len() / 2] * 100;
|
||||||
|
}
|
||||||
|
|
||||||
|
0
|
||||||
|
})
|
||||||
|
.sum();
|
||||||
|
|
||||||
|
println!("Result 1: {result}");
|
||||||
|
|
||||||
|
let result: usize = patterns
|
||||||
|
.iter()
|
||||||
|
.map(|block| {
|
||||||
|
let mut smudge_repaired = false;
|
||||||
|
|
||||||
|
// check columns
|
||||||
|
let mut ks: Vec<usize> = vec![];
|
||||||
|
for k in 1..block[0].len() {
|
||||||
|
if (0..k.min(block[0].len() - k)).all(|j| {
|
||||||
|
let col1: Vec<char> = (0..block.len()).map(|i| block[i][k - 1 - j]).collect();
|
||||||
|
let col2: Vec<char> = (0..block.len()).map(|i| block[i][k + j]).collect();
|
||||||
|
if col1.eq(&col2) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if col1
|
||||||
|
.iter()
|
||||||
|
.zip(col2.iter())
|
||||||
|
.filter(|&(a, b)| a != b)
|
||||||
|
.count()
|
||||||
|
== 1
|
||||||
|
&& !smudge_repaired
|
||||||
|
{
|
||||||
|
smudge_repaired = true;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
false
|
||||||
|
}) {
|
||||||
|
if smudge_repaired {
|
||||||
|
ks.push(k)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
smudge_repaired = false
|
||||||
|
}
|
||||||
|
|
||||||
|
if ks.len() > 1 {
|
||||||
|
dbg!(&ks);
|
||||||
|
}
|
||||||
|
if !ks.is_empty() {
|
||||||
|
return ks[ks.len() / 2];
|
||||||
|
}
|
||||||
|
|
||||||
|
// check rows
|
||||||
|
ks.clear();
|
||||||
|
for k in 1..block.len() {
|
||||||
|
if (0..k.min(block.len() - k)).all(|i| {
|
||||||
|
if block[k - 1 - i].eq(&block[k + i]) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if block[k - 1 - i]
|
||||||
|
.iter()
|
||||||
|
.zip(block[k + i].iter())
|
||||||
|
.filter(|&(a, b)| a != b)
|
||||||
|
.count()
|
||||||
|
== 1
|
||||||
|
&& !smudge_repaired
|
||||||
|
{
|
||||||
|
smudge_repaired = true;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
false
|
||||||
|
}) {
|
||||||
|
if smudge_repaired {
|
||||||
|
ks.push(k)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
smudge_repaired = false
|
||||||
|
}
|
||||||
|
|
||||||
|
if ks.len() > 1 {
|
||||||
|
dbg!(&ks);
|
||||||
|
}
|
||||||
|
if !ks.is_empty() {
|
||||||
|
return ks[ks.len() / 2] * 100;
|
||||||
|
}
|
||||||
|
|
||||||
|
0
|
||||||
|
})
|
||||||
|
.sum();
|
||||||
|
|
||||||
|
println!("Result 2: {result}");
|
||||||
|
}
|
|
@ -1,9 +1,8 @@
|
||||||
pub mod days;
|
pub mod days;
|
||||||
#[macro_use] extern crate scan_fmt;
|
#[macro_use] extern crate scan_fmt;
|
||||||
|
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
days::d12::solve()
|
days::d13::solve()
|
||||||
//_all_days()
|
//_all_days()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue