diff --git a/day09/Cargo.lock b/day09/Cargo.lock new file mode 100644 index 0000000000000000000000000000000000000000..87de8b77df264ab9eb3a1a3d938843fb76aee120 --- /dev/null +++ b/day09/Cargo.lock @@ -0,0 +1,5 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +[[package]] +name = "day09" +version = "0.1.0" diff --git a/day09/Cargo.toml b/day09/Cargo.toml new file mode 100644 index 0000000000000000000000000000000000000000..c638181c315157e12ef2ed9f50bb9e94cd053708 --- /dev/null +++ b/day09/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "day09" +version = "0.1.0" +authors = ["Philip Molares <philip.molares@udo.edu>"] +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/day09/input.txt b/day09/input.txt new file mode 100644 index 0000000000000000000000000000000000000000..82ace7381e374738aa8b1dab8e63b0390597dc7c --- /dev/null +++ b/day09/input.txt @@ -0,0 +1,1000 @@ +3 +17 +32 +2 +19 +45 +22 +18 +38 +8 +16 +13 +41 +35 +23 +29 +11 +46 +12 +27 +49 +34 +20 +14 +47 +50 +10 +15 +17 +21 +57 +25 +19 +18 +22 +76 +24 +32 +26 +28 +23 +30 +29 +31 +33 +27 +35 +42 +34 +36 +91 +40 +37 +38 +43 +47 +44 +41 +45 +72 +49 +61 +80 +55 +66 +71 +56 +117 +141 +69 +135 +70 +73 +83 +74 +75 +114 +78 +79 +113 +213 +189 +86 +104 +173 +105 +116 +131 +152 +194 +149 +125 +139 +142 +143 +144 +247 +188 +157 +191 +153 +238 +164 +165 +190 +202 +209 +211 +393 +269 +221 +291 +299 +281 +264 +267 +268 +327 +351 +301 +379 +310 +318 +317 +430 +329 +429 +641 +477 +411 +420 +578 +432 +522 +485 +488 +582 +531 +532 +929 +652 +569 +611 +740 +795 +627 +937 +746 +1081 +759 +749 +1063 +888 +1109 +963 +852 +917 +920 +1508 +1677 +1019 +1100 +1142 +1143 +1180 +1196 +1360 +1942 +1376 +1373 +1601 +1495 +1901 +2248 +1611 +1637 +2128 +1740 +1769 +1772 +1936 +2280 +2339 +2515 +4281 +2162 +2296 +2553 +2516 +4451 +2556 +2733 +2749 +2868 +3096 +4334 +3541 +3248 +3988 +6613 +3897 +3509 +3934 +3705 +4098 +4216 +7236 +4458 +4677 +4678 +4715 +4812 +6116 +5249 +5289 +5305 +5482 +12525 +5964 +8612 +6757 +6789 +10510 +7443 +12038 +9490 +8798 +7639 +7803 +9387 +8674 +10117 +9135 +16874 +9393 +9527 +10061 +12078 +10538 +10594 +10787 +11446 +17032 +13407 +13546 +14396 +16850 +15082 +15246 +15442 +22542 +16313 +26559 +16477 +17809 +19673 +26036 +28320 +30257 +18920 +19588 +21325 +21984 +21132 +28489 +22233 +24853 +38461 +26953 +28628 +29478 +30688 +33251 +31559 +44526 +49845 +34286 +35397 +53206 +37397 +38508 +41821 +41572 +40052 +40913 +40720 +42457 +67136 +43365 +49186 +93712 +55581 +61239 +56431 +58106 +63939 +62247 +65845 +66956 +92551 +69683 +71683 +111735 +90603 +75905 +78560 +80772 +80965 +81633 +113125 +160921 +85822 +101471 +174364 +115031 +113687 +112012 +119345 +128114 +143019 +186714 +128092 +132801 +145516 +166594 +195996 +152455 +268347 +167455 +226288 +194652 +161737 +241217 +329733 +187293 +197834 +199509 +213483 +225699 +227043 +556776 +466916 +453331 +256206 +457825 +280547 +278317 +285256 +357733 +386802 +654209 +743081 +329192 +361246 +349030 +478381 +385127 +397343 +424877 +412992 +411317 +693539 +504016 +665674 +483249 +677890 +614448 +534523 +536753 +563573 +558864 +682599 +1042113 +1102767 +678222 +1041954 +690438 +710276 +1071276 +734157 +1103430 +782470 +808660 +1324724 +1186615 +894566 +1151201 +987265 +1241463 +1778216 +1224961 +1093387 +1095617 +1241795 +1122437 +2050455 +1424595 +1936679 +2337412 +1936520 +1885900 +1400714 +2229060 +1516627 +1902047 +2749319 +1795925 +1703226 +2690491 +2796613 +1990183 +3196639 +2944689 +3629774 +3653655 +3085800 +2189004 +2917341 +2825309 +2523151 +2941222 +3402527 +3103940 +3390897 +5392710 +6189740 +5515800 +3219853 +6045162 +4899865 +6282439 +4620567 +3693409 +6320265 +5014313 +5627091 +8416840 +4712155 +10526956 +6779209 +6494837 +11182304 +5742650 +5348460 +6622380 +6161075 +9149102 +12406300 +18596040 +10757317 +6913262 +7840420 +7932008 +9854484 +8313976 +8405564 +9436059 +13662436 +24189392 +9726468 +11788166 +12940284 +10060615 +11091110 +20618363 +18260048 +11509535 +13280468 +16439570 +25875629 +13074337 +14753682 +14845270 +15227238 +18597737 +19162527 +32503368 +37385164 +16719540 +31200332 +46165804 +23723051 +26354805 +24953706 +31709473 +83550968 +21151725 +23341083 +28301575 +50459501 +24583872 +24790003 +30000008 +35905407 +60011048 +32236864 +29598952 +30072508 +42503610 +52624947 +70749676 +41303412 +55026214 +41673246 +44874776 +44492808 +77111640 +45735597 +48131086 +52940035 +82697455 +45941728 +47924955 +59671460 +49373875 +54182824 +104164268 +62236872 +71375920 +61835816 +62309372 +70902364 +83012543 +82976658 +85796220 +86166054 +103982618 +86548022 +89598201 +93660552 +160124183 +144533271 +124315955 +132071330 +93866683 +95315603 +97298830 +264288451 +132386418 +103556699 +147843376 +181481657 +124072688 +124145188 +132738180 +133211736 +153879022 +169560565 +168772878 +171962274 +172714076 +176146223 +180208574 +183258753 +271988564 +189182286 +191165513 +218011871 +192614433 +226604863 +228053783 +316687121 +277951710 +331610482 +227629387 +248217876 +256810868 +257284424 +256883368 +265949916 +429246698 +322651900 +338333443 +340735152 +344676350 +257342611 +356354797 +375873186 +372441039 +410626304 +380347799 +637690410 +419219296 +420243820 +454234250 +455683170 +475847263 +484440255 +484971998 +484512755 +505028744 +513694236 +514167792 +523292527 +579994511 +854902944 +713025781 +595676054 +598077763 +602018961 +752788838 +1208472008 +969484753 +856881294 +829845600 +799567095 +874478070 +875926990 +909917420 +1343539836 +931530433 +960287518 +969412253 +1218054525 +1397770597 +1018722980 +1027862028 +1094162303 +1474004753 +1540282029 +1686726894 +1512592876 +1193753817 +1200096724 +2118389428 +1552355933 +1629412695 +1656448389 +1674045165 +1675494085 +1709484515 +1750405060 +2312216828 +1879329673 +1891817951 +1900942686 +2509694282 +2046585008 +2112885283 +2122024331 +2692768145 +2287916120 +2294259027 +2393850541 +3227008923 +3246681732 +3186638041 +4240413759 +2752452657 +3181768628 +3208804322 +3338897210 +3330493554 +5078455992 +4506735824 +3459889575 +3792760637 +3771147624 +3938402959 +4903544823 +4013827969 +4622579565 +4159470291 +4234909614 +6520665838 +4987027172 +4582175147 +8085313451 +5146303198 +7733744747 +8446916747 +6547701532 +5961256979 +14967582585 +7123254191 +7231037199 +6669390764 +6790383129 +8006057238 +7252650212 +16091370689 +7563908261 +8596003116 +13029091894 +8173298260 +15569965499 +8394379905 +8741645438 +10948284151 +9569202319 +13433943919 +11107560177 +11694004730 +13338084661 +12508958511 +12630647743 +12751640108 +23964345404 +13459773893 +19113617415 +14796440367 +20435650168 +14043033341 +16159911377 +14816558473 +20194556004 +15737206521 +24991317492 +16567678165 +18310847757 +17136025343 +19342664056 +25924118650 +28790559120 +20676762496 +22801564907 +23616518688 +29887665451 +25260598619 +25139606254 +25382287851 +26211414001 +27502807234 +29612998840 +28859591814 +28839473708 +29780239862 +30202944718 +35910342221 +30553764994 +64769934035 +36478689399 +33703703508 +37812787839 +35446873100 +42518313194 +40019426552 +43478327403 +44293281184 +45816368750 +46418083595 +48756124942 +50400204873 +55162527713 +93629525849 +59983184580 +66672379653 +58472590654 +57699065522 +73132754892 +76222016702 +75596608612 +60756709712 +82459828450 +67032454393 +117426036076 +70182392907 +149132208103 +95430057680 +75466299652 +88775551494 +104288959404 +87771608587 +90109649934 +94572493692 +121884383247 +99156329815 +105562732586 +112861593235 +116171656176 +154443988240 +133938890306 +118455775234 +124731519915 +142629063005 +127789164105 +156186767392 +136223009364 +181616158265 +137214847300 +186927938402 +231653067044 +163237908239 +165575949586 +179755259056 +198861453096 +177881258521 +182344102279 +239501622892 +193728823507 +217612105049 +204719062401 +218424325821 +246244939339 +243187295149 +252394665540 +261728054411 +261946367215 +260954529279 +264012173469 +301798958950 +273437856664 +356966731746 +494181579046 +398179584877 +350165846641 +419256881948 +567777951690 +343457208107 +357636517577 +360225360800 +371610082028 +680211411227 +398447885908 +411340928556 +422331167450 +466665429616 +461611620970 +504915349560 +495581960689 +513349194819 +619364571988 +522900896494 +700246844858 +537450030133 +710391207441 +633663217464 +809788814464 +693623054748 +715067290135 +701093725684 +839039168796 +876525431588 +1030705500544 +793941249478 +1071856926886 +782951010584 +820779053358 +860059506878 +833672096006 +883942788420 +962247390305 +974960815789 +1000497310249 +1114946532677 +1535846343493 +1060350926627 +1156564113958 +1237696874991 +1231073084881 +1327286272212 +1527295150754 +1484044736268 +1534765821690 +1659818222154 +1495034975162 +1576892260062 +1603730063942 +1614720302836 +1616623106590 +1643010517462 +1654451149364 +2064745180887 +1693731602884 +1717614884426 +1858903604209 +1937208206094 +2726108060043 +2845793387717 +3221309294845 +2216915040585 +4462416494307 +4459006169836 +3174905081085 +2558359357093 +2811331008480 +3018810557958 +3228497424574 +3831635343421 +3071927235224 +3353938579371 +3191612562898 +3308451905720 +3231343409426 +3310354709474 +3654823090520 +3348182752248 +3411346487310 +3552635207093 +5090247013635 +3796111810303 +5438224335430 +7003005842768 +5906542109341 +4775274397678 +5028246049065 +6193715639043 +6963981694403 +6247307982532 +5369690365573 +5830141566438 +9058638991012 +6624562442317 +6263539798122 +6303270644650 +6765285066681 +6965177799994 +6541698118900 +6579526161674 +12077449548970 +8327909604771 +6759529239558 +9317888596651 +10118493062700 +8571386207981 +16283066396645 +10968990036721 +13762535082326 +9803520446743 +14834926006103 +10397936414638 +25803916042824 +11199831932011 +11949216527247 +13589740242311 +19296899641492 +14631180249421 +17741530050911 +13068555711331 +12844968763550 +19828084950889 +17363114214632 +13121224280574 +34663010956992 +15087438844329 +16878022302258 +15330915447539 +19540376244702 +18374906654724 +18969322622619 +20201456861381 +20772510483464 +23466492125969 +22872076158074 +53037917611716 +23519160695212 +23149048459258 +37942986912292 +24794185290797 +61462147607504 +44334561535499 +25966193044124 +25913524474881 +34300238070158 +35288895705710 +28208663124903 +28452139728113 +29999246582832 +41297108491663 +61092035371550 +39170779484000 +33705822102263 +37344229277343 +54365664202994 +49432685170093 +40973967344845 +67942233495124 +46021124617332 +46391236853286 +51879717519005 +60266431114282 +47943233750055 +114333470348410 +50707709765678 +54122187599784 +54174856169027 +71934649092213 +55912771057713 +56660802853016 +58207909707735 +58451386310945 +77942480332887 +63705068685095 +74679789447108 +87365204198131 +72876601586263 +71050051379606 +97900842136337 +139876882587337 +96728834383010 +91681677110523 +92412361470618 +93964358367387 +94334470603341 +123814366611218 +110087627226740 +98650943515733 +104829897365462 +104882565934705 +108297043768811 \ No newline at end of file diff --git a/day09/src/main.rs b/day09/src/main.rs new file mode 100644 index 0000000000000000000000000000000000000000..32dc870fe260bf612e78acef00a4a7b19dc0de11 --- /dev/null +++ b/day09/src/main.rs @@ -0,0 +1,56 @@ +use std::fs::File; +use std::io::{self, prelude::*, BufReader}; + +fn check_sums(numbers: &[i64], sum: i64) -> bool { + let mut index = 1; + for number in numbers { + for number2 in &numbers[index..] { + if number + number2 == sum { + return true; + } + } + index += 1; + } + return false; +} + +fn main() -> io::Result<()> { + println!("Advent of Code 2020 – Day 9:"); + + let file = File::open("input.txt")?; + let reader = BufReader::new(file); + + let input = reader + .lines() + .map(|l| l.unwrap().parse::<i64>().unwrap()) + .collect::<Vec<i64>>(); + + let mut answer1 = 0; + + for numbers in input.windows(26) { + if !check_sums(&numbers[..25], *numbers.last().unwrap()) { + answer1 = *numbers.last().unwrap(); + break; + } + } + + println!("Answer Part 1: {}", answer1); + + let mut answer2 = 0; + + 'outer: for window_size in 2..input.len() { + for numbers in input.windows(window_size) { + if numbers.iter().sum::<i64>() == answer1 { + let mut list: Vec<i64> = numbers.clone().iter().map(|n| *n).collect(); + list.sort(); + answer2 = list.first().unwrap() + list.last().unwrap(); + break 'outer; + } + } + } + + println!("Answer Part 2: {}", answer2); + + + Ok(()) +}