From 26308265dee040724126c25df4865f62271c4d57 Mon Sep 17 00:00:00 2001 From: hal8174 Date: Sat, 14 Dec 2024 14:09:22 +0100 Subject: [PATCH] Solve day 14 --- .gitignore | 1 + Cargo.lock | 935 +++++++++++++++++++++++++++++++++++++++++++++++++- Cargo.toml | 1 + input/14-0.in | 12 + input/14-1.in | 500 +++++++++++++++++++++++++++ src/bin/14.rs | 81 +++++ 6 files changed, 1526 insertions(+), 4 deletions(-) create mode 100644 input/14-0.in create mode 100644 input/14-1.in create mode 100644 src/bin/14.rs diff --git a/.gitignore b/.gitignore index ea8c4bf..9b23f50 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /target +images14 diff --git a/Cargo.lock b/Cargo.lock index b455533..44589ff 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,12 +1,19 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 + +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "adventofcode2024" version = "0.1.0" dependencies = [ - "itertools", + "image", + "itertools 0.13.0", "memoize", "regex", ] @@ -31,18 +38,237 @@ dependencies = [ "memchr", ] +[[package]] +name = "aligned-vec" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4aa90d7ce82d4be67b64039a3d588d38dbcc6736577de4a847025ce5b0c468d1" + +[[package]] +name = "anyhow" +version = "1.0.94" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1fd03a028ef38ba2276dce7e33fcd6369c158a1bca17946c4b1b701891c1ff7" + +[[package]] +name = "arbitrary" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" + +[[package]] +name = "arg_enum_proc_macro" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.90", +] + +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" + +[[package]] +name = "autocfg" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" + +[[package]] +name = "av1-grain" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6678909d8c5d46a42abcf571271e15fdbc0a225e3646cf23762cd415046c78bf" +dependencies = [ + "anyhow", + "arrayvec", + "log", + "nom", + "num-rational", + "v_frame", +] + +[[package]] +name = "avif-serialize" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e335041290c43101ca215eed6f43ec437eb5a42125573f600fc3fa42b9bddd62" +dependencies = [ + "arrayvec", +] + +[[package]] +name = "bit_field" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitstream-io" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6099cdc01846bc367c4e7dd630dc5966dccf36b652fae7a74e17b640411a91b2" + +[[package]] +name = "built" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c360505aed52b7ec96a3636c3f039d99103c37d1d9b4f7a8c743d3ea9ffcd03b" + +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[package]] +name = "bytemuck" +version = "1.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b37c88a63ffd85d15b406896cc343916d7cf57838a847b3a6f2ca5d39a5695a" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "byteorder-lite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" + +[[package]] +name = "cc" +version = "1.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9157bbaa6b165880c27a4293a474c91cdcf265cc68cc829bf10be0964a391caf" +dependencies = [ + "jobserver", + "libc", + "shlex", +] + +[[package]] +name = "cfg-expr" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" +dependencies = [ + "smallvec", + "target-lexicon", +] + [[package]] name = "cfg-if" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "color_quant" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" + +[[package]] +name = "crc32fast" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + [[package]] name = "either" version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "exr" +version = "1.73.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83197f59927b46c04a183a619b7c29df34e63e63c7869320862268c0ef687e0" +dependencies = [ + "bit_field", + "half", + "lebe", + "miniz_oxide", + "rayon-core", + "smallvec", + "zune-inflate", +] + +[[package]] +name = "fdeflate" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "flate2" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + [[package]] name = "getrandom" version = "0.2.15" @@ -54,6 +280,26 @@ dependencies = [ "wasi", ] +[[package]] +name = "gif" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fb2d69b19215e18bb912fa30f7ce15846e301408695e44e0ef719f1da9e19f2" +dependencies = [ + "color_quant", + "weezl", +] + +[[package]] +name = "half" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" +dependencies = [ + "cfg-if", + "crunchy", +] + [[package]] name = "hashbrown" version = "0.12.3" @@ -63,6 +309,87 @@ dependencies = [ "ahash", ] +[[package]] +name = "hashbrown" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "image" +version = "0.25.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd6f44aed642f18953a158afeb30206f4d50da59fbc66ecb53c66488de73563b" +dependencies = [ + "bytemuck", + "byteorder-lite", + "color_quant", + "exr", + "gif", + "image-webp", + "num-traits", + "png", + "qoi", + "ravif", + "rayon", + "rgb", + "tiff", + "zune-core", + "zune-jpeg", +] + +[[package]] +name = "image-webp" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e031e8e3d94711a9ccb5d6ea357439ef3dcbed361798bd4071dc4d9793fbe22f" +dependencies = [ + "byteorder-lite", + "quick-error", +] + +[[package]] +name = "imgref" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0263a3d970d5c054ed9312c0057b4f3bde9c0b33836d3637361d4a9e6e7a408" + +[[package]] +name = "indexmap" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" +dependencies = [ + "equivalent", + "hashbrown 0.15.2", +] + +[[package]] +name = "interpolate_name" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.90", +] + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + [[package]] name = "itertools" version = "0.13.0" @@ -72,25 +399,81 @@ dependencies = [ "either", ] +[[package]] +name = "jobserver" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +dependencies = [ + "libc", +] + +[[package]] +name = "jpeg-decoder" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" + [[package]] name = "lazy_static" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +[[package]] +name = "lebe" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" + [[package]] name = "libc" version = "0.2.168" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5aaeb2981e0606ca11d79718f8bb01164f1d6ed75080182d3abf017e6d244b6d" +[[package]] +name = "libfuzzer-sys" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b9569d2f74e257076d8c6bfa73fb505b46b851e51ddaecc825944aa3bed17fa" +dependencies = [ + "arbitrary", + "cc", +] + +[[package]] +name = "log" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" + +[[package]] +name = "loop9" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fae87c125b03c1d2c0150c90365d7d6bcc53fb73a9acaef207d2d065860f062" +dependencies = [ + "imgref", +] + [[package]] name = "lru" version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e999beba7b6e8345721bd280141ed958096a2e4abdf74f67ff4ce49b4b54e47a" dependencies = [ - "hashbrown", + "hashbrown 0.12.3", +] + +[[package]] +name = "maybe-rayon" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519" +dependencies = [ + "cfg-if", + "rayon", ] [[package]] @@ -119,7 +502,95 @@ dependencies = [ "lazy_static", "proc-macro2", "quote", - "syn", + "syn 1.0.109", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +dependencies = [ + "adler2", + "simd-adler32", +] + +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "noop_proc_macro" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8" + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.90", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", ] [[package]] @@ -128,6 +599,40 @@ version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "pkg-config" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" + +[[package]] +name = "png" +version = "0.17.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67582bd5b65bdff614270e2ea89a1cf15bef71245cc1e5f7ea126977144211d" +dependencies = [ + "bitflags", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] + [[package]] name = "proc-macro2" version = "1.0.92" @@ -137,6 +642,40 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "profiling" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afbdc74edc00b6f6a218ca6a5364d6226a259d4b8ea1af4a0ea063f27e179f4d" +dependencies = [ + "profiling-procmacros", +] + +[[package]] +name = "profiling-procmacros" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a65f2e60fbf1063868558d69c6beacf412dc755f9fc020f514b7955fc914fe30" +dependencies = [ + "quote", + "syn 2.0.90", +] + +[[package]] +name = "qoi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "quick-error" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" + [[package]] name = "quote" version = "1.0.37" @@ -146,6 +685,106 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rav1e" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd87ce80a7665b1cce111f8a16c1f3929f6547ce91ade6addf4ec86a8dda5ce9" +dependencies = [ + "arbitrary", + "arg_enum_proc_macro", + "arrayvec", + "av1-grain", + "bitstream-io", + "built", + "cfg-if", + "interpolate_name", + "itertools 0.12.1", + "libc", + "libfuzzer-sys", + "log", + "maybe-rayon", + "new_debug_unreachable", + "noop_proc_macro", + "num-derive", + "num-traits", + "once_cell", + "paste", + "profiling", + "rand", + "rand_chacha", + "simd_helpers", + "system-deps", + "thiserror", + "v_frame", + "wasm-bindgen", +] + +[[package]] +name = "ravif" +version = "0.11.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2413fd96bd0ea5cdeeb37eaf446a22e6ed7b981d792828721e74ded1980a45c6" +dependencies = [ + "avif-serialize", + "imgref", + "loop9", + "quick-error", + "rav1e", + "rayon", + "rgb", +] + +[[package]] +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + [[package]] name = "regex" version = "1.11.1" @@ -175,6 +814,68 @@ version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" +[[package]] +name = "rgb" +version = "0.8.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57397d16646700483b67d2dd6511d79318f9d057fdbd21a4066aeac8b41d310a" + +[[package]] +name = "serde" +version = "1.0.216" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b9781016e935a97e8beecf0c933758c97a5520d32930e460142b4cd80c6338e" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.216" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46f859dbbf73865c6627ed570e78961cd3ac92407a2d117204c49232485da55e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.90", +] + +[[package]] +name = "serde_spanned" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" +dependencies = [ + "serde", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + +[[package]] +name = "simd_helpers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95890f873bec569a0362c235787f3aca6e1e887302ba4840839bcc6459c42da6" +dependencies = [ + "quote", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + [[package]] name = "syn" version = "1.0.109" @@ -186,12 +887,124 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "syn" +version = "2.0.90" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "919d3b74a5dd0ccd15aeb8f93e7006bd9e14c295087c9896a110f490752bcf31" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "system-deps" +version = "6.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" +dependencies = [ + "cfg-expr", + "heck", + "pkg-config", + "toml", + "version-compare", +] + +[[package]] +name = "target-lexicon" +version = "0.12.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.90", +] + +[[package]] +name = "tiff" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e" +dependencies = [ + "flate2", + "jpeg-decoder", + "weezl", +] + +[[package]] +name = "toml" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + +[[package]] +name = "toml_datetime" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.22.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + [[package]] name = "unicode-ident" version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" +[[package]] +name = "v_frame" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6f32aaa24bacd11e488aa9ba66369c7cd514885742c9fe08cfe85884db3e92b" +dependencies = [ + "aligned-vec", + "num-traits", + "wasm-bindgen", +] + +[[package]] +name = "version-compare" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b" + [[package]] name = "version_check" version = "0.9.5" @@ -203,3 +1016,117 @@ name = "wasi" version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.99" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" +dependencies = [ + "cfg-if", + "once_cell", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.99" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" +dependencies = [ + "bumpalo", + "log", + "proc-macro2", + "quote", + "syn 2.0.90", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.99" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.99" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.90", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.99" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" + +[[package]] +name = "weezl" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" + +[[package]] +name = "winnow" +version = "0.6.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" +dependencies = [ + "memchr", +] + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "byteorder", + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.90", +] + +[[package]] +name = "zune-core" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a" + +[[package]] +name = "zune-inflate" +version = "0.2.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "zune-jpeg" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99a5bab8d7dedf81405c4bb1f2b83ea057643d9cb28778cea9eecddeedd2e028" +dependencies = [ + "zune-core", +] diff --git a/Cargo.toml b/Cargo.toml index ecd8d4c..d142b41 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,6 +4,7 @@ version = "0.1.0" edition = "2021" [dependencies] +image = "0.25.5" itertools = "0.13.0" memoize = "0.4.2" regex = "1.11.1" diff --git a/input/14-0.in b/input/14-0.in new file mode 100644 index 0000000..2455da4 --- /dev/null +++ b/input/14-0.in @@ -0,0 +1,12 @@ +p=0,4 v=3,-3 +p=6,3 v=-1,-3 +p=10,3 v=-1,2 +p=2,0 v=2,-1 +p=0,0 v=1,3 +p=3,0 v=-2,-2 +p=7,6 v=-1,-3 +p=3,0 v=-1,-2 +p=9,3 v=2,3 +p=7,3 v=-1,2 +p=2,4 v=2,-3 +p=9,5 v=-3,-3 diff --git a/input/14-1.in b/input/14-1.in new file mode 100644 index 0000000..7327a90 --- /dev/null +++ b/input/14-1.in @@ -0,0 +1,500 @@ +p=69,95 v=70,-27 +p=95,51 v=-76,-2 +p=54,32 v=-80,-4 +p=41,28 v=27,6 +p=63,6 v=-33,55 +p=80,2 v=77,-78 +p=69,53 v=54,-1 +p=78,40 v=-11,99 +p=36,55 v=-18,9 +p=71,24 v=83,67 +p=3,77 v=-38,71 +p=13,54 v=5,-73 +p=89,20 v=-9,25 +p=39,70 v=-40,-61 +p=38,55 v=-27,30 +p=40,4 v=-87,19 +p=62,23 v=35,-48 +p=65,46 v=-61,13 +p=43,58 v=-93,2 +p=1,19 v=-61,17 +p=81,23 v=-51,53 +p=11,53 v=78,20 +p=70,67 v=-70,-67 +p=20,45 v=-88,40 +p=90,37 v=-37,-8 +p=90,0 v=-11,51 +p=50,89 v=-20,80 +p=84,58 v=29,48 +p=1,24 v=-76,-50 +p=39,70 v=-16,-67 +p=4,58 v=91,-97 +p=35,3 v=54,-86 +p=55,38 v=56,-14 +p=81,6 v=-4,-84 +p=90,42 v=17,-30 +p=54,0 v=8,13 +p=30,30 v=88,-42 +p=3,84 v=-29,-17 +p=75,6 v=-28,-88 +p=63,6 v=-94,-98 +p=58,19 v=-93,75 +p=97,63 v=-3,51 +p=6,99 v=-30,50 +p=48,83 v=-32,88 +p=59,40 v=-59,-73 +p=54,102 v=-86,13 +p=93,48 v=-91,-18 +p=80,4 v=72,-32 +p=89,11 v=98,-56 +p=64,93 v=-72,-5 +p=0,36 v=31,6 +p=46,56 v=-88,-91 +p=58,94 v=-67,1 +p=80,73 v=-18,96 +p=3,101 v=-2,-21 +p=67,30 v=-45,87 +p=97,77 v=-3,74 +p=24,54 v=66,-89 +p=96,17 v=99,-71 +p=84,7 v=50,-20 +p=89,62 v=65,-67 +p=13,12 v=-48,-90 +p=73,2 v=-45,39 +p=47,100 v=-59,90 +p=36,9 v=46,-76 +p=78,52 v=12,-70 +p=1,42 v=-91,18 +p=20,23 v=-89,61 +p=96,47 v=24,-79 +p=98,100 v=31,27 +p=35,73 v=-80,-29 +p=40,39 v=81,10 +p=8,7 v=25,21 +p=23,10 v=-1,19 +p=95,77 v=-27,49 +p=43,88 v=20,-80 +p=58,83 v=21,-35 +p=0,26 v=38,-20 +p=47,92 v=61,94 +p=23,74 v=72,-22 +p=52,54 v=1,-93 +p=8,61 v=65,-59 +p=8,52 v=72,-93 +p=63,14 v=17,60 +p=16,51 v=82,-9 +p=77,34 v=56,-20 +p=74,5 v=-58,-72 +p=35,77 v=6,58 +p=37,79 v=-81,-9 +p=25,78 v=26,94 +p=40,48 v=40,17 +p=62,73 v=-45,23 +p=47,72 v=42,84 +p=83,12 v=37,-90 +p=65,2 v=-65,65 +p=29,52 v=67,-77 +p=98,39 v=24,4 +p=76,66 v=83,40 +p=6,26 v=18,-16 +p=68,89 v=-52,-3 +p=64,19 v=30,-63 +p=36,39 v=-68,-10 +p=46,30 v=-53,-22 +p=77,44 v=-45,-4 +p=82,60 v=78,8 +p=87,77 v=-37,84 +p=93,58 v=-57,-89 +p=55,44 v=55,8 +p=1,60 v=-16,-81 +p=98,62 v=-30,-93 +p=64,74 v=-25,56 +p=64,22 v=3,29 +p=94,32 v=-57,-34 +p=35,88 v=-94,-19 +p=53,87 v=89,-78 +p=18,33 v=-33,-96 +p=62,30 v=-39,1 +p=3,79 v=-47,-24 +p=32,102 v=41,98 +p=63,85 v=-76,86 +p=55,28 v=-64,-26 +p=29,93 v=72,-87 +p=96,41 v=-50,-20 +p=38,21 v=-7,95 +p=67,20 v=-97,-54 +p=12,26 v=-26,32 +p=21,35 v=-68,77 +p=38,49 v=80,64 +p=94,55 v=57,-72 +p=60,65 v=90,60 +p=73,85 v=-75,-73 +p=83,42 v=83,42 +p=6,19 v=-89,-25 +p=72,68 v=63,-17 +p=15,31 v=86,83 +p=39,31 v=74,81 +p=42,12 v=-98,-25 +p=64,28 v=81,-31 +p=38,98 v=-35,-99 +p=1,67 v=85,-59 +p=44,7 v=-65,-58 +p=75,41 v=-64,70 +p=67,90 v=-37,-15 +p=56,20 v=-93,-44 +p=70,101 v=-58,-15 +p=69,8 v=90,-34 +p=56,86 v=42,74 +p=74,1 v=-85,-66 +p=55,16 v=48,53 +p=98,85 v=10,-86 +p=83,15 v=-84,-64 +p=34,33 v=98,-37 +p=30,59 v=88,52 +p=55,49 v=55,34 +p=97,39 v=-30,-36 +p=31,102 v=13,-80 +p=42,98 v=-33,-3 +p=27,71 v=-70,-10 +p=30,79 v=-82,44 +p=34,88 v=-8,-29 +p=0,55 v=51,-79 +p=26,12 v=19,-72 +p=3,71 v=-36,80 +p=50,59 v=22,-93 +p=74,44 v=-79,95 +p=16,5 v=-8,29 +p=99,11 v=30,47 +p=73,43 v=89,-28 +p=26,4 v=53,27 +p=11,21 v=-22,-28 +p=14,3 v=60,15 +p=26,1 v=-37,48 +p=6,62 v=-86,75 +p=24,87 v=90,17 +p=47,90 v=81,-11 +p=90,65 v=98,-71 +p=91,59 v=-4,-35 +p=9,29 v=97,82 +p=89,15 v=30,51 +p=50,100 v=20,-78 +p=62,36 v=-96,78 +p=9,102 v=99,29 +p=80,97 v=27,55 +p=36,13 v=74,-64 +p=88,20 v=36,35 +p=25,3 v=87,-90 +p=11,31 v=-83,-36 +p=67,51 v=-34,32 +p=38,66 v=-34,-67 +p=30,11 v=-39,50 +p=3,86 v=95,-29 +p=76,4 v=63,-64 +p=28,99 v=-89,56 +p=30,97 v=-48,3 +p=98,33 v=84,-48 +p=82,26 v=-64,69 +p=98,73 v=-3,-33 +p=16,81 v=-67,2 +p=21,96 v=92,-37 +p=44,36 v=-41,-87 +p=48,44 v=-32,77 +p=79,61 v=-90,19 +p=26,46 v=66,81 +p=11,69 v=25,-59 +p=13,75 v=12,-47 +p=79,83 v=63,-31 +p=40,82 v=-1,-3 +p=89,85 v=91,78 +p=27,28 v=-83,-17 +p=35,10 v=-82,73 +p=23,84 v=33,-11 +p=9,2 v=99,21 +p=39,86 v=5,-67 +p=45,39 v=87,-28 +p=80,44 v=-70,32 +p=14,59 v=-73,71 +p=51,99 v=-10,61 +p=99,51 v=-16,22 +p=2,17 v=-63,77 +p=45,31 v=-73,69 +p=77,7 v=63,-72 +p=31,74 v=-29,43 +p=100,77 v=-2,93 +p=23,38 v=53,65 +p=92,89 v=-94,-23 +p=71,12 v=-20,55 +p=92,1 v=-44,-48 +p=61,62 v=17,74 +p=44,2 v=-1,-51 +p=27,82 v=6,78 +p=89,19 v=-44,-42 +p=96,14 v=31,45 +p=32,31 v=53,67 +p=26,89 v=79,-21 +p=96,24 v=-51,59 +p=2,30 v=-66,72 +p=70,91 v=55,15 +p=87,1 v=37,29 +p=76,80 v=-11,46 +p=73,1 v=-72,-72 +p=100,43 v=65,10 +p=62,32 v=-12,79 +p=33,29 v=74,-22 +p=76,24 v=-6,-31 +p=3,71 v=-96,-50 +p=18,100 v=46,86 +p=36,101 v=73,-15 +p=81,76 v=-50,68 +p=35,25 v=81,-44 +p=74,79 v=16,74 +p=7,53 v=65,-81 +p=89,96 v=30,-9 +p=20,2 v=-82,-7 +p=47,97 v=-13,5 +p=50,16 v=96,-94 +p=19,45 v=-89,-4 +p=45,2 v=89,-64 +p=60,35 v=90,73 +p=47,45 v=42,95 +p=55,24 v=-32,31 +p=15,74 v=-96,34 +p=69,86 v=36,83 +p=69,94 v=76,98 +p=33,92 v=-4,-63 +p=52,5 v=28,-56 +p=14,58 v=91,-30 +p=9,30 v=26,-20 +p=9,14 v=19,-8 +p=17,69 v=12,46 +p=89,33 v=-68,-34 +p=7,88 v=59,-66 +p=79,93 v=-5,72 +p=43,95 v=27,-9 +p=43,62 v=41,10 +p=60,0 v=-52,-84 +p=7,25 v=71,-38 +p=76,13 v=-51,-24 +p=11,5 v=-89,-76 +p=69,58 v=-92,-55 +p=36,87 v=34,80 +p=57,76 v=-32,-29 +p=78,25 v=-34,27 +p=58,60 v=-39,-65 +p=13,9 v=33,-36 +p=38,5 v=-23,45 +p=99,49 v=93,-57 +p=18,11 v=-89,57 +p=74,36 v=-37,-73 +p=70,1 v=57,-60 +p=80,65 v=-11,46 +p=41,16 v=28,-18 +p=35,23 v=-80,-18 +p=82,11 v=76,67 +p=74,47 v=25,-81 +p=12,98 v=66,5 +p=69,23 v=-92,-52 +p=2,85 v=58,92 +p=17,68 v=-48,-63 +p=22,60 v=-12,89 +p=75,34 v=-11,73 +p=16,27 v=87,-99 +p=95,34 v=-3,-20 +p=16,20 v=38,-10 +p=10,22 v=-22,-58 +p=53,7 v=75,43 +p=74,27 v=63,63 +p=2,84 v=-27,-71 +p=99,33 v=61,90 +p=89,7 v=17,53 +p=65,2 v=49,41 +p=83,48 v=-78,-99 +p=34,27 v=52,-72 +p=46,24 v=-33,63 +p=48,64 v=-60,28 +p=46,16 v=21,-60 +p=88,23 v=38,-40 +p=77,72 v=63,46 +p=33,57 v=-21,28 +p=36,82 v=11,64 +p=83,38 v=17,91 +p=49,67 v=94,52 +p=95,38 v=23,-36 +p=87,29 v=50,75 +p=88,70 v=-64,50 +p=56,18 v=22,-14 +p=85,7 v=24,3 +p=69,39 v=56,6 +p=82,97 v=77,41 +p=28,3 v=-88,29 +p=59,15 v=-86,-48 +p=43,78 v=64,84 +p=78,86 v=-55,-3 +p=62,38 v=-79,-2 +p=81,68 v=94,46 +p=48,80 v=-85,-67 +p=13,77 v=-90,32 +p=51,43 v=49,30 +p=94,55 v=-57,30 +p=41,15 v=-13,-38 +p=40,97 v=-53,80 +p=39,6 v=34,-38 +p=97,96 v=77,27 +p=73,87 v=76,-21 +p=27,22 v=76,-17 +p=80,94 v=94,-7 +p=78,18 v=-31,-64 +p=34,47 v=81,-95 +p=87,96 v=51,94 +p=35,21 v=-14,-48 +p=95,16 v=-85,-53 +p=77,14 v=-90,59 +p=49,48 v=41,14 +p=75,52 v=-92,32 +p=16,91 v=96,-11 +p=50,24 v=-46,92 +p=88,38 v=37,-93 +p=97,13 v=85,43 +p=81,44 v=50,99 +p=97,45 v=-97,-75 +p=35,91 v=94,15 +p=3,74 v=18,-47 +p=64,32 v=62,91 +p=74,16 v=31,-64 +p=65,37 v=44,89 +p=90,25 v=-98,-64 +p=13,98 v=-36,-5 +p=83,102 v=84,-90 +p=42,15 v=-67,45 +p=8,10 v=86,73 +p=72,84 v=-11,-9 +p=58,99 v=36,-84 +p=59,19 v=-5,51 +p=22,38 v=-76,-78 +p=24,8 v=-68,45 +p=60,70 v=-32,44 +p=41,5 v=-19,-40 +p=28,4 v=-48,35 +p=53,47 v=-38,72 +p=82,80 v=23,84 +p=21,95 v=19,-17 +p=85,5 v=-71,-86 +p=90,2 v=-44,-46 +p=92,63 v=-84,-53 +p=82,67 v=83,-83 +p=9,76 v=-29,-65 +p=87,55 v=-90,-75 +p=2,59 v=-19,33 +p=17,78 v=38,-17 +p=99,8 v=51,37 +p=58,35 v=42,79 +p=9,97 v=-77,37 +p=63,19 v=-32,-36 +p=76,31 v=50,81 +p=14,68 v=-89,42 +p=49,45 v=97,7 +p=81,52 v=-38,-93 +p=75,97 v=3,80 +p=48,101 v=67,-78 +p=89,95 v=91,-7 +p=6,96 v=52,-1 +p=67,37 v=75,79 +p=73,47 v=37,2 +p=7,98 v=32,3 +p=7,87 v=-43,-23 +p=27,61 v=62,-79 +p=30,85 v=6,1 +p=42,29 v=34,-46 +p=47,30 v=95,73 +p=25,88 v=6,78 +p=72,92 v=36,84 +p=90,92 v=64,31 +p=79,70 v=-72,90 +p=39,77 v=81,-38 +p=50,2 v=-88,-35 +p=90,91 v=38,-35 +p=75,17 v=89,61 +p=98,60 v=-16,-49 +p=56,1 v=56,84 +p=1,82 v=55,-45 +p=22,59 v=86,-81 +p=100,84 v=-23,-88 +p=90,51 v=-17,-91 +p=82,53 v=3,-77 +p=77,96 v=36,-9 +p=76,52 v=-38,-69 +p=8,18 v=-72,-72 +p=48,74 v=-20,8 +p=22,81 v=90,-2 +p=55,102 v=-73,52 +p=83,79 v=-48,14 +p=83,13 v=97,-60 +p=35,96 v=-94,-9 +p=49,56 v=-45,89 +p=55,16 v=-10,71 +p=58,51 v=89,16 +p=1,15 v=-37,83 +p=27,66 v=-41,-67 +p=68,92 v=56,7 +p=48,41 v=35,47 +p=69,38 v=56,53 +p=57,87 v=-58,-42 +p=69,50 v=69,50 +p=11,101 v=72,7 +p=61,5 v=-20,-8 +p=41,22 v=-53,-54 +p=2,40 v=45,-8 +p=15,44 v=-21,67 +p=25,44 v=80,-79 +p=23,91 v=-25,-79 +p=82,55 v=-90,-85 +p=37,13 v=-26,-26 +p=10,2 v=-90,96 +p=10,45 v=-95,90 +p=61,12 v=55,-60 +p=97,37 v=98,89 +p=7,95 v=-2,-90 +p=23,93 v=39,5 +p=70,74 v=12,44 +p=28,54 v=-41,-98 +p=34,91 v=25,-84 +p=16,48 v=-21,-57 +p=87,83 v=17,-21 +p=82,64 v=23,36 +p=60,75 v=42,-29 +p=30,16 v=23,64 +p=4,80 v=92,92 +p=74,26 v=62,65 +p=24,11 v=25,-58 +p=26,97 v=57,20 +p=2,99 v=-62,21 +p=44,62 v=61,48 +p=8,43 v=79,-89 +p=32,93 v=-54,37 +p=31,33 v=6,-12 +p=80,35 v=-51,-16 +p=72,14 v=-18,22 +p=3,68 v=-15,86 +p=87,15 v=11,37 +p=4,57 v=-9,-61 +p=23,37 v=-82,-22 +p=9,77 v=-76,-37 +p=32,7 v=-21,60 +p=43,69 v=-50,95 +p=90,55 v=4,-43 +p=58,34 v=59,-27 +p=44,2 v=45,-24 +p=32,91 v=67,29 +p=52,35 v=-26,-60 +p=80,102 v=90,-20 +p=5,59 v=-43,-75 +p=51,57 v=45,70 +p=90,65 v=51,16 +p=54,40 v=-74,79 +p=47,12 v=-33,-54 +p=71,80 v=-85,-37 +p=24,12 v=-28,-50 +p=50,8 v=-79,61 +p=27,86 v=65,-30 +p=25,46 v=16,48 +p=5,3 v=-76,-90 diff --git a/src/bin/14.rs b/src/bin/14.rs new file mode 100644 index 0000000..aa5e485 --- /dev/null +++ b/src/bin/14.rs @@ -0,0 +1,81 @@ +use std::io::Read; + +use image::{GenericImage, GrayImage, Luma, Pixel}; +use itertools::Itertools; +use regex::Regex; + +fn main() { + let filename = "input/14-1.in"; + let size = (101, 103); + // let filename = "input/14-0.in"; + // let size = (11, 7); + + let text = std::fs::read_to_string(filename).unwrap(); + + let parse_regex = Regex::new(r"^p=(\d+),(\d+) v=(-?\d+),(-?\d+)$").unwrap(); + + let iterations = 100; + + let h = text + .lines() + .map(|l| { + let r = parse_regex.captures(l).unwrap(); + + ( + r[1].parse::().unwrap(), + r[2].parse::().unwrap(), + r[3].parse::().unwrap(), + r[4].parse::().unwrap(), + ) + }) + .map(|(x, y, dx, dy)| { + ( + (x + iterations * dx).rem_euclid(size.0), + (y + iterations * dy).rem_euclid(size.1), + ) + }) + // .map(|d| dbg!(d)) + .filter(|&(x, y)| (x != size.0 / 2) && (y != size.1 / 2)) + .map(|(x, y)| match (x < size.0 / 2, y < size.1 / 2) { + (true, true) => 1, + (true, false) => 2, + (false, true) => 3, + (false, false) => 4, + }) + .counts() + .values() + .product::(); + + println!("{h}"); + + for i in 0..=(size.0 * size.1) { + println!("Iteration: {i}"); + let h = text + .lines() + .map(|l| { + let r = parse_regex.captures(l).unwrap(); + + ( + r[1].parse::().unwrap(), + r[2].parse::().unwrap(), + r[3].parse::().unwrap(), + r[4].parse::().unwrap(), + ) + }) + .map(|(x, y, dx, dy)| { + ( + (x + i * dx).rem_euclid(size.0), + (y + i * dy).rem_euclid(size.1), + ) + }) + .counts(); + + let mut img = GrayImage::new(size.0 as u32, size.1 as u32); + + for &(x, y) in h.keys() { + img.put_pixel(x as u32, y as u32, Luma::from([255])); + } + + let _ = img.save(format!("images14/{i:05}.png")); + } +}