[Rust/2023/25] Add solution

This commit is contained in:
Felix Bargfeldt 2023-12-25 07:32:25 +01:00
parent 8610678124
commit ceb6b86432
Signed by: Defelo
GPG key ID: 2A05272471204DD3
7 changed files with 207 additions and 5 deletions

File diff suppressed because one or more lines are too long

35
Rust/2023/25.rs Normal file
View file

@ -0,0 +1,35 @@
#![feature(test)]
use rustc_hash::FxHashMap;
use rustworkx_core::{
connectivity::stoer_wagner_min_cut,
petgraph::{Graph, Undirected},
};
type Input = Graph<(), (), Undirected, u16>;
fn setup(input: &str) -> Input {
let mut graph = Graph::default();
let mut nodes = FxHashMap::default();
for line in input.lines() {
let p = *nodes
.entry(line.split(':').next().unwrap())
.or_insert_with(|| graph.add_node(()));
for q in line.split_whitespace().skip(1) {
let q = *nodes.entry(q).or_insert_with(|| graph.add_node(()));
graph.add_edge(p, q, ());
}
}
graph
}
fn part1(input: &Input) -> usize {
let x = stoer_wagner_min_cut(input, |_| Ok::<_, ()>(1))
.unwrap()
.unwrap()
.1
.len();
x * (input.node_count() - x)
}
aoc::main!(2023, 25, ex: 1);

154
Rust/Cargo.lock generated
View file

@ -2,6 +2,19 @@
# It is not intended for manual editing.
version = 3
[[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]]
name = "aho-corasick"
version = "1.1.2"
@ -11,13 +24,19 @@ dependencies = [
"memchr",
]
[[package]]
name = "allocator-api2"
version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5"
[[package]]
name = "aoc"
version = "0.0.0"
dependencies = [
"counter",
"indexmap",
"itertools",
"indexmap 2.1.0",
"itertools 0.11.0",
"ndarray",
"num",
"paste",
@ -25,6 +44,7 @@ dependencies = [
"rayon",
"regex",
"rustc-hash",
"rustworkx-core",
"smallvec",
"z3",
]
@ -178,6 +198,12 @@ version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
[[package]]
name = "fixedbitset"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
[[package]]
name = "fnv"
version = "1.0.7"
@ -201,11 +227,32 @@ version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
[[package]]
name = "hashbrown"
version = "0.12.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
[[package]]
name = "hashbrown"
version = "0.14.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
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]]
name = "indexmap"
@ -214,7 +261,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f"
dependencies = [
"equivalent",
"hashbrown",
"hashbrown 0.14.3",
"rayon",
]
[[package]]
name = "itertools"
version = "0.10.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
dependencies = [
"either",
]
[[package]]
@ -403,6 +460,12 @@ dependencies = [
"libm",
]
[[package]]
name = "once_cell"
version = "1.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
[[package]]
name = "paste"
version = "1.0.14"
@ -415,12 +478,32 @@ version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
[[package]]
name = "petgraph"
version = "0.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9"
dependencies = [
"fixedbitset",
"indexmap 2.1.0",
]
[[package]]
name = "ppv-lite86"
version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
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]]
name = "proc-macro2"
version = "1.0.71"
@ -495,6 +578,15 @@ dependencies = [
"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 = "rand_xorshift"
version = "0.3.0"
@ -520,6 +612,17 @@ dependencies = [
"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"
@ -593,6 +696,25 @@ dependencies = [
"windows-sys",
]
[[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]]
name = "rusty-fork"
version = "0.3.0"
@ -659,6 +781,12 @@ version = "1.0.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
[[package]]
name = "version_check"
version = "0.9.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
[[package]]
name = "wait-timeout"
version = "0.2.0"
@ -780,3 +908,23 @@ checksum = "d7cf70fdbc0de3f42b404f49b0d4686a82562254ea29ff0a155eef2f5430f4b0"
dependencies = [
"bindgen",
]
[[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",
]

View file

@ -28,6 +28,7 @@ paste = "1.0.14"
rayon = "1.8.0"
regex = "1.10.2"
rustc-hash = "1.1.0"
rustworkx-core = "0.13.2"
smallvec = "1.11.1"
z3 = "0.12.1"
@ -297,3 +298,6 @@ path = "2023/23.rs"
[[bin]]
name = "2023_24"
path = "2023/24.rs"
[[bin]]
name = "2023_25"
path = "2023/25.rs"

13
examples/2023/25/1 Normal file
View file

@ -0,0 +1,13 @@
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

1
examples/2023/25/1.1 Normal file
View file

@ -0,0 +1 @@
54

View file

@ -35,6 +35,7 @@
pyperclip
requests
beautifulsoup4
networkx
sympy
]);