diff --git a/day-9/.gitignore b/day-9/.gitignore deleted file mode 100644 index b83d222..0000000 --- a/day-9/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/target/ diff --git a/day-9/Cargo.lock b/day-9/Cargo.lock deleted file mode 100644 index 64eb774..0000000 --- a/day-9/Cargo.lock +++ /dev/null @@ -1,94 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -[[package]] -name = "day-9" -version = "0.1.0" -dependencies = [ - "indoc", - "itertools", -] - -[[package]] -name = "either" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" - -[[package]] -name = "indoc" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47741a8bc60fb26eb8d6e0238bbb26d8575ff623fdc97b1a2c00c050b9684ed8" -dependencies = [ - "indoc-impl", - "proc-macro-hack", -] - -[[package]] -name = "indoc-impl" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce046d161f000fffde5f432a0d034d0341dc152643b2598ed5bfce44c4f3a8f0" -dependencies = [ - "proc-macro-hack", - "proc-macro2", - "quote", - "syn", - "unindent", -] - -[[package]] -name = "itertools" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b" -dependencies = [ - "either", -] - -[[package]] -name = "proc-macro-hack" -version = "0.5.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" - -[[package]] -name = "proc-macro2" -version = "1.0.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71" -dependencies = [ - "unicode-xid", -] - -[[package]] -name = "quote" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "syn" -version = "1.0.54" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2af957a63d6bd42255c359c93d9bfdb97076bd3b820897ce55ffbfbf107f44" -dependencies = [ - "proc-macro2", - "quote", - "unicode-xid", -] - -[[package]] -name = "unicode-xid" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" - -[[package]] -name = "unindent" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f14ee04d9415b52b3aeab06258a3f07093182b88ba0f9b8d203f211a7a7d41c7" diff --git a/day-9/Cargo.toml b/day-9/Cargo.toml deleted file mode 100644 index 433f2ea..0000000 --- a/day-9/Cargo.toml +++ /dev/null @@ -1,11 +0,0 @@ -[package] -name = "day-9" -version = "0.1.0" -authors = ["Tristan Daniƫl Maat <tm@tlater.net>"] -edition = "2018" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -indoc = "0.3" -itertools = "0.9" diff --git a/day-9/input b/day-9/input deleted file mode 100644 index 4d7d8d9..0000000 --- a/day-9/input +++ /dev/null @@ -1,1000 +0,0 @@ -10 -17 -27 -3 -14 -30 -50 -23 -9 -43 -18 -47 -11 -19 -37 -41 -2 -21 -40 -36 -15 -8 -7 -13 -49 -5 -22 -48 -28 -10 -12 -14 -27 -16 -9 -24 -17 -18 -20 -11 -19 -23 -25 -21 -26 -29 -30 -31 -15 -32 -33 -34 -22 -36 -37 -28 -64 -35 -41 -27 -38 -63 -40 -56 -45 -47 -52 -42 -43 -57 -44 -46 -48 -49 -54 -50 -70 -58 -62 -55 -66 -82 -85 -120 -94 -78 -98 -83 -89 -164 -87 -97 -86 -110 -168 -96 -116 -99 -186 -264 -160 -141 -144 -253 -121 -149 -167 -181 -161 -170 -165 -169 -172 -197 -251 -185 -182 -333 -363 -257 -195 -215 -220 -354 -326 -332 -308 -303 -270 -548 -437 -328 -521 -330 -334 -337 -578 -357 -367 -377 -415 -397 -662 -435 -498 -410 -691 -787 -573 -693 -602 -600 -740 -598 -658 -664 -665 -667 -937 -671 -988 -724 -734 -744 -1137 -807 -845 -1333 -908 -1237 -1012 -1173 -1200 -1171 -1472 -1198 -1322 -2484 -1256 -1325 -1329 -1332 -1391 -2585 -1468 -1857 -1458 -1478 -2410 -1652 -2523 -1753 -2183 -1920 -2344 -2185 -2369 -2670 -2496 -2454 -3378 -2588 -2581 -2647 -2661 -2807 -2723 -2946 -2926 -4129 -3802 -2936 -3231 -3405 -3673 -5143 -3938 -5270 -5228 -5596 -5295 -8827 -5157 -4950 -5042 -5235 -5169 -5242 -7917 -5384 -10185 -5649 -5862 -6157 -8548 -8273 -6167 -6636 -7078 -7611 -9095 -10192 -9992 -10107 -10211 -10452 -10119 -10199 -10891 -10553 -10404 -14689 -11104 -11033 -11246 -11511 -14705 -14430 -15884 -13714 -12803 -16359 -14247 -16706 -17603 -20203 -20099 -20111 -20226 -23925 -36458 -20318 -20603 -35995 -20957 -21508 -34931 -60383 -23836 -44024 -25941 -40521 -26517 -30953 -27050 -33121 -41607 -40542 -34309 -37702 -40210 -80609 -40429 -60294 -77145 -40921 -47120 -42465 -67971 -63643 -45344 -71382 -71874 -49777 -60826 -52458 -53567 -57470 -64752 -60171 -67430 -94488 -72011 -74519 -77912 -80639 -82894 -81350 -154905 -83386 -120997 -95121 -87809 -128395 -102814 -110603 -109928 -106025 -173455 -114393 -111037 -113738 -159240 -127601 -132182 -223811 -146530 -149923 -176471 -158551 -208951 -164244 -178507 -248598 -308474 -220418 -182930 -190623 -208839 -212742 -215953 -217062 -277524 -224775 -241994 -291422 -274131 -368191 -259783 -432682 -337058 -341481 -354867 -322795 -387458 -389019 -342751 -596297 -415398 -391769 -373553 -395672 -582578 -421581 -441837 -433015 -547570 -567526 -466769 -762572 -533914 -596841 -774496 -602534 -659853 -884628 -976087 -764632 -665546 -716304 -1029312 -1011695 -765322 -769225 -813350 -1417924 -817253 -854596 -1213116 -2189203 -2067712 -1136448 -1034295 -1418542 -1130755 -1199460 -1199375 -1371759 -1262387 -1964782 -1381850 -2296682 -1430178 -1694858 -1481626 -1534547 -1578672 -1582575 -1968600 -1851548 -3346632 -1671849 -1888891 -2170743 -2330130 -2393142 -2233670 -2406054 -2954334 -2753609 -2734007 -2461762 -3043608 -2744013 -4265282 -4336184 -3991540 -3176484 -3016173 -3060298 -3113219 -3161247 -4626183 -3523397 -7325580 -3560740 -3842592 -4924352 -5064137 -4563800 -4867816 -4639724 -5769782 -5195769 -5505370 -5804311 -9203524 -6221545 -5760186 -6173517 -6076471 -6576913 -7677019 -6129392 -11889380 -6274466 -10100310 -7084137 -7403332 -10701139 -12872788 -9627937 -11417314 -9431616 -9507540 -9835493 -11574093 -12205863 -12082283 -11977828 -12798458 -11836657 -11889578 -23395142 -12249988 -14761156 -17777329 -12403858 -13213529 -13358603 -21035622 -14487469 -16515753 -21268273 -18939156 -26011987 -21485368 -19267109 -21005709 -27165014 -23410750 -23463671 -23726235 -31021439 -23814485 -27700998 -24086645 -34028265 -26737457 -24653846 -25617387 -35454909 -29874356 -26572132 -27846072 -31003222 -45508908 -35782862 -38206265 -50098632 -45572013 -48064596 -40272818 -44416459 -50298367 -46874421 -47189906 -47540720 -47901130 -81929395 -54583529 -48740491 -67010275 -57720428 -50271233 -52189519 -76843365 -54418204 -76670764 -58849294 -82972768 -82657283 -89013309 -78479083 -88337414 -84689277 -87147239 -87462724 -91290880 -95930397 -128860283 -95091036 -125859569 -96641621 -155490915 -181049802 -99011724 -102460752 -104689437 -129032884 -169804522 -113267498 -131088968 -135520058 -137328377 -170120007 -167492392 -175484653 -163168360 -200414737 -171836516 -190302604 -178753604 -186381916 -194942121 -191732657 -203701161 -195653345 -292819292 -234531782 -280174090 -274493959 -266361261 -217956935 -242300382 -437662319 -394003765 -266609026 -272848435 -300496737 -363145737 -358218432 -468303945 -335004876 -532970287 -350590120 -374406949 -370486261 -378114573 -390595466 -387386002 -399354506 -413610280 -650963008 -661879961 -515148817 -490805370 -694500502 -1132162821 -508909408 -539457461 -624827458 -567105763 -660234437 -635501613 -705491137 -867975163 -1260329071 -874462337 -721076381 -804205746 -744893210 -748600834 -765500575 -1057911133 -896295410 -812964786 -904415650 -999714778 -1005954187 -1862116879 -1030262831 -1076015171 -1048366869 -1106563224 -1164284919 -1373428292 -1356577994 -1295736050 -1340992750 -1661795985 -1465969591 -1904725168 -1469677215 -1486576956 -1493494044 -2938132050 -1754555021 -1669916225 -1709260196 -3241131977 -1812679564 -1504371145 -3026494219 -2036217018 -2078629700 -2877799437 -2270848143 -3195837152 -2402299274 -2460020969 -4661806743 -5008516716 -2636728800 -3153672314 -2935646806 -3548306915 -2956254171 -2963171259 -3833184721 -2997865189 -3174287370 -3213631341 -3540588163 -3317050709 -5319761677 -5034883871 -3583000845 -4971863824 -4956429137 -4480928974 -4673147417 -6367303655 -5358553445 -4862320243 -7659671932 -5572375606 -10043400587 -5592982971 -5954119360 -5891900977 -7818574414 -6538453352 -8036607613 -6172152559 -6211496530 -6387918711 -7797979683 -14165283338 -9818749380 -11040451072 -8554864669 -8063929819 -13252654903 -9154076391 -9343249217 -9535467660 -13752099043 -11846020337 -10434695849 -16633434043 -13370355289 -19197476978 -15710650357 -12383649089 -23700750998 -14942783380 -22805586602 -14208760172 -12560071270 -12599415241 -14185898394 -15861909502 -27937997437 -27326432469 -16618794488 -17218006210 -17407179036 -18497325608 -33269088538 -18878716877 -21919116749 -22280716186 -41535192641 -22818344938 -24943720359 -30588361499 -36415483188 -24983064330 -25159486511 -26745969664 -37543135600 -26768831442 -46816714314 -39925847710 -46205149346 -43861781207 -73585545756 -62206563896 -33836800698 -40778041794 -34625185246 -58334599937 -37376042485 -40797833626 -47977831449 -69023494284 -57334331163 -51751895772 -49926784689 -50103206870 -50142550841 -51729033994 -51905456175 -51928317953 -96831749142 -70630612649 -61394016688 -68461985944 -71212843183 -72001227731 -86354219240 -83940007568 -89281498660 -82603016695 -101855102642 -84767736087 -129547443120 -92526867620 -123118299358 -97904616138 -100245757711 -101655818683 -252665742478 -100029991559 -101832240864 -120773163490 -134508472870 -103833774128 -113322334641 -132024629337 -150675515348 -129856002632 -152401993512 -143214070914 -154604244426 -166543024263 -167370752782 -221018921201 -202077998575 -227035340490 -177294603707 -190431483758 -232054620896 -197934607697 -247830807511 -200275749270 -222605404354 -201862232423 -203863765687 -205666014992 -217156108769 -320287486390 -233689776760 -298567653600 -331898848133 -321147268689 -273070073546 -295616064426 -333645554672 -356974508021 -357802236540 -344665356489 -437720635888 -460725117250 -367726087465 -550331371481 -388366091455 -398210356967 -818527353790 -402137981693 -476933839233 -405725998110 -407528247415 -676564204622 -594183718026 -450845885529 -506759850306 -686933745055 -568686137972 -750391354599 -594217342235 -671280430513 -629261619098 -678310911161 -1089071726748 -763528234650 -712391443954 -1365244656216 -2052178401271 -756092178920 -805738604382 -786576448422 -1019532023501 -1399922322408 -807863979803 -1071117557259 -813254245525 -858374132944 -957605735835 -1188401060261 -1045063227764 -1441839145811 -1197947757070 -1162903480207 -1223478961333 -1265497772748 -2029026007398 -2588723617549 -1390702355115 -1468483622874 -1850801832146 -3048749589216 -1744182184257 -1877906156445 -1599830693947 -1592315052804 -2116180785023 -1621118225328 -2213176567933 -1666238112747 -1671628378469 -2281737868399 -1815979868779 -3294523780146 -2207966707971 -2243010984834 -2386382441540 -3056940467862 -2428401252955 -2488976734081 -2656200127863 -2859185977989 -3220948919275 -2983017407919 -3068314316821 -3192145746751 -4696943442052 -3800281760775 -3213433278132 -3258553165551 -3263943431273 -3437098094107 -3292746603797 -3337866491216 -3482217981526 -3953366246868 -4097717737178 -4864166835834 -5102196962823 -4450977692805 -4671412237789 -4814783694495 -5713140595725 -6879378945760 -5145176861944 -5842203385908 -6051331724740 -6175163154670 -6601809922489 -6260460063572 -6405579024883 -6471986443683 -6477376709405 -6506179881929 -6820084472742 -6556690035070 -6630613095013 -6774964585323 -7435584228394 -8769129974967 -10577307431559 -8548695429983 -9122389930594 -12472816480921 -9265761387300 -9486195932284 -9959960556439 -12118719620608 -10987380247852 -12732446507255 -11893535110648 -12226494879410 -15029590038539 -12737836772977 -13062869916999 -12877565468566 -13136792976942 -12983556591334 -24050250164851 -15105385465053 -13187303130083 -13405577680336 -14210548813717 -18034891362267 -24787856245276 -19699697362153 -17671085360577 -27273418730716 -19446156488723 -18751957319584 -20473576180136 -20947340804291 -27194105405051 -22880915358500 -24120029990058 -27907155507105 -26592880810419 -31222194492350 -27843222238030 -25861122059900 -26389134271670 -27397851943800 -26170859721417 -31440469042603 -28510963145389 -45942046869372 -27616126494053 -53568711665217 -37117241849300 -40552000719077 -38144661540713 -44060219632247 -66051817047818 -38198113808307 -39225533499720 -41420916984427 -43828256162791 -58416299897401 -47000945348558 -52250256331570 -52031981781317 -52454002870319 -52559993993087 -53258974003700 -77893103841217 -53786986215470 -65760788034766 -66841659993773 -56127089639442 diff --git a/day-9/src/main.rs b/day-9/src/main.rs deleted file mode 100644 index 3f8c51f..0000000 --- a/day-9/src/main.rs +++ /dev/null @@ -1,134 +0,0 @@ -use std::fs; -use std::num::ParseIntError; - -use itertools::{Itertools, MinMaxResult}; - -fn main() -> Result<(), Box<dyn std::error::Error>> { - let input = fs::read_to_string("input")?; - let xmas = parse_xmas(&input)?; - - // Part 1 - let result = find_not_summed(&xmas, 25)?; - println!("{}", result); - - // Part 2 - let result = find_weakness(&xmas, result)?; - println!("{}", result); - - Ok(()) -} - -fn parse_xmas(input: &str) -> Result<Vec<u64>, ParseIntError> { - input.lines().map(|line| line.parse()).collect() -} - -fn find_weakness(xmas: &Vec<u64>, key: u64) -> Result<u64, &str> { - // Now we use the key to find the weakness, by getting all - // possible sub-sumbs of the list of numbers, and finding the one - // that happens to match our key - let weak_window = (2..xmas.len()) - .find_map(|window_size| { - xmas.windows(window_size) - .find(|window| window.iter().sum::<u64>() == key) - }) - .ok_or("Could not find a weakness")?; - - if let MinMaxResult::MinMax(min, max) = weak_window.iter().minmax() { - Ok(min + max) - } else { - unreachable!("We must have at least two elements due to the window size") - } -} - -fn find_not_summed(xmas: &Vec<u64>, window_size: usize) -> Result<u64, &str> { - xmas.windows(window_size + 1) - .find_map(|window| { - if let [preamble @ .., number] = window { - // If none of the number combinations in the preamble - // sum to the final number, we've got the key! - if !preamble - .iter() - .combinations(2) - .any(|combination| combination.into_iter().sum::<u64>() == *number) - { - Some(*number) - } else { - None - } - } else { - unreachable!("The windows must all have a length of at least 1"); - } - }) - .ok_or("Could not find the entry") -} - -#[cfg(test)] -mod tests { - use super::*; - use indoc::indoc; - - #[test] - fn test_simple() -> Result<(), Box<dyn std::error::Error>> { - let input = indoc!( - "35 - 20 - 15 - 25 - 47 - 40 - 62 - 55 - 65 - 95 - 102 - 117 - 150 - 182 - 127 - 219 - 299 - 277 - 309 - 576" - ); - - let xmas = parse_xmas(input)?; - let result = find_not_summed(&xmas, 5)?; - - assert_eq!(result, 127); - Ok(()) - } - - #[test] - fn test_simple2() -> Result<(), Box<dyn std::error::Error>> { - let input = indoc!( - "35 - 20 - 15 - 25 - 47 - 40 - 62 - 55 - 65 - 95 - 102 - 117 - 150 - 182 - 127 - 219 - 299 - 277 - 309 - 576" - ); - - let xmas = parse_xmas(input)?; - let key = find_not_summed(&xmas, 5)?; - let result = find_weakness(&xmas, key)?; - - assert_eq!(result, 62); - Ok(()) - } -} diff --git a/shell.nix b/shell.nix index 9ce587d..232285d 100644 --- a/shell.nix +++ b/shell.nix @@ -8,9 +8,10 @@ with pkgs; mkShell { buildInputs = [ - rust-analyzer # the one from Mozilla is slightly broken https://github.com/mozilla/nixpkgs-mozilla/issues/238 - (pkgs.latest.rustChannels.stable.rust.override { - # extensions = ["rust-src"]; # unneeded because we're using rust-analyzer from nixpkgs - }) + rustChannel.rust ]; + + shellHook = '' + export RUST_SRC_PATH="${rustChannel.rust-src}/lib/rustlib/src/rust/library" + ''; }