d11 + d12
This commit is contained in:
parent
db441a2940
commit
eac5a9dff7
9 changed files with 1369 additions and 1 deletions
7
.idea/misc.xml
Normal file
7
.idea/misc.xml
Normal file
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="Black">
|
||||
<option name="sdkName" value="Python 3.11" />
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.11" project-jdk-type="Python SDK" />
|
||||
</project>
|
15
python/day11.py
Normal file
15
python/day11.py
Normal file
|
@ -0,0 +1,15 @@
|
|||
path = 'res/01/input'
|
||||
|
||||
space = []
|
||||
|
||||
with open(path, 'r') as file:
|
||||
for line in file:
|
||||
space.append([1 if c is '#' else 0 for c in line])
|
||||
if '#' not in line:
|
||||
space.append([0 for _ in line])
|
||||
|
||||
ind = set()
|
||||
for i in range(len(space[0])):
|
||||
if '#' not in [space[i][j] for j in range(len(space))]:
|
||||
ind.add(i)
|
||||
|
10
res/11/example
Normal file
10
res/11/example
Normal file
|
@ -0,0 +1,10 @@
|
|||
...#......
|
||||
.......#..
|
||||
#.........
|
||||
..........
|
||||
......#...
|
||||
.#........
|
||||
.........#
|
||||
..........
|
||||
.......#..
|
||||
#...#.....
|
140
res/11/input
Normal file
140
res/11/input
Normal file
|
@ -0,0 +1,140 @@
|
|||
................................................#.........#............................................#....................................
|
||||
..#.............#......#.............................................#...........................................................#..........
|
||||
..............................................................#..............................#..............................................
|
||||
.................................................................................................................#..........................
|
||||
...........#...........................#...............................................#..................................#.............#...
|
||||
............................#..................#.....#..........................#...........................................................
|
||||
..................................#................................#........................................................................
|
||||
...........................................................................#................................................................
|
||||
.....#...................................#......................................................#.......................#...........#.....#.
|
||||
.....................#........#....................#....................................................#...................................
|
||||
......................................................................#.....................................................................
|
||||
...........................................................#.................................#..............................................
|
||||
........#..................#....................#....................................................#......................................
|
||||
#.............#....................................................#..............#.............................#...........................
|
||||
...................#.............#...................................................................................#...............#......
|
||||
.............................................................................#.............................................................#
|
||||
.........................................................................................................#..................................
|
||||
....#...........................................................................................#...........................#.....#.........
|
||||
.....................#.......................#.........#....................................................................................
|
||||
#............#.........................................................................#....................#...............................
|
||||
................................#..................#...........#......#............................#...................#.......#............
|
||||
.......................................................................................................................................#....
|
||||
...................................................................................#........................................................
|
||||
.........................#.............#...................................................................................#................
|
||||
............................................................................................................................................
|
||||
..........#..............................................................#......#.........#..........#......................................
|
||||
............................................................................................................................................
|
||||
.................................................................................................#............................#.............
|
||||
................#...............................#............#.....................#........................................................
|
||||
.#........................#..........................#......................................................#.......................#.......
|
||||
.......#....................................#................................#..............................................................
|
||||
.................................#.....................................#..................................................................#.
|
||||
........................................................#.............................#...............................#........#............
|
||||
.....................#...................#.....#...............#............................................................................
|
||||
.............#...................................................................................................#..........................
|
||||
................................................................................................#.....#...............................#.....
|
||||
.................#................#................#........................................................................................
|
||||
.#..........................#.............................#.......#.......#................................................................#
|
||||
.............................................#.............................................................#................................
|
||||
...........#.................................................................................#...............................#..............
|
||||
.....................#.................................#.......#..................................................................#.....#...
|
||||
.......#..............................#..............................................................#......................................
|
||||
#...............................#.....................................#...............#........................#.......#....................
|
||||
...........................................................................#.....#.........................................................#
|
||||
...........................................................................................#................................................
|
||||
........................................................#................................................#.......................#..........
|
||||
.........#............#............................................#.................................................#.....#................
|
||||
............................................................................................................................................
|
||||
......................................#......#........................................................#.........#...........................
|
||||
.............#.....#......#..........................#......................................................................................
|
||||
......#................................................................................................................................#....
|
||||
.............................................................................................................#..............................
|
||||
..#.......#.............................#.....................#..................#........#.................................................
|
||||
............................................................................................................................................
|
||||
......................................................................................#...............................#.....................
|
||||
..................#...........................#...........................#.........................#.........................#.............
|
||||
............................................................................................................................................
|
||||
......................................#..................................................#.........................................#........
|
||||
.......................#.....#................................................................#.............#............#..................
|
||||
.....#.............................................#.............#..........................................................................
|
||||
.............#...........................................................#.......#..................................#...........#...........
|
||||
.................................#..........................................................................................................
|
||||
.............................................#...........#..................................................................................
|
||||
.......#......................................................#............................#.........#........#.............................
|
||||
.....................#................................................#...........................................................#.........
|
||||
...............#...................#...............#.......................................................................#................
|
||||
#..........................#......................................................................#.........................................
|
||||
.............................................................................#..............................................................
|
||||
...............................#......#.................#..............................................#..........#.........................
|
||||
...........................................................................................................................................#
|
||||
.................#......#.......................#....................................#.....#..............................#.................
|
||||
.........#.............................................................#..................................#.................................
|
||||
....................................................#............#............#.........................................................#...
|
||||
..#.........................................................#........................................................#..........#...........
|
||||
............................................................................................................................................
|
||||
............................................................................................................................................
|
||||
.......#...........................#..............................................................#.........................................
|
||||
....................#...................................#................................................................#..................
|
||||
..............................#.............................................................................................................
|
||||
..#......................#.............................................#........#..........#................................................
|
||||
..........#.............................#......................#................................................................#...........
|
||||
.....................................................................................................#......................................
|
||||
......................#.............................................................................................#......................#
|
||||
#................#..................................#........................................#.................#............................
|
||||
...................................#......#.......................#...........#..........................................#.............#....
|
||||
............................................................................................................................................
|
||||
..........#..............................................#..................................................................................
|
||||
............................................................................................................................................
|
||||
....................#......#..........#.......................#......#....................#..........#.......#..................#...........
|
||||
...#.........................................................................#..............................................................
|
||||
..................................................................................#..............#..........................................
|
||||
........#.......................#..........#................................................................................................
|
||||
..............#...........................................................................................#.................................
|
||||
................................................................#.......................................................................#...
|
||||
.......................#................#.....................................................................#.............................
|
||||
....#............#............#.................................................................#.....#.....................................
|
||||
...................................................................................................................#........................
|
||||
...........................................#..............................................................................#.................
|
||||
.......#.........................................#.......#.......#.....#...............................................................#....
|
||||
................................................................................#...........#.....................................#.........
|
||||
...........#.....................................................................................#..........................................
|
||||
..............................................................#.............................................................................
|
||||
...............#.........#..........#........................................................................#..............................
|
||||
...........................................#......................................................................#......#..................
|
||||
....#...............#.......................................................................................................................
|
||||
......................................................................................#..............................................#......
|
||||
...............................................#...............#..............#.................#...........................................
|
||||
.#.........................................................................................#.........................#......................
|
||||
................#......#................#................................#..........................#...........#...........................
|
||||
......#......................#.....................#.......#................................................................................
|
||||
.............................................#...........................................................#...............#.....#........#...
|
||||
...........#.........................................................................#......................................................
|
||||
............................................................................#...............................................................
|
||||
.........................................................................................#............................#.....................
|
||||
...................#...................#.....................#....................................#.............#...........................
|
||||
.................................#..........................................................................................................
|
||||
.......#......#...........#..................................................................................................#.....#........
|
||||
.......................................................................#..............#........#.............#..............................
|
||||
......................#..................#......#..............#..............#.....................................#..................#....
|
||||
..........................................................................................#.............#...................................
|
||||
.........#..........................................#..............#.......................................................#................
|
||||
.............................#..............................................................................................................
|
||||
.............................................#...................................#..........................................................
|
||||
................#..................#........................................#......................................#........................
|
||||
....#.................#.................#.............................................#.................................#..................#
|
||||
............................................................#.........#..................................#..................................
|
||||
......................................................#...................................#.................................................
|
||||
.................................#..................................................................#.......................................
|
||||
.................................................#...................................................................................#......
|
||||
............................................................................................................................................
|
||||
..................#.............................................#.............#.........................#................#..................
|
||||
.........#.................................................#...........#.............#........#..............#............................#.
|
||||
...................................#.........................................................................................#..............
|
||||
............................................................................................................................................
|
||||
#.....................#...................................................#.......#...............................#.........................
|
||||
..............................#.................#........#..........................................................................#.......
|
||||
..............#........................................................................#....................................................
|
||||
...........................................#.............................................................#..............................#...
|
||||
.................................#...................................................................................#...........#..........
|
||||
...........#.......#.......#...........................#.....#................#......................#........#.............................
|
6
res/12/example
Normal file
6
res/12/example
Normal file
|
@ -0,0 +1,6 @@
|
|||
???.### 1,1,3
|
||||
.??..??...?##. 1,1,3
|
||||
?#?#?#?#?#?#?#? 1,3,1,6
|
||||
????.#...#... 4,1,1
|
||||
????.######..#####. 1,6,5
|
||||
?###???????? 3,2,1
|
1000
res/12/input
Normal file
1000
res/12/input
Normal file
File diff suppressed because it is too large
Load diff
68
src/days/d11.rs
Normal file
68
src/days/d11.rs
Normal file
|
@ -0,0 +1,68 @@
|
|||
use std::fs;
|
||||
|
||||
pub fn solve() {
|
||||
let path = "res/11/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 mut galaxies: Vec<(usize, usize)> = Vec::new();
|
||||
for (i, line) in contents.lines().enumerate() {
|
||||
for (j, c) in line.chars().enumerate() {
|
||||
if c == '#' {
|
||||
galaxies.push((i, j))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let mut result = 0;
|
||||
for i in 0..galaxies.len() {
|
||||
for j in i + 1..galaxies.len() {
|
||||
let (x1, y1) = galaxies[i];
|
||||
let (x2, y2) = galaxies[j];
|
||||
result += x1.abs_diff(x2) + y1.abs_diff(y2);
|
||||
}
|
||||
}
|
||||
|
||||
for (i, row) in contents.lines().enumerate() {
|
||||
if !row.contains('#') {
|
||||
let top = galaxies.iter().filter(|(x, _)| *x < i).count();
|
||||
let bot = galaxies.len() - top;
|
||||
result += top * bot;
|
||||
}
|
||||
}
|
||||
|
||||
let space: Vec<Vec<char>> = contents
|
||||
.lines()
|
||||
.map(|l| l.chars().collect::<Vec<_>>())
|
||||
.collect();
|
||||
for j in 0..space[0].len() {
|
||||
let col: Vec<char> = (0..space.len()).map(|i| space[i][j]).collect();
|
||||
if !col.contains(&'#') {
|
||||
let left = galaxies.iter().filter(|(_, y)| *y < j).count();
|
||||
let right = galaxies.len() - left;
|
||||
result += right * left;
|
||||
}
|
||||
}
|
||||
|
||||
println!("Result 1: {result}");
|
||||
|
||||
for (i, row) in contents.lines().enumerate() {
|
||||
if !row.contains('#') {
|
||||
let top = galaxies.iter().filter(|(x, _)| *x < i).count();
|
||||
let bot = galaxies.len() - top;
|
||||
result += top * bot * 999998;
|
||||
}
|
||||
}
|
||||
|
||||
for j in 0..space[0].len() {
|
||||
let col: Vec<char> = (0..space.len()).map(|i| space[i][j]).collect();
|
||||
if !col.contains(&'#') {
|
||||
let left = galaxies.iter().filter(|(_, y)| *y < j).count();
|
||||
let right = galaxies.len() - left;
|
||||
result += right * left * 999998;
|
||||
}
|
||||
}
|
||||
|
||||
println!("Result 2: {result}");
|
||||
}
|
122
src/days/d12.rs
Normal file
122
src/days/d12.rs
Normal file
|
@ -0,0 +1,122 @@
|
|||
use std::{collections::HashMap, fs};
|
||||
|
||||
use rayon::prelude::*;
|
||||
|
||||
pub fn solve() {
|
||||
let path = "res/12/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 result: usize = contents
|
||||
.par_lines()
|
||||
.map(|line| {
|
||||
let (springs_str, nums_str) = line.split_once(" ").unwrap();
|
||||
let nums: Vec<usize> = nums_str
|
||||
.split(",")
|
||||
.map(|n| n.parse::<usize>().unwrap())
|
||||
.collect();
|
||||
|
||||
let mut springs: Vec<char> = springs_str.chars().collect();
|
||||
springs.push('.');
|
||||
|
||||
let mut cache = HashMap::new();
|
||||
|
||||
count_spring_arrangements(&mut cache, springs_str.as_bytes(), None, &nums)
|
||||
})
|
||||
.sum();
|
||||
|
||||
println!("Result 1: {result}");
|
||||
|
||||
let result: usize = contents
|
||||
.lines()
|
||||
.map(|line| {
|
||||
let (springs_str, nums_str) = line.split_once(" ").unwrap();
|
||||
let nums_tmp: Vec<usize> = nums_str
|
||||
.split(",")
|
||||
.map(|n| n.parse::<usize>().unwrap())
|
||||
.collect();
|
||||
|
||||
let nums: Vec<usize> = nums_tmp
|
||||
.iter()
|
||||
.cycle()
|
||||
.take(nums_tmp.len() * 5)
|
||||
.map(|i| *i)
|
||||
.collect();
|
||||
let springs: String = std::iter::repeat(String::from(springs_str))
|
||||
.take(5)
|
||||
.collect::<Vec<String>>()
|
||||
.join("?");
|
||||
|
||||
let mut cache = HashMap::new();
|
||||
|
||||
count_spring_arrangements(&mut cache, springs.as_bytes(), None, &nums)
|
||||
})
|
||||
.sum();
|
||||
|
||||
println!("Result 2: {result}");
|
||||
}
|
||||
|
||||
fn count_spring_arrangements(
|
||||
cache: &mut HashMap<(usize, usize, usize), usize>,
|
||||
springs: &[u8],
|
||||
in_broken_group: Option<usize>,
|
||||
remaining_broken: &[usize],
|
||||
) -> usize {
|
||||
if springs.is_empty() {
|
||||
return match (in_broken_group, remaining_broken.len()) {
|
||||
(None, 0) => 1,
|
||||
(Some(x), 1) if x == remaining_broken[0] => 1,
|
||||
_ => 0,
|
||||
};
|
||||
}
|
||||
|
||||
if in_broken_group.is_some() && remaining_broken.is_empty() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
let key = (
|
||||
springs.len(),
|
||||
in_broken_group.unwrap_or(0),
|
||||
remaining_broken.len(),
|
||||
);
|
||||
if let Some(&result) = cache.get(&key) {
|
||||
return result;
|
||||
}
|
||||
|
||||
let ways = match (springs[0], in_broken_group) {
|
||||
(b'.', Some(x)) if x != remaining_broken[0] => 0,
|
||||
(b'.', Some(_)) => {
|
||||
count_spring_arrangements(cache, &springs[1..], None, &remaining_broken[1..])
|
||||
}
|
||||
(b'.', None) => count_spring_arrangements(cache, &springs[1..], None, remaining_broken),
|
||||
(b'#', Some(_)) => count_spring_arrangements(
|
||||
cache,
|
||||
&springs[1..],
|
||||
in_broken_group.map(|x| x + 1),
|
||||
remaining_broken,
|
||||
),
|
||||
(b'#', None) => count_spring_arrangements(cache, &springs[1..], Some(1), remaining_broken),
|
||||
(b'?', Some(x)) => {
|
||||
let mut ans = count_spring_arrangements(
|
||||
cache,
|
||||
&springs[1..],
|
||||
in_broken_group.map(|x| x + 1),
|
||||
remaining_broken,
|
||||
);
|
||||
if x == remaining_broken[0] {
|
||||
ans +=
|
||||
count_spring_arrangements(cache, &springs[1..], None, &remaining_broken[1..]);
|
||||
}
|
||||
ans
|
||||
}
|
||||
(b'?', None) => {
|
||||
count_spring_arrangements(cache, &springs[1..], Some(1), remaining_broken)
|
||||
+ count_spring_arrangements(cache, &springs[1..], None, remaining_broken)
|
||||
}
|
||||
_ => unreachable!(),
|
||||
};
|
||||
|
||||
cache.insert(key, ways);
|
||||
ways
|
||||
}
|
|
@ -3,7 +3,7 @@ pub mod days;
|
|||
|
||||
|
||||
fn main() {
|
||||
days::d10::solve()
|
||||
days::d12::solve()
|
||||
//_all_days()
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue