done with 2023

This commit is contained in:
Dylan Thies
2023-12-28 20:26:01 -05:00
parent e034f6b859
commit c05ab694ab
6 changed files with 354 additions and 27 deletions

240
2023/Cargo.lock generated
View File

@@ -17,6 +17,19 @@ version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
[[package]]
name = "ahash"
version = "0.8.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a"
dependencies = [
"cfg-if",
"getrandom",
"once_cell",
"version_check",
"zerocopy",
]
[[package]] [[package]]
name = "aho-corasick" name = "aho-corasick"
version = "1.1.2" version = "1.1.2"
@@ -26,6 +39,12 @@ dependencies = [
"memchr", "memchr",
] ]
[[package]]
name = "allocator-api2"
version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5"
[[package]] [[package]]
name = "anyhow" name = "anyhow"
version = "1.0.75" version = "1.0.75"
@@ -80,13 +99,44 @@ version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
name = "crossbeam-deque"
version = "0.8.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fca89a0e215bab21874660c67903c5f143333cab1da83d041c7ded6053774751"
dependencies = [
"cfg-if",
"crossbeam-epoch",
"crossbeam-utils",
]
[[package]]
name = "crossbeam-epoch"
version = "0.9.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0e3681d554572a651dda4186cd47240627c3d0114d45a95f6ad27f2f22e7548d"
dependencies = [
"autocfg",
"cfg-if",
"crossbeam-utils",
]
[[package]]
name = "crossbeam-utils"
version = "0.8.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c3a430a770ebd84726f584a90ee7f020d28db52c6d02138900f22341f866d39c"
dependencies = [
"cfg-if",
]
[[package]] [[package]]
name = "day-1" name = "day-1"
version = "2023.0.0" version = "2023.0.0"
dependencies = [ dependencies = [
"derive-getters", "derive-getters",
"error-stack", "error-stack",
"itertools", "itertools 0.12.0",
"log", "log",
"nom", "nom",
] ]
@@ -96,7 +146,7 @@ name = "day-10"
version = "2023.0.0" version = "2023.0.0"
dependencies = [ dependencies = [
"glam", "glam",
"itertools", "itertools 0.12.0",
"nom", "nom",
"nom_locate", "nom_locate",
"rstest", "rstest",
@@ -107,7 +157,7 @@ name = "day-11"
version = "2023.0.0" version = "2023.0.0"
dependencies = [ dependencies = [
"glam", "glam",
"itertools", "itertools 0.12.0",
"nom", "nom",
"nom_locate", "nom_locate",
] ]
@@ -116,7 +166,7 @@ dependencies = [
name = "day-12" name = "day-12"
version = "2023.0.0" version = "2023.0.0"
dependencies = [ dependencies = [
"itertools", "itertools 0.12.0",
"nom", "nom",
"rstest", "rstest",
] ]
@@ -126,7 +176,7 @@ name = "day-13"
version = "2023.0.0" version = "2023.0.0"
dependencies = [ dependencies = [
"glam", "glam",
"itertools", "itertools 0.12.0",
"nom", "nom",
"nom_locate", "nom_locate",
"rstest", "rstest",
@@ -137,7 +187,7 @@ name = "day-14"
version = "2023.0.0" version = "2023.0.0"
dependencies = [ dependencies = [
"glam", "glam",
"itertools", "itertools 0.12.0",
"nom", "nom",
"nom_locate", "nom_locate",
"rstest", "rstest",
@@ -147,7 +197,7 @@ dependencies = [
name = "day-15" name = "day-15"
version = "2023.0.0" version = "2023.0.0"
dependencies = [ dependencies = [
"itertools", "itertools 0.12.0",
"nom", "nom",
"rstest", "rstest",
] ]
@@ -157,7 +207,7 @@ name = "day-16"
version = "2023.0.0" version = "2023.0.0"
dependencies = [ dependencies = [
"glam", "glam",
"itertools", "itertools 0.12.0",
"nom", "nom",
"nom_locate", "nom_locate",
] ]
@@ -167,7 +217,7 @@ name = "day-17"
version = "2023.0.0" version = "2023.0.0"
dependencies = [ dependencies = [
"glam", "glam",
"itertools", "itertools 0.12.0",
"nom", "nom",
"nom_locate", "nom_locate",
"pathfinding", "pathfinding",
@@ -179,7 +229,7 @@ name = "day-18"
version = "2023.0.0" version = "2023.0.0"
dependencies = [ dependencies = [
"glam", "glam",
"itertools", "itertools 0.12.0",
"nom", "nom",
] ]
@@ -187,7 +237,7 @@ dependencies = [
name = "day-19" name = "day-19"
version = "2023.0.0" version = "2023.0.0"
dependencies = [ dependencies = [
"itertools", "itertools 0.12.0",
"nom", "nom",
] ]
@@ -195,7 +245,7 @@ dependencies = [
name = "day-2" name = "day-2"
version = "2023.0.0" version = "2023.0.0"
dependencies = [ dependencies = [
"itertools", "itertools 0.12.0",
"log", "log",
"nom", "nom",
] ]
@@ -204,7 +254,7 @@ dependencies = [
name = "day-20" name = "day-20"
version = "2023.0.0" version = "2023.0.0"
dependencies = [ dependencies = [
"itertools", "itertools 0.12.0",
"nom", "nom",
"num", "num",
"rstest", "rstest",
@@ -215,7 +265,7 @@ name = "day-21"
version = "2023.0.0" version = "2023.0.0"
dependencies = [ dependencies = [
"glam", "glam",
"itertools", "itertools 0.12.0",
"nom", "nom",
"nom_locate", "nom_locate",
"rstest", "rstest",
@@ -226,7 +276,7 @@ name = "day-22"
version = "2023.0.0" version = "2023.0.0"
dependencies = [ dependencies = [
"glam", "glam",
"itertools", "itertools 0.12.0",
"nom", "nom",
] ]
@@ -235,7 +285,7 @@ name = "day-23"
version = "2023.0.0" version = "2023.0.0"
dependencies = [ dependencies = [
"glam", "glam",
"itertools", "itertools 0.12.0",
"nom", "nom",
"nom_locate", "nom_locate",
"petgraph", "petgraph",
@@ -246,16 +296,26 @@ name = "day-24"
version = "2023.0.0" version = "2023.0.0"
dependencies = [ dependencies = [
"glam", "glam",
"itertools", "itertools 0.12.0",
"nom", "nom",
"num", "num",
] ]
[[package]]
name = "day-25"
version = "2023.0.0"
dependencies = [
"itertools 0.12.0",
"nom",
"petgraph",
"rustworkx-core",
]
[[package]] [[package]]
name = "day-3" name = "day-3"
version = "2023.0.0" version = "2023.0.0"
dependencies = [ dependencies = [
"itertools", "itertools 0.12.0",
"log", "log",
] ]
@@ -263,7 +323,7 @@ dependencies = [
name = "day-4" name = "day-4"
version = "2023.0.0" version = "2023.0.0"
dependencies = [ dependencies = [
"itertools", "itertools 0.12.0",
"nom", "nom",
"rstest", "rstest",
"rstest_reuse", "rstest_reuse",
@@ -273,7 +333,7 @@ dependencies = [
name = "day-5" name = "day-5"
version = "2023.0.0" version = "2023.0.0"
dependencies = [ dependencies = [
"itertools", "itertools 0.12.0",
"nom", "nom",
] ]
@@ -281,7 +341,7 @@ dependencies = [
name = "day-6" name = "day-6"
version = "2023.0.0" version = "2023.0.0"
dependencies = [ dependencies = [
"itertools", "itertools 0.12.0",
"nom", "nom",
] ]
@@ -290,7 +350,7 @@ name = "day-7"
version = "2023.0.0" version = "2023.0.0"
dependencies = [ dependencies = [
"dhat", "dhat",
"itertools", "itertools 0.12.0",
"nom", "nom",
"num", "num",
"num-traits", "num-traits",
@@ -300,7 +360,7 @@ dependencies = [
name = "day-8" name = "day-8"
version = "2023.0.0" version = "2023.0.0"
dependencies = [ dependencies = [
"itertools", "itertools 0.12.0",
"nom", "nom",
"rstest", "rstest",
] ]
@@ -309,7 +369,7 @@ dependencies = [
name = "day-9" name = "day-9"
version = "2023.0.0" version = "2023.0.0"
dependencies = [ dependencies = [
"itertools", "itertools 0.12.0",
"nom", "nom",
"rstest", "rstest",
] ]
@@ -505,11 +565,32 @@ version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
[[package]]
name = "hashbrown"
version = "0.12.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
[[package]] [[package]]
name = "hashbrown" name = "hashbrown"
version = "0.14.3" version = "0.14.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
dependencies = [
"ahash",
"allocator-api2",
"rayon",
]
[[package]]
name = "indexmap"
version = "1.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
dependencies = [
"autocfg",
"hashbrown 0.12.3",
]
[[package]] [[package]]
name = "indexmap" name = "indexmap"
@@ -518,7 +599,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f"
dependencies = [ dependencies = [
"equivalent", "equivalent",
"hashbrown", "hashbrown 0.14.3",
"rayon",
] ]
[[package]] [[package]]
@@ -530,6 +612,15 @@ dependencies = [
"num-traits", "num-traits",
] ]
[[package]]
name = "itertools"
version = "0.10.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
dependencies = [
"either",
]
[[package]] [[package]]
name = "itertools" name = "itertools"
version = "0.12.0" version = "0.12.0"
@@ -747,7 +838,7 @@ checksum = "3ea07a6e677e47d6a84724d4fdf88b1e37fcb49ac94e236d7caeefd8fee75c8a"
dependencies = [ dependencies = [
"deprecate-until", "deprecate-until",
"fixedbitset", "fixedbitset",
"indexmap", "indexmap 2.1.0",
"integer-sqrt", "integer-sqrt",
"num-traits", "num-traits",
"rustc-hash", "rustc-hash",
@@ -761,7 +852,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9"
dependencies = [ dependencies = [
"fixedbitset", "fixedbitset",
"indexmap", "indexmap 2.1.0",
] ]
[[package]] [[package]]
@@ -782,6 +873,16 @@ version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
[[package]]
name = "priority-queue"
version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fff39edfcaec0d64e8d0da38564fad195d2d51b680940295fcc307366e101e61"
dependencies = [
"autocfg",
"indexmap 1.9.3",
]
[[package]] [[package]]
name = "proc-macro2" name = "proc-macro2"
version = "1.0.70" version = "1.0.70"
@@ -830,6 +931,46 @@ dependencies = [
"getrandom", "getrandom",
] ]
[[package]]
name = "rand_pcg"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "59cad018caf63deb318e5a4586d99a24424a364f40f1e5778c29aca23f4fc73e"
dependencies = [
"rand_core",
]
[[package]]
name = "rayon"
version = "1.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1"
dependencies = [
"either",
"rayon-core",
]
[[package]]
name = "rayon-cond"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ac2a28c5317e6d26ac87a8629c0eb362690ed1d739f4040e21cfaafdf04e6f8"
dependencies = [
"either",
"itertools 0.10.5",
"rayon",
]
[[package]]
name = "rayon-core"
version = "1.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed"
dependencies = [
"crossbeam-deque",
"crossbeam-utils",
]
[[package]] [[package]]
name = "redox_syscall" name = "redox_syscall"
version = "0.4.1" version = "0.4.1"
@@ -936,6 +1077,25 @@ dependencies = [
"semver", "semver",
] ]
[[package]]
name = "rustworkx-core"
version = "0.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "72abf7976bc09a30391248b3c6509338b235c02b0e9b0bf8af686c289cad3f45"
dependencies = [
"ahash",
"fixedbitset",
"hashbrown 0.14.3",
"indexmap 2.1.0",
"num-traits",
"petgraph",
"priority-queue",
"rand",
"rand_pcg",
"rayon",
"rayon-cond",
]
[[package]] [[package]]
name = "ryu" name = "ryu"
version = "1.0.16" version = "1.0.16"
@@ -1064,6 +1224,12 @@ version = "1.0.12"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
[[package]]
name = "version_check"
version = "0.9.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
[[package]] [[package]]
name = "wasi" name = "wasi"
version = "0.11.0+wasi-snapshot-preview1" version = "0.11.0+wasi-snapshot-preview1"
@@ -1126,3 +1292,23 @@ name = "windows_x86_64_msvc"
version = "0.48.5" version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
[[package]]
name = "zerocopy"
version = "0.7.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be"
dependencies = [
"zerocopy-derive",
]
[[package]]
name = "zerocopy-derive"
version = "0.7.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.39",
]

14
2023/day-25/Cargo.toml Normal file
View File

@@ -0,0 +1,14 @@
[package]
name = "day-25"
version.workspace = true
edition.workspace = true
authors.workspace = true
repository.workspace = true
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
nom = { workspace = true }
itertools = {workspace = true }
petgraph = "0.6.4"
rustworkx-core = "0.13.2"

4
2023/day-25/src/lib.rs Normal file
View File

@@ -0,0 +1,4 @@
pub mod part1;
pub use crate::part1::*;
pub mod part2;
pub use crate::part2::*;

12
2023/day-25/src/main.rs Normal file
View File

@@ -0,0 +1,12 @@
#![warn(clippy::all, clippy::pedantic)]
use day_25::part1;
use day_25::part2;
fn main() {
let input = include_str!("./input.txt");
let part1_result = part1(input);
println!("part 1: {part1_result}");
let part2_result = part2(input);
println!("part 2: {part2_result}");
}

92
2023/day-25/src/part1.rs Normal file
View File

@@ -0,0 +1,92 @@
#![warn(clippy::all, clippy::pedantic)]
use std::collections::HashMap;
use itertools::Itertools;
use nom::{
bytes::complete::tag,
character::complete,
multi::separated_list1,
sequence::{separated_pair, tuple},
IResult,
};
use petgraph::prelude::*;
use rustworkx_core::connectivity::stoer_wagner_min_cut;
/// day 25 part 1 of aoc 2023
///
/// # Arguments
/// - input the input for today's puzzle
///
/// # Panics
/// panics whne it cannot parse the input OR when ever the number of game numbers is greater than
#[must_use]
pub fn part1(input: &str) -> String {
let (_, initial_map) = parse_input(input).expect("AOC should have valid input");
let all_node_strings = initial_map
.iter()
.flat_map(|(key, nodes)| {
let mut nodes = nodes.clone();
nodes.push(key);
nodes
})
.unique()
.collect::<Vec<_>>();
let mut graph = UnGraph::<&str, u32>::default();
let node_map = all_node_strings
.iter()
.map(|&id| (id, graph.add_node(id)))
.collect::<HashMap<_, _>>();
for (&src_id, dest_nodes) in &initial_map {
for &dest_id in dest_nodes {
graph.add_edge(node_map[src_id], node_map[dest_id], 1);
}
}
let total_nodes = all_node_strings.len();
let min_cut_res: rustworkx_core::Result<Option<(usize, Vec<_>)>> =
stoer_wagner_min_cut(&graph, |_| Ok(1));
let (_mincut, partition) = min_cut_res.unwrap().unwrap();
let partition_len = partition.len();
let rest_len = total_nodes - partition_len;
(partition_len * rest_len).to_string()
}
fn parse_input(input: &str) -> IResult<&str, HashMap<&str, Vec<&str>>> {
let (input, nodes_as_array) = separated_list1(
complete::line_ending,
separated_pair(
complete::alpha1,
tuple((tag(":"), complete::space0)),
separated_list1(complete::space1, complete::alpha1),
),
)(input)?;
Ok((input, nodes_as_array.into_iter().collect()))
}
#[cfg(test)]
mod test {
use super::*;
const INPUT: &str = "jqt: rhn xhk nvd
rsh: frs pzl lsr
xhk: hfx
cmg: qnr nvd lhk bvb
rhn: xhk bvb hfx
bvb: xhk hfx
pzl: lsr hfx nvd
qnr: nvd
ntq: jqt hfx bvb xhk
nvd: lhk
lsr: lhk
rzs: qnr cmg lsr rsh
frs: qnr lhk lsr";
#[test]
fn part1_works() {
let result = part1(INPUT);
assert_eq!(result, "54".to_string());
}
}

19
2023/day-25/src/part2.rs Normal file
View File

@@ -0,0 +1,19 @@
#![warn(clippy::all, clippy::pedantic)]
#[must_use]
pub fn part2(_input: &str) -> String {
"Not Finished".to_string()
}
#[cfg(test)]
mod test {
use super::*;
const INPUT: &str = "";
#[test]
fn part2_works() {
let result = part2(INPUT);
assert_eq!(result, "Not Finished".to_string());
}
}