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() {
|
||||
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;
|
||||
#[macro_use] extern crate scan_fmt;
|
||||
|
||||
|
||||
fn main() {
|
||||
days::d12::solve()
|
||||
days::d13::solve()
|
||||
//_all_days()
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue