From 347d2f1fbce2d3927a32b3af818ab67943628568 Mon Sep 17 00:00:00 2001 From: Orangerot Date: Fri, 17 May 2024 15:41:55 +0200 Subject: AoC 2023 --- .gitignore | 9 + 2023/.gitignore | 23 ++ 2023/day01/Main.hs | 34 ++ 2023/day01/Main_clean.hs | 25 ++ 2023/day01/daniel.txt | 1000 ++++++++++++++++++++++++++++++++++++++++++++++ 2023/day01/example.txt | 4 + 2023/day01/example2.txt | 7 + 2023/day01/input.txt | 1000 ++++++++++++++++++++++++++++++++++++++++++++++ 2023/day02/Main.hs | 26 ++ 2023/day02/MySplit.hs | 41 ++ 2023/day02/MySplit2.hs | 50 +++ 2023/day02/Parsing.hs | 122 ++++++ 2023/day02/Test.hs | 43 ++ 2023/day02/example.txt | 5 + 2023/day02/input.txt | 100 +++++ 2023/day03/Main.hs | 28 ++ 2023/day03/Main2.hs | 30 ++ 2023/day03/example.txt | 10 + 2023/day03/input.txt | 140 +++++++ 2023/day04/Main.hs | 20 + 2023/day04/Main2.hs | 26 ++ 2023/day04/example.txt | 6 + 2023/day04/input.txt | 208 ++++++++++ 2023/day05/Main.hs | 24 ++ 2023/day05/Main2.hs | 52 +++ 2023/day05/MainOpt.hs | 23 ++ 2023/day05/example.txt | 33 ++ 2023/day05/input.txt | 197 +++++++++ 2023/day06/Main.hs | 18 + 2023/day06/Main2.hs | 16 + 2023/day06/example.txt | 2 + 2023/day06/input.txt | 2 + 32 files changed, 3324 insertions(+) create mode 100644 .gitignore create mode 100644 2023/.gitignore create mode 100644 2023/day01/Main.hs create mode 100644 2023/day01/Main_clean.hs create mode 100644 2023/day01/daniel.txt create mode 100644 2023/day01/example.txt create mode 100644 2023/day01/example2.txt create mode 100644 2023/day01/input.txt create mode 100644 2023/day02/Main.hs create mode 100644 2023/day02/MySplit.hs create mode 100644 2023/day02/MySplit2.hs create mode 100644 2023/day02/Parsing.hs create mode 100644 2023/day02/Test.hs create mode 100644 2023/day02/example.txt create mode 100644 2023/day02/input.txt create mode 100644 2023/day03/Main.hs create mode 100644 2023/day03/Main2.hs create mode 100644 2023/day03/example.txt create mode 100644 2023/day03/input.txt create mode 100644 2023/day04/Main.hs create mode 100644 2023/day04/Main2.hs create mode 100644 2023/day04/example.txt create mode 100644 2023/day04/input.txt create mode 100644 2023/day05/Main.hs create mode 100644 2023/day05/Main2.hs create mode 100644 2023/day05/MainOpt.hs create mode 100644 2023/day05/example.txt create mode 100644 2023/day05/input.txt create mode 100644 2023/day06/Main.hs create mode 100644 2023/day06/Main2.hs create mode 100644 2023/day06/example.txt create mode 100644 2023/day06/input.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..55c5456 --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +# Ignore all files without an extension +* + +# Don't ignore files with extensions +!*.* +# Don't ignore directories +!*/ + +*.o diff --git a/2023/.gitignore b/2023/.gitignore new file mode 100644 index 0000000..4c9e245 --- /dev/null +++ b/2023/.gitignore @@ -0,0 +1,23 @@ +dist +dist-* +cabal-dev +*.o +*.hi +*.hie +*.chi +*.chs.h +*.dyn_o +*.dyn_hi +.hpc +.hsenv +.cabal-sandbox/ +cabal.sandbox.config +*.prof +*.aux +*.hp +*.eventlog +.stack-work/ +cabal.project.local +cabal.project.local~ +.HTF/ +.ghc.environment.* diff --git a/2023/day01/Main.hs b/2023/day01/Main.hs new file mode 100644 index 0000000..5f31582 --- /dev/null +++ b/2023/day01/Main.hs @@ -0,0 +1,34 @@ +import Data.List +import Data.Char + +-- isDigit :: Char -> Bool +-- isDigit c = c >= '0' && c <= '9' + +wordDict = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"] + +findFirst :: String -> [String] -> Int +findFirst [] _ = 0 +findFirst s@(x:xs) wordDict + | isDigit x = read [x] + | Just y <- elemIndex (take 3 s) wordDict = y + | Just y <- elemIndex (take 4 s) wordDict = y + | Just y <- elemIndex (take 5 s) wordDict = y + | otherwise = findFirst xs wordDict + +rev [] = [] +rev (x:xs) = rev xs ++ [x] + +main :: IO () +main = do + inputLines <- lines <$> getContents + + let filterLines = map (filter isDigit) inputLines + let outerChars = map (\x -> [head x, last x]) filterLines + mapM_ putStrLn outerChars + + let intList = map read outerChars :: [Int] + -- let intList = map (\x -> findFirst x wordDict * 10 + findFirst (rev x) (map rev wordDict)) inputLines + let result = sum intList + + putStrLn $ show result + diff --git a/2023/day01/Main_clean.hs b/2023/day01/Main_clean.hs new file mode 100644 index 0000000..21b18a3 --- /dev/null +++ b/2023/day01/Main_clean.hs @@ -0,0 +1,25 @@ +import Data.List +import Data.Char + +wordDict = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"] + +findFirst :: String -> [String] -> Int +findFirst [] _ = 0 +findFirst s@(x:xs) wordDict + | isDigit x = read [x] + | Just y <- elemIndex (take 3 s) wordDict = y -- not needed for exercise 1 + | Just y <- elemIndex (take 4 s) wordDict = y -- not needed for exercise 1 + | Just y <- elemIndex (take 5 s) wordDict = y -- not needed for exercise 1 + | otherwise = findFirst xs wordDict + +findLast s wordDict = findFirst (reverse s) (map reverse wordDict) + +main :: IO () +main = do + inputLines <- lines <$> getContents + + let intList = map (\x -> findFirst x wordDict * 10 + findLast x wordDict) inputLines + let result = sum intList + + print result + diff --git a/2023/day01/daniel.txt b/2023/day01/daniel.txt new file mode 100644 index 0000000..4fb66fd --- /dev/null +++ b/2023/day01/daniel.txt @@ -0,0 +1,1000 @@ +ninefourone1 +53sevenvvqm +kscpjfdxp895foureightckjjl1 +72fivebt9ndgq +28gtbkszmrtmnineoneightmx +four66jqrbtqcsxjtqjvfjhl1 +four8pzznjbhxlhtz6bhtzdxjlg1 +rgxjrsldrfmzq25szhbldzqhrhbjpkbjlsevenseven +slkjvk4threesevenznjqmmfive +61ppgrkmkfhteightone +1threesix67px +sxbjdbtlnjrmlzgxneightthreepmqxdxhfk8jfrheightwovp +twofour2sevenk +sevenonezknqnkfqbzffjvfivetwo94two +45xj +mp7one6eightvhfnmfive6 +fhtctftxm3threefour2b +2dq7bdmhhs92 +pdnbqlbvtcxgpnfhmsfhzstgm173 +8fourvxkddsrlcvseveneight +15zqpmsix77hlljgfive +jzjv6seven +eight1vbfive +721sixsdzbqtskbpkqbcmgmlpk5psrhr +pqxdxcx5 +twozsf2five +7twosixthree775 +7xtxrch7six +729twofourlqrxtwo +qtvbgtclhnk4ninefourseven5one +jvhngkcdjhnmqghdbqdzqssf5onegzjbbcchboneightn +five8two14five2nine1 +one3twomddthree +8nine9two +7fiveeight9ninesix6fivethree +254kcd61dc4two +7sixonetxvthntlngtwobzkbz23 +8sixnine6 +threedqtgmv2skmvcd +7ptdhpvr1 +lsvmzvzvd9mqxszjmbddkmxzdxsninedmglzlzphtwo +kgdt12seven4xxtttr5 +nrdtgdftjmfour6fxjninenineblqlthvpcx +ninezmstcdfchc11onebmmfdfhvdncrhc +1fiveseven +oneone26twoeight +threefivenine98one9twotbbcq +9cm7ninestc +jcrbmcjtrlzvz7 +nine8nine22 +3nineoneseveneight +58four2three +stwonefourthree9twonine4six5bvxgkxf +ninechzcz4seven +2tgzgmtzzpjdqqz +brsptjppb28qxcxxjbzpeighteight +eightthree3ninejrft4 +sixqsgkzdjmgpfive4threemxltqdxsfive +vxfd2q8 +khqhgqlxslkmbrvljcnineeight1gjgcqmnbdczqb8four +mvbltrgpfourcclxftbb7gcbqcptvgfsevenrdm +61eight +six8fourthree6fourseven6three +jqdfxvhjg3sflkn2sixptxxsqrfml +6jtxs +seven99threeone +five6sevensmbbrjqvdbmkbsqtwonelg +fdvfsndt32fourgllgfrninebhnzzczfive +9hxp9srhjhjjvqljhzprcjpqreightzs1 +djldhkkcn55threethreefourflnxnbzhkzmx +fourfive43chfvjnvjrkpxlgjrfnqbl +fxjgtj4 +1sevenfour2fiveeight +seven43rxxeightb1 +9sevensnxkp3lpzxfxnntkxzkrhk7jzhmtvn6 +25one +threeone7 +1pkfvsxxthreeoneseven +ztbvfqnpz2xdhgdjmgvfourtworqbxqsh47 +8four7sixninesix +threedgl88cczqhqxjnc +nineeightthree4sixfive3sixdqlmscqjk +16crjsdl +tgq2sixhc7three +tzgsqspndt5xnqlthghzfvkkhone +4fxdqrs64ninex34gd +seven22 +kghfkrpvnppfncbhhqpt55bjf +hjhb71bqdrrgsrkqdtsgrxgsscqjmtfzjkzsbp +lgdnt9threeeighteight97 +pvjhnk83sixncvgmsjltwotdmmpxknhvntfndxr +7449 +qdfzv9hkprplzkfh +66three5five4zdsfrcnljqmsxf2 +veightwo27bdbsvseveneightrcqcjxsixeight +1thvkkk +8bnxqfsdhzppblzlzbkfsksfscmb +zseventbdzlmhnnrfive1one +sixxnmntrmp6srcsqbrqnjfiveeightfive +4trnzlshnjtwo5twocxrvfssbj +6two3twonetqt +55qsnx43 +3three23tpctbkrnqv +sixqk4cnfdmtltmlhqxtwo41glkhdhgnt +35fivesevenpfournxzsbbgzthjvlvzrnine +tworkzgkcvcone53nrvgdvgtc +two9llkjbkz8pklrsgqqzr2four +ninecgpbgcnine4tldjqsone4six +2tfjhtfourfour +onebhlhdvvqx1sevenmsixsix9 +pjgjt6jkrgshxltfnine8four45 +4vsqfljrfiveqeightnvbdb +11nfslqvhm +7crrhqxsfive8ctkzbhqnine +vrvtglvthreettrkq5bdlrtpx718 +1btbxlthreedtrzgeightnineqczhqm3 +193 +fcbzxqxxjtmn47ffschdrbeight +twoh1gqkrnm1 +7ninesixpzpsn7 +5kkvzpgqd +three6nine +32fdn +22twoxgvktxpxmbjqtgtbckx +1hdtftwosix +2jfc +six5nvzcgmrscjn5eight4 +nineqhtczsninetwosix4five +9three6sj +hntktlbqmldrphqzxkhfour193 +twotwo5259 +v7six1vtlxnpm +rhsm2 +gprmtxbhlsv8onefournine +2fsrbtdvft15six1kxpqbnqsxh9 +one5onemxthree8 +nineqbxdbznzktxsmstsntzffour3one +9blhkhjsgsfgsblzdtqqfour8 +stz4889563cb +vjrbs6threeptbbmncz7hqhqgfgldtseven5 +vbfs1 +zjqgczjsjpvzvjseven4 +sixfjzbrrhcfqvglxhnsxninedrvtvjbfqjdbrzblkq6three +one3threegcdldjsrsssixonefiveonechngsl +7srxv4hsgjqsqfvv1tdngkpjrczkl4 +5scgdglnjbnsix8fivesixtjccvmkfxfnzvhctgpncjc +4eightfivefive1lgscbj7kpcr1 +eightknfssevenfive6jnpklczrpfeightwol +37qccxllhzshninebvpc8 +1eightmmcthkhf +seven8fourqn7tbgqnmzcc1 +sixsevenone4 +clhdvjnqnine9threesix +onetwoeight9 +81z3threenjsdhnqxvtwonezv +9hqtsb +onekgnlbthreeg3 +eightspnrpjb65fivevzfpvjntbg7drbgjccneight +ninerdlsix7285 +fournineninefive3vbnhmhdvjgdqcm +njzspqxpxrone7four55 +nfdhlqcpvzrrtsmzhgq3 +fourmfdtnpsfbxkjtgtgx5sixrppsqplqdjvnsixdtqvtdm +21onesix6sixnine2 +fffsmvtt8fivenineglrqrmktzzseven +fivefoursevencjxmskrqclz2 +lgk27threefourfsqrbkntbkfourvflgrzhh9 +617hj9 +ninegcxninetwohpfdxrb3tjjjtxtnvtwo +one1gnftc8onehtsxsmg +foneight3fsbhdqzr5twojbsdnntwohd9seven +zkzpfvcxqnbvrg1 +nine36cddqfvrf +rdjlpfk2pschfsdrpz +nine994three8six +three3nvflpftf2eight4 +3nine2 +rxxjdk5354 +hf4eight8qjtcfldnkvtwofivetwothree +7six3twodhnvmxj1nine +57seven3six6 +qklbvzfhclfnllhhgeight8xtvld +5fgzqhkssmkcfour1 +hhvjkdnlffnineeighttwo18twonecs +sevenbfzrgfm1six1 +nine71cskklxvcbnxtskdbqnpgklrxklcgccxjnssksrlkx +hmklhhjdthree77 +3vpxclbgkpone3ninesrclfive +djfqkgjvqpfvdsix5sixtwoeightsix +eightlt7csvgxpnslk +sevenfoureightnld2mxtgpbzpthree1 +11sevenglfmsb6 +onetjjnxvssg1four4drxbxpnpv24 +2zdxs9mfnbgfmjln1threefive +one186ltsbck +6fsbpb9sixhc +nine818 +xzqcpcdprsqjbgknkvztwo419q +39qfdlcnkhg31 +9djnlcrxqxhrcb8mczrxrm +nmb887525seven +jhmv3 +zhvdbn1fivem8seven4sixoneighttsn +6zmmjqmnftclqbcthree +6cpzeight92 +onepqfhtsevencvlfvnczhb91mmtdprqxmcnine1 +tvqdfxn8eight +five6fivercgrpbtjgv87jmcndclbk2six +jgtmrbvl68lpqkpxddqqxvsixfivesix +nine2nlffgkvmp +1frdnhssftg4eightgclxsgqtn +2sixblr94six +94mlfv +6vlqtcsmdd47hpfmlc7fiveeight2 +tklxghxv5bzc4hhcdcpmnine8 +four6one1zzgqghvs412 +xghjpblsfpg19ntpfmcfd +471rbdblzs +69fourhjxkvd7fourfour +jmrscfqdfppfdjskpk61 +five5eightnqpd9ninezknztwo +onelknchr7nrfprgmqzp +svxlxrx9892five2 +3ntkbzzpxhdmrsix8ttgp +ndh7zlnrzpvmnine +one7xlnbmjjmfv62qvqjpfprbvjkpcnine +99three5 +threetwotwo7dhtgtbchc7sixtwo +tmfxxph3eightgdccscdsrkmnhbb75 +joneight4one5 +nine3six +81tqzsqpkv99 +sixvjlq7 +five7bkc +five3811threelfpzztxzk +1fourkkpclqc3 +xgrpbmktcthree46g +bgcp4two8 +jtgeightwo7nine +bkmcrcq3eightrdtvrbglmxmmztqm +7tscmg5one2jhhbfb1 +zt5khcrgqjg5nxxzxzd +five85 +twothree1 +eightsixthreetwo6b3tnjmcqdjfive +onefrlg7 +fivescbjxbdnvslqqsone5bdbvskpmksqmmfsncsmd +two83fourthreefourseventhree +dglrmbtkfltwofive8ninelzmrxvxoneeight +8nine6sixsixtwo7 +sevennine4lbsevenkdnrhpltn +h3fiveeight4cplrnd +vhsgjbqm3ninedfhfsb +93nine7jvjmlzgcztrqlxtwo +zhhhdddbbgcssvfzdhmpone5fivefournine +l9fourvjfbqpdslkmvxsdrnsgcvzpjxm +kxlseven5two +rbtwonegsdgvsjtpnnkone7mdz +phffknvthree2threeqgvfqxgnine7 +2lgglnmthreeseven27three81 +lrgkrxx2 +seventwokxvzkvq6eightthree +5fiveseven +fstwonersngdlngx28nine +49oneninesix8four2q +hfvhzvmjgbfcbsevenrmhjhzkc3 +six84 +8eight2gzblldzvkjfive +6fz3eightzmsqb4qsbbsnthm +fcglpc2one51 +sevendqghclrpxt7pzone48two +three5one +5sevenfivebbzkjlcnxseven8fourmzqlxxgjvc +xgg8one6782 +gggtljnnsix3lkhdqzzpdtdkmjtgjddkpgx4five +qrmsfc13onevnhlbgs +nrtwonethreerbbqffzh62 +5eight81gcdbrx3rlk +mtdtxcmm2bgmqhgqrtxsn8 +onercx2 +9sixoneqgr4 +xmoneightfour2 +six85foursixninetwo +ninetwo8four8six +qchclfzq47 +khrll3two21 +seveneightnine8868four +3rmbmtbxjp12seven +3tsxgvqxmzvxbdvxtgrvdbzqbh +eight7fourjtxx +fmb4one7threekbxeightwoj +vcsevensixseven577 +2dkhlrrtrnbgzrmxm5fiveclhgn1eight +1sevenlmrbnfour17seven +three5jtbvkseightoneseven4df +fourrgqxplbpbxtsgkm7 +fourqdfxchlc371sc2 +fqxlmeighttwo1seven +zvvlftlhfthreesix6three46qkstxvdt +m74pjgccfour1four +plphq933eighteight +cdbqlhbhj3eight +4onevgdkxhz799five9fbljhpqmvk +two6qzgphxl +two1eight +onekxxghlonerqqlrs83threehvvdhsxmfour +npmsvvrdl2673 +fivejthseightsixtwo9vgrvjzbzsrxjv +eight2gqfive7mzjzpxqcvheightjfx +1bxckdpt +dngoneightbtdptfn85 +fourtwovfzgmxjseven935 +8onesix2drgjnlrxbtdlmlznine5 +five4mmpmqlttsx56ljdzldntdvthree +1nxxgtwothree22twothreenine +38eightsevennxctjfstp +8fourvhnps3onellstpnztn6kvjccmv +1bseven93eightfour +5nphkdbhxqb2pqxtkvhxq +nvvx6fourjgkdsczjv +fourxrmq78 +8tjmnvthree3ninetwo2five +p7cvtwoneq +7thbggjbznrsixonethreeninej +xdgm1crqfnklk +onehmqqgh4ninenthjonegfjmvtfgd +sevenbsqtlk9 +8seven9two9hdz29 +fbcjhzdgzdg8jgjvcrmgbcrsixnine +3bssqrj44onedqxvhkfive1 +tmmxtz5dtxbbcjlfivesix +pvfqzksgrs4khmlvtwoeightlsx +psbttsmnpninefour42fivegsixfive +sevenfiveqscr7dfxpninesix5 +xmsjddzfxftsjfq6four6eight6three +seven42 +eighteight1nineeight9 +8c +pmqljjjzvx5znxqnsfour8 +78zlpxnvsqpgmgmk +four7fsgttnrgnlslr +fourtwo3jg2 +qlz18three5lpxfjvnfppqjxh +4fiveonetthree4eight +7lzffxkxnzjrtr +three7nineone46ksnshqgdpt +8dntxkkkgdxggvhxh2onefour5gqzsqkm +tjsixonedbklrxxk2twonxdpjzb8 +mfglbrjrq93 +seven37xhsrxrvcgninexbmdrzxthreeonethree +fivegznvfztszqlhtrsslsmqq43212 +tdthjjjbkeighteightsevenpcbmpfq2 +five1eightq +three13three4vrsrrtp +cgztjgqgdths2 +dhxztfvlonetwokszrv8prdpm2 +dfkcklchjj8twonine52ppvndfcnf6 +three7ninenkxfourfive +93sixlqxctdhmvssixone +oneqbvfrvteightnineninefivethree9 +jskrtmvsrqnpvcgsmxbonecmlrjpdpc4three +crpcfour54xxgzz +9fivefhdpcqsd +fivenineclfctjninefbsh2 +fivexhrzbqpfxl8sixtwoeightllzplcpllk +zxgl5qneightsevenone +sixpdc17thxfive +1twolftpzbmnzvdlkvlsevenhdvgfrjhmthreethreeddkdvht +67twotwo71 +oneeightcgnhtdxpfnsevenoneeight13 +eightthreervd5tnj17 +ssrsmhxrsixeight3gbqggcvfqg29 +6fivecvcdxnxhxxtlzthree +fournrrsix595 +p2qchlvplzdvchkbdzzbnsix7ninefour +fourthreefourtzvlrnr9m94seven +4jxzkrfourvtjpsnrllkjcczmmqnsj4q1two +4627qlpscgpjcnine539 +two6nineeight +63five66fivethree1 +skndgzsbsntwoone1 +threerzgdxgtthree2three +953lsdgn59 +27bk +sixmfmbslpjjsixsvnqrvtxznffive5 +2ninenlgpggxm42six234 +fdzfvkjnchsevenfivethreetscllgjvrtqckfnmz3cszmt4 +7ninetlzsxjsl2nine3 +shsvptqngsevencjjthvfm9six5four +7lsrq36threevzfjc62 +two59threedxmfourjfschvqvnine +khfqjmksxhbvs8sevenhzrmjtkgm +nine2stgflmsm8fkthhhjzlszdnmkmqpnjxrfc4 +twofourthree244nine +eightvt978 +fivefiveninesixnine6513 +2lbtz19fourtshqsvblhrkhxbpfour +ptt7bntxhdvl +mskflsslvdlmndmmqmfourtczqlssnineseven5xxxkfvzd +l329eightsevenfourfivethree +rmlksxsixspp9fourhlcg +8five9q +hqoneightsix19nine6xmjbtgjzgrhmlrxq +six38 +9eight2 +3sixbzhgfcg57sixsixjtqmknd +9fchn58 +vrpftbnvonefour6 +vqgdtrvhnnxxsevenseven9eight +56vnine5rdpsnlqcbq7three +vncrjds2cmrg7 +213sixfivesix +tzclpzdsthree4sxgjvrzcrzcndnfour +4sixseven1three7 +8fbrggzmtqn8 +four79p +twonineqonemfour3dq +5fdgpmrghtksn5onesixtwo +xseightwongqqsxtwo8jslclldvnb +nine1one +9gxjrfourvhqzcxdhrtpxgtwonine +eighthfhtnvchtc7fjkrxsmhtm7rbk +thqxcfjbksix32xqrgqsqtx +6qjqql +jgcreight7eight +6onesix4threeseven +5vcv1twoeight7 +fivesthreebvjntwo9jdxghmxvl +632msc9threenineqfone +dqxfourkb4eight +6stsp3nine +566sevenpdmg +xprjdn55 +9mjtcmhjb +twoninelkjznqztbc3twolnhjhdbfxmhfr +twotczpxn6qlcfdlpnq +4ninefive +1rs44three2gzczjdgq7ssmtgjbgbb +ggmzqbkgsix4five23bftjlmbfbd +threehfcscmmlqvcjtpthree98 +7sixsixone4 +2fivefvrr9four4three +1zt1seven +9hsbthqvhhsnineone23tslqccg +sixbqvd3 +22148four3 +ninejlpbtnfive41rtzqjgfmcbncrrlnn +9sixfour +qnhfivetwofjtqtlxd7lmrlfctq864 +69dqrzhlqssgcsxtz54cpmjvrkcfiveseven +fiveqpv85frkmpgxgc +xxqsscldeightone9ngqtkf1nine +5sixgxbnnjsvhf5dgxgone7 +sixsevensqghlvkfxnfour7 +8gmgvjbfivesevennine +qj796fourone9 +rmpfsppvzdtwo4threetwotwo9 +dqvtrhm3nhtrxxccmfiveonedfzfvcghr +4threejxkhnxcxjoneightp +sevenhkpfgdgsgnvseven3m +qhrvjcnfdbqchrsvchcxfourbkhhq9six1eight +29pqnd +1oneonethree627 +5977rcr2threeeight1 +fournthpqbztrhnine64 +fjnjpgqxr86five4sixxhrtvbp2two +7sdnvlb5two +58vffgzcgx4nineoneeight3 +h1sjgqbhndbz1oneqgncmhnleightwos +gjms21 +onetwodphfznine51 +gxpl3fourzfz3 +five46 +mqsixccffmc9gqk1 +5kvxpqrrpeightthree +threefoursevenfive2dhtbrxlzzl +shhczssbltllsmntntlqfqgnnl98rm +5oneeight3vkqtwo29 +bv69fouronefourone6 +eight6five966 +4xnrtztgfgcmnmnsevensix +gmsvtnjd1sevennine4xxhqfbrjjqbglqjngttc +mdnxhhteightfive5onenineninegqjbqmfd +xonefourtwo4 +onesix61 +sjmnjhkj2892eightnine9 +nzseven39 +99nnjjzdrfsnjhthree1sevenfive +6xmggtbnblnbxdpkzblnvcvjqmhvntwoeightseven +76five6six +chdfjrlfhdzeight778 +xrvrck9five1hrvpfvkdcb7eightnine +foureighttq5sgdfourl2 +4rnbxrhhboneonefournine +5four3 +1b97eight +hlcjghlhsf32tgknm565knxqr +onecqgbgdcmlb2sixsix6nine +kxdkz3 +seven5xvhrxdm +xblqbgkqgsixvgrthreezxnzhknklxhbmgl4 +fvnkc7threethreeseven +bmbqxv24jhdg +97rfphlxvtx +4pgblonelone +ptdpllrddeight3 +9knpjzskrfd4 +twomjqdtbbvmj4shvsqrone3 +9zzh3pjsf6mhxlhm9glglfztjm +cfconeight47fivetdsmndgvsmbqjvszb +21vbqjz374 +sixeightqgfdjbhfd4oneeightone +tbccqdpz78srmcdx4six2 +643gqtvhkljxt +klfjf4qms +zrnhkhqzpczzfqsgsrtxklpbtp72 +1cnqfltrmhphg832three +twoseven5 +mxkmxlcgsixklclrkfr8638fourlrqpzgjq +nkbfkh452pthree +zvcktvd2485four88 +rfxj4 +three6jnr7 +two45rldjnmxkjphtwo7v +fivelncjffdnkzqrshvthreeh3p +ninejgrbmhrbqldeightnine6nine8one +96lvpt2djrkc5 +7seveneightthcxgthreeseven5hpfddktpj +6bvn +sixbjxtphstzgspnmkcvc952one +gmmslrndvltlthree394sevenoneightl +threenine7onefourtwojxhzvqlseveneight +5eightsix4txcczzmg +84seven +skjpkhxggsvjbprhllgjhninetwo6 +72bdpzccvone4zbdzlllnnonernlfvdpq +bvrtmzmtwonine29 +mrlvmdnlxb2814five5fjxzlhpn +lmrpf82rksix611 +tvq18oneqnmmzvtclnthree +jrbjc1zbbpqbrddt26seven1 +lxfivenmdtnhdmf98ptpxsgmgrxkmmznlk +zbmvchmxsevenddddthree2dxlddjp4 +three3onejg2fqgtjmpcgeighteight +three2two9seightfjqtwo +ninefive8sevenvnssix +3cnbxxtgmf5 +kpmjcsfrjfgzhmbpnqmlvrhbhqs8 +3vvcone64 +fvqksdsixthreexbfivetwo3 +sevenseven5 +63twoone8vhbcpmmlfive1 +4ctwo17eightsixkpvlgpj1 +rsgsnone1 +kbvxonemcqfive3eightone +ninenineone45threepvsmrtonejxmbnd +37fklnjkslqk9th9 +fiveoneq8rcgdxtwo8jfkxq6 +rgd7 +7rgkdpvp7qrb +7crtxfmslxxtcxsv +mqdnltb23fiveqcdqtonethree +8seven7 +8cqhqlhndqjznqhdbld2nspnxbj99tqqhp +onelqn7 +bvbjfour7 +ldqzhvhrbgsrrkh5j +kjsjxdcqgjztldjvxxgr9twoxfknxrrrphkdzdl8 +rvscnztblp56ljqtwompclcf +2dbtdgsevenhzctckvkvxvjljz +tvmhhxbbxvvsnlnineqsltjd92one +9twoqdmtvbxhpcthreeeight +81dvnkd87xbct +6mnxqnndcjfivefdckzmppfsevenmqvvvbnrgs +lvl3qjk5 +3fivefive +ktvsqzrf14eightmtnqbcktk5 +sevencdknznbxseventwo8rzggmvpbvlrs +hkhhrdxlml1xzbshninejzqc +eightseven23shkgzdgvvcxxfdv5 +14five1sevenxfmhtptwo3seven +47one +2three3 +f5dszzs2 +xmxffxkxpkninethree8x6seven +glzoneighteightrnjqgjznjm9 +63fznqxdfqt8 +33nine +4vrbmthreefbdzf +fourninethreesixnine9fourlvbgqhjbqncnlbjbz +two848dbvbninenine17 +pqzqgone1two +eight7lmxbhcsix +szr2fcvkljctlghhthree +sk81pxqhhhhvnjvgzfiveseven +cgqqkrz2vpdpzrthqssg7nineeight +498eightfournine +eight85onesvxnineone53 +ninevmchpkcg2 +six2shsvqfivefourtwo +mdzckfvr72cv +twotwo7onethreefourdjtgjg +tworfclmm3 +5sfvnkrmrptsix7four6kzlmclm +1onedkqgzbr89kphvc8 +5seventhree8eight9eight +kvjpgjgrcmpdscbfthreethree4mjqjnnzceightwohh +kjbmh1fdkdtznmsznvlconeznineseven +1fmgpxhxpqznqscvbszhhcmglvtnzhbbjjbzg +1mfqzkfnine5 +rrflkqslxztdlqxqkdnhqd7ps +39123thhsmscbpxr +8vnine4jgqrvqtshg3jhhdnbsrxneight4 +xkqgnfour87 +lsbnjqtzqz7ninenineone73lmkbnkhs +9fiveqqgqblfivehttxk +8twotwognd +4xknbheightfour6358 +4cqtpfjpf72eight3 +ninemjpqpqg8foureightsevenfcvpnrnnpzhcgkm +37twofivedsxrzbpchnkgxqx +oneone57one2k92 +mckoneight9threefour1onefourhdrcrvhqcmngkjnsthree +945 +tmmtwo7 +57 +6twoxzbfftnr27 +threenine4bqpztsixfour +84eight +3jpbnjrqhqfnxckqkqdvls +9gzzjzz +374nine +ninembxeight4sevent +threecq3 +cvn6cvqmpmfflkzphndjnggtktwosn +pgz7four5nineeightsixqrnfkdkgh +6one781vstwothreef +one617fourthreefourxqxnpv +8eightsqmkjkkf5xckcvd4lfnnfour +seven23qhntfmg56onexkjxh +f5s56rfltx282 +twosixninefive1tlzq +threetdhghclfsksql5oneninetwoseven +zbqzxmpb9pxlrthree +r4gxdzjnvzfonejnpmfcpgvxjjvkh8 +five338threejkk67seven +twolntxcnzvfr55sixtwofivesevennine +xhlppbqfr71brvppsixthreefddlgpfslqmdv +kxsklgonefjfpkd4threefive9six4 +6srphqmtdoneh3glthreefour8 +rjzdmj1cqvxnx1nvcvbfctft9 +3fqjdgbpggthreesix53 +9fivesndgmkvckblktzkshglqgdl4ztwoseven +qqrxkqhnzb23two34nine9 +8hrmffgstqpsixeightx1six +jngcsjnrhn2zsvcjmjg +9zfdmhzxdnfour272dcrqgk +lbjbrfhjxhxjphzxsjsix4 +fourthree2seven1two +twosix87 +vrlqqkctddggcvcjcpk6hxbqvbxmtsix +mrcgbpc6dthzqmmthreefour6two +r2zntjxgpfqfmqh +fourseven3 +6nfnsgchjdffttmgfnbvlxzoneseven8 +8sevenqqfiveseven5twojvgk +4rmtkvml4 +bprnine85 +sevenmfpcvlblcnine485fourseven4 +sevenseventhree68fivelhqgjqvcdqkvds +3fourxsgghqnvtssnvfs7nine7 +1fiveone5hpfdgvxb +eight2eight42twotwoonenine +lpdeightxcgpxkkeighthtjpsninemjlxrxtg31 +4smqpjzsixonethree +mr6csbmgrdrjj3onelqd4four1 +5sixvbscchd3 +384sps +4qzgsvmfx4ninevcclvcfrfp6tckcpvj5s +8l5glclltgcjgbhcg6 +3ldtdmjc6threeone +hsrtzl521nine5qqrtpdsp +z4v8threejdsmbfjpbj +9sixln26eightwovmh +848 +kndxtqpfrqxdxtfnqrqznpgvp9ninerlzcdvdtwo84 +kmqs84775seven +5threefourzkg +43five8cq2kprvdqrmxr1 +three4ttjqdh +48nine7sixfive +22x +sixrgtwo3rnbzkrztkdkg +4t +29bjpskmxneightppvthree +zmlzxvtlkt4seveneightbxseven +5two5eightnpszzmbkncnstx4 +9vk98sevenhznkxmlrlk7vdbqgvfjdk +1sixb8sjkvdhfld +one42eight4mrsdnpfjpvdtq +76fourntsrfllxkdfqvm6seven +skqndhr3nm4776 +4xpmfxmvj633eight +83ninecmpt +fourdthree9 +9eightjqnnmthcrseven +7threekgtf1 +xscj7threenmhsixseven5s3 +cqlzjt41 +855threemlmmqkgtfk +ninefzmvjjtvbmgf8nineninetwonegcn +ccpkzcldfourkdtfkjxvfb9fourhbtwonsoneightnl +pkeightwo5seven88rdnzzsdkbjeight9 +threen2fjsfivesix26nine +nine4rz8nine7bglpcmkqfzpseven +eight94six8dpgrv +twodfctf278 +fltqtmdkgjsvf72three +llrtzsixsix4fivetwosixone +qjhtjqjhgkjkzlpxxclsrdnzk1gbqt +sixeight1sixtwo +one5413nkmqjtlbdkz22 +bhtwoneonemzpzkqeighttwooneqkmcmsbq4 +sevensix3three2sixprcqcvm +25tjffdrtwohfqlkhzxlhb +97gcgqgjnpsthfjfdv636jsxq +zggjmjone1297six8drzs +jbpvnineeightntkkshbjvr3nshnqzdlkjmkfive +5four2gkkbxmpthreefour6 +5two15sixfivetzpg +one4fouronemfpvnqseven +9fnlbljdnzzfournine78 +djfljccrtvvqktzzvk61onesd +7twohbkeight +seven1eighttwothreet +4mdcljknhpqgxffqpj5 +nine9jlsmfgdgntwothreeeight4 +136nh +635ninejghg5 +cmone7fdlk9lfivemzvnhkcsp +8eightnlndm +6fourpb892 +fiveseventwosixfourthree7 +5fm +ninegchdnrf63431 +24sgnflnsixninenine8 +snm9 +3fntd721dhhkrqqxsfpstsvzpgonetkhcr +jlzfbml61vdmgb7one +266517 +7fivetwo2vhchmg678nine +cgrp3vzn5ninetwofour +666ninefour +9s +svpcnlktpxtvk42jhsvvdpftxpsk +2qznfzvbdr +foneb7eightfivehlbjjknninethree +kfp6 +l34pxxhxtd7d +rsbcrtwo27twocqlmeight +jkzgvqgpjfdqvmjfx2flnvjmgllxghhrbjjkfour2 +45sevengdnf59twofive +6fivespvkblrxvkcgdxktl +three9dvrssvl5eight4ftsix +seven56gdmlbfbjsl894sevencmc +814 +1one4 +onenine5fivekcrf1gvvfhlncsv +2ctvq9djzddfxcrj +ntdlcqgsixvmfvlc4fourvlhtvvqmnmkrm +9nineseven1seven +lcvzbnfourksvjqvmv47one5 +nine4blvlvlpkl6 +sixnqxrhnztzvpmbzmxjm19five +18jtzhk +rzrhv8four +2npghxvjonebchsprfhsjznrxvxnine +eightngsevencrjkxbhpgtxlzhgb46sevenqhqmlfx +threesffl9fivelgmndjfvseven92 +seven85 +87six9vnshclz +threetwo7915three +one2vkbp6rhqbxvcl7 +bsbr1five91 +qd3mnine +jjvhltxtdh5nineone6 +mbxlnj7bbhnxonejtmtqjfrzqgtrhkeightnine +fourfourqrxdtfive2smnqp +7tvjrszvrhdl5five +four15tvmpvxpvdjnine +sevenvv5tworpvdlseven3dlqvgblqtwo +nkckggninegnlqlnv25threexlhlbzvzk +3vngmhprjseventhreeeightnine +nvqtpzsszrdvttfivenine56oneseven8 +146 +fxfbone59 +f32dhffctkxp6rcngvtfq +sixthreefsixjhckmjqfive495 +42four +65nine984 +5fthreeone9twoqqsfvzmp +ttwonefive4 +one6gfxseightxqcq6 +3sixnrjtwormrncmhxeight +jhdxnmsgsdsevensqsslbsndpdmznmldbgeight3tcvjjv4 +5sixtvpckxzcjzbmrzk9 +pmdmnfgkb3six8xsmstsmxgmm +53onetvlgbglq4zbqpdgsskzdsksd6 +kzjcllvz6skphkfdxfiveqrbhmk +75qqjdgxlmfthreevzbfjdlxkfqqq +seveneightjntpjthzptwo2two +2five4fvrfxxnine4qzkkfkmq +2xlvcltn7 +fnmggtj2rqxzh7three +rzpjkgtml1 +2oneseven4one7xps6 +rljfhfrhmzkjxktnszbkpfspxdkqneight2 +pzgnine49six2 +plxsqeight2 +eight2sevenseveneight8rfcrsdlxb +sevenclpqqfxgjnmtwo9 +9sevenrqsixone8eightrxqgfsbjh +kqtkstrxhtfzbllhl4lqvqkcbr +hfplfpbltczflpp7nfive8 +ninenvqfrvtwo6onel +threev65 +frhn18six9sixninefourrsqzgd +mcxckfg5vpkbs89gbninexjzvlj +fivesixdx28 +7ppbqv +hs9twopcvpgtjnrsvksskpc8 +9mlpckzj2twothreefive +rkrgdclkninetwo6eighttwodc25 +tfivefourtwohkhhgsqlj1dtdcxmxkf +1four6five +fgbvmvxvtsix2twonine2sixfour +foureight66 +s6fourcv +mxl358sixfive8six8 +ztbtwo73sixvxsix9four +eight7qmdlcxfive5 +phgfivekrjxdmnzsqsix9 +1mfqsevenhz +rjhcdgzngtc155bqlttbsxklpknvlmk +qjkdqlrrs6two +sxlmqzxdpxdnj9fivetwo9seven5 +2qtdblb2 +8qgdzrsixtwo598oneightp +1shdb944 +vrlpronek2 +jm52 +8eightfourseven11mvtrmtkr2bmp +mnvnjxrgmrxhztwo2ssrdpqk +ztfive435three6threetwo +tnrrdnbgnbhzljdxhxxfrqkcpeight8js3 +foursix6zcsrztvgjxmp +five7fourgnnkspxcmczcbgsbdf77five +fgbrzkmvgrdbqjqndpfive81onetwomtzlfb +2qbsfd1two3ninetwo2 +8tdjxvfpvdvone33three +lpchnmln56twofive8tfour +cfkfbhppjf6fourdkfxsvdtbcjspzlseven8 +5fivestgkzsevenonedkhhrkthree +37nine8six8onefhvvbkmgdfgtv +26hzz +5glvnsztmnfjmkjseventdm4five +pvnnqrqvftrbcvnnthreenine5 +mgscxxlp3eight +53eighteight +two1oneqlcdkbddfour +jbll3 +8threeseven5tmtrgdhqxd +8twonine6s1 +91seven5pmqrjlhqrtzs +jj3sevensix4482 +jeightwo7lk4three +zchchxmsctzffivefournine9sqhqkgfour +72xct1 +vnsxvsqkhpfvgdseven23gzcmltzgone +xzjqhcvsix1fivecjtxnfivekmvjdc +zdfourgjlhtwo24d5klkpdgqbz +7sdzzdbrxbtonerjcmknnql4dfzqccvqt +tncqzxjq9twofiveqkxdrxrpj894six +dddmkctrzlpfmsszeight8zvbpmpkg +three23ckjhgjc +375jzdhnfcfr19mhsbnplqh +vpbbjlzone5sevenseven33four +onejzfsevenrbskjq1four +seven13one +vcnkfgv979one6zln +rqlxzzbmjb4lmbthreektqsdcfzbmdsfivethreenrxdlkqt +qkoneight8 +5rfourfivenine94fdprsix +onexonelzdh2lcbqpzq6 +six6v +7gtgxqnnine +tsljzhntwo3fourpbjncgmvf3fflvjxp +vfkdone9fivecftvmjdk +xc5three6eight94 +18363one7 +8fiveksshdlfmzhljhcmjrn7kpv5j +xbhmxfhbjnjzmninethree7 +2933mkmdqjcl +6ncvzqxfvgfive +lnine5fivetb4qmfktnqjxs +93187 +5mqninedzkfhbk +two7eightntdbsix298four +sixone3bspxqxggkmkrbcqrhfrxrlgjrlvfl96 +fourfivehqls3nine +threedfklszn2threeqzhh7one +mqmftzglone6kjpgglznhrjz89 +146cvkftscqsevensixnine +nndhdgpd484hxdgjtfsdxxg9 +6mbzckbjphg +eight6jbjtnld2mdjtd +zjtzcqxb736five +jlkdmone8 +gvjnjvmlfvcmvnfb8xcgjcmjqvz1bzcctvsixfzqjlhfkfk6 +vr6onejnjmrrldnsixsix5six +ninembtmtkgbctlfive45cjzzrmgcscfbcgeight +2mdvneightjzgffivefive4 +hmdnbxghxjxt4czshmsfzc +61six18threehrcj +six3five6eightkdfzhxcjkdhq3 +jrhqrqkpd4hsixdsbjdpscclmnnhknqq16 +jflzcxr3three +threefourghvgsktkc93cmjmsgh8one6 +96fivesevenslklhsfmpz +jgkpgfnnbq2pmspdfhsqxfour +g4fourthreerpkdhjhlxlzvnineseven +xkxhkphnkvpdnlncn86srxthree +7sixsevenrfour +5zr72qltsrbdsv +ninervqzdfzqmf6five +8jslpvs73 +ztvlxndlm5twohdhmtrdnhbzdrxb +seven6nine4dpdpvrtrmqvql +jfz1 +5nineeight5onefivecxtqbsdtbthreefour +fourgeight6threeszgseventwo9 +sixfour3 +npl8 +tzjkffsvbjseven5rhmlxonezlx +5dhtpfour +twothreebxtfndvdnine1sixbb9 +five9nineqlzrmtgs5 +9v764nineeight +five4eightlsix6 +3nineeight21 +foureight8btsc +3xgdgtb2 +7threetwonexqk +kkqsix48onefourhlsh8 +onekgtdzgfh2fivenine2onerb +six4zgcnlhmltrxp5xphvtwo9 +eight7cdqggpssix +niner9pzmrbqldkljmgphrrgmdjseven6 +439 +twofoursixrthree5bxppnhqtx +bmpnt3 +fivepkzkzpghrptpksevenseven83two1 +9fiveone8one +fiveseven3lqxghdlskbltrzrstwo +fournine3ninephlghonetwoeightbvmdcconeightq +three2pvklmzqjfh4sixonedrctlsfdfour +three91spjlscscjcxbbpdhrg37 +57qqjpdfppsix1qxrh5mlmncf +4nfone5eight +eightqsix7one +4jtvxfd38hnrmqkbnvfxpp +qmfsspkfour1plmslcrsseventhree +fzckcbfvxbpsix7nine +fzrj4 +4threeqntnineqstzjftnine +tkrh6sixdqflrvtmzmfiveseven9ktmtvprkxhfour +nine4983four +mpllmjrfgv66five3kvhthplrtwo7nkklb +9ngvdjddqbz +5twosix8lbhmzrg +eightsbmcfgm76two4hhc6 +seventwosevenrpm6threeeightwodxs +xkbseventwotwogmkxhpmhm42hvvbfchreight +gcqeightwosix8xdlhrnnbkmsevenqdbrjghz +458ninextfjxvgsq5fltdsk6 +rlgsflhxqd5bdbhclmrthree +twothreemqqbzjn88blvqxbseven +rqrrdrmlfsixfive6 +eight959tzxkgqjd +txdszrn5eight3cqeight1brqr +45122 +jvvslnkdk6qnfzjzvseight55eight +4twoeightgrhhkrvtkrzpfive7seven +three8gsmkpzsmfvf2 +fiveeight5sevenone9twoseven +4seightjjdkdglspz3vg +sevenssrzkspld2 +qnzcvcthrsgjlnzxmxlppjdpnine8seven7 +eight7xhvkrcr +two2tdjdfbqtqxrs119r \ No newline at end of file diff --git a/2023/day01/example.txt b/2023/day01/example.txt new file mode 100644 index 0000000..7bbc69a --- /dev/null +++ b/2023/day01/example.txt @@ -0,0 +1,4 @@ +1abc2 +pqr3stu8vwx +a1b2c3d4e5f +treb7uchet diff --git a/2023/day01/example2.txt b/2023/day01/example2.txt new file mode 100644 index 0000000..41aa89c --- /dev/null +++ b/2023/day01/example2.txt @@ -0,0 +1,7 @@ +two1nine +eightwothree +abcone2threexyz +xtwone3four +4nineeightseven2 +zoneight234 +7pqrstsixteen diff --git a/2023/day01/input.txt b/2023/day01/input.txt new file mode 100644 index 0000000..d6c4d38 --- /dev/null +++ b/2023/day01/input.txt @@ -0,0 +1,1000 @@ +9vxfg +19qdlpmdrxone7sevennine +1dzntwofour9nineffck +7bx8hpldgzqjheight +joneseven2sseven64chvczzn +seven82683 +7onefour1eighttwo5three +8lmsk871eight7 +ninefivefive2nine5ntvscdfdsmvqgcbxxxt +onepx6hbgdssfivexs +cdtjprrbvkftgtwo397seven +2eightsix16 +41pqdmfvptwo +xhlqvsjpbhfivefour5sevenonemcmrkvhkjqfour5 +2czddtpsrgsbgddsix6gvmxqlsnnine4 +twozxsix9kmctfour +3hqfxkzr2nineqdpgbzndxf2two +bjd99eight6sfive +oneeighttwo34dcjck5eightjznpzhxdlc +6sixeighttqslqvplsxvpxch +sixonemc55 +sixeight7five9ninesixfour +lmbzpzrhssdslkeight9eightpjj +six2eight579hlbgjnjkqrxrdlhnpfour +6fkfxsqncm456onesftkndhl +bqfckhdmppqvjlkx75dvjzveight8 +btfppljkfkzcklskgzzhmtwo9fjsix +seven44tgvh +rvmjm8nlg3ttgcjtwo +sevendjdckvz9nine6cth +dpxdpzbmnqsn8prggxn8twotwo4 +twofivesevenonedmkrnpznfhgh1 +gqeightwothreefours16gljkzgnkgclmrpsmfkq +eighteightsrfcxtvg7three1two9nineeightwolqn +18sixlone +eight7rxfbmhnsf +6twodndmhcgxlgbqbqndbbthnngblfgtzh5fouroneightrjp +3vpxlzkc +qpmbxctsmt38sn1 +threefivelxcf9eight +5vsptrhgltgqnkcgn4 +threeseven59 +83eight8sevenklzjcs2 +three5three6twoone9 +fkbfvltznine2bbjpng2zhtmmhnrjq3 +seven1xxjfq6 +7btxleight4one +xzsfive3rcxlczkp +8bjfmkjc4dxvd9 +sixddfg8onetwotwosbsb +gmvbngqgfour66eightcspbtjkzlxrqhfrsvfn +three91djmrkkdkrrsmv +four4eightlnhtvrscbf5gh5 +seventwo775dcg +85sevenfivesixslkjbninefournine +cljxdshd93rxjppchxonekmvpcmrzrv +kkzkp315 +three3jxmvjzzvtwojsj1seven +jvcfzjvfp5gsbpr5fourfour5 +jpfivetxmgthvlqnvjzdgrhknf4dvslqsxtv +jkvtctx6kkgkeight +jgsrnzzz8cf4eighteight3 +88eight1 +one674zclxfive +34nlkc8threexfmlqrxbpeight3rj +6six9onetgjmvqz63tnrrqlg +3n67five16ninevttnvbznlq +seven98 +5pkvtpzqs9mvpfpvhb +39s1one6phcgfqbgcvhpqv +sevensevenlhphq5rxffsix +kvvlqzmglmqddtt87nine +5npjkfhmnreightscqf +954 +five4tmeightkfdkhdfq34eight +smdqspmlv3twokthree +7fivegvgfhlqsqfxdljnnpninenine429 +sevensixdrsltf6fnhtcssfhpl7 +drctwoneeighttwoninebzvhslngqjhtwo1 +kzeightwo14bjkksx +35gglqtcjponenine4lhtjrtjzsf +six4two9 +88dpbpbrrnceighteight3 +jf24sqscmzfq +fourone9three2r2ninethree +2fcjl2two8 +ndshrmtqxtwo56eight +mhlsk7 +hcmx8792six3 +2sixonexgpzsjbmbqnxbtkbcvmktone +trqckccvgbdjt7eight9pcnrkxbxrb +sfqnzdlxqcdf56five27pfb +cffn1bfjkxdvcthreetvvxfzlrrpmpmddh +sxone6xzdrsdlfnn19seven8 +twofourtwoqxvpcjmnv3eighteightonetwo +9seven453seventhree67oneightv +28xmzcttr +five4twohrlthrjqmthreerzprxcbj +vlrdjpznp38 +98nphlf5ztrdzthreeddtnxrkhlzxkttpz +mqbntpz6eight4 +28nine +khkreight3 +1seven2fivebnjbzd +cgvdfmncxdn13tp5kxvfqntveight +7bkgncbfql68ninetwolfmltr8glvsdpm +7onesevennine +pjtmseven6mhcfrbqnmpbspsrcsixfpfkhjxdhq +256one54one +sonefour4 +vzbsj5nnhpkgkqhthreevlgfvnz6 +qtkrjxgrvs4 +four1fcglninemggpfrone2 +22trflsckfg7eighteightoneightrbk +sevenfive5fxmbktqfive43 +twoonedbl1seventwokjjbv +sixjlkfjnfkzfhvsj5eightmgmh +gxqjmnjp5pxdksnszcrfivepeight +eightthree5shxvhnzlhninefourkvchmxfj +two9mjkxhsevenddtbm696 +3threedrs3twothree +d1fivencnbrcvfcbvvphxfour +sevenfkgjgrt1lzfqzksddlcprlx9six +one7ckxzglncdgzxcxfour +three8four6dhn3 +5rphkp6three2six2 +7ztzzlnthree4three +rgxrpczczcsevenrphlhcczm985gdbjcnvjx5 +ggmrcxnrdxfdtd6 +meightwovdrpxgmpjqhpmrdsixhts86cl81 +4ninejdbzhtfkdnthree26 +9five8 +six276 +gbsphnmgz5smseven6 +fourgrjvpbkgninetwo1dkrcv +seven96 +2sixninexvmxbjttxb +sixnine3sixsixhvtxone7 +6x8 +773fiveeightxtrtshfivemcqxnvplx +182mfcthbstt2cvqs +13cone1fcgtchxpgs +three45nblglcktt +seventzrjngglvpcbdzfivexclqhsjdd5 +jhfmcqdjp8pktwoqgzskmp4 +pbsixtdvshb2three2lq68 +one9nine +8six98three8 +7ninethree1 +gbpchggch74lsmfseveneight +shshsjlqp7xggv2chskzzdfceightcnhrnine +twoone1fdzjkdhxeight1 +8hdxvfblkxfive1seven3mxhv +hfgmbeight9threefour9 +seven734 +three9three6 +dgnine4eightnineeight +66nmltsclptfptxrpj +5qcmvt9jhj8five +532qbhhz78 +3bvkm +34mpxdthree7nine4k1 +frls93 +sixsevenhtzjqzfthree1ninesixnpv +jzqgtptsrgx4nine9txzsqghqrbnhflf +7f84 +54sixnsdppg16nine5vcmlcqbmhb +4onesixtwoghhpmgltfkxldzjh7 +5gncbnhztwo6eight7ninez +5191jsnqmgeightwojfr +bvxzrjnhnjjfvvrkvxncs6 +dtwo4 +bgckgdpdzksmlrzfone2two +x98lqxzxrdrjrkbfk8 +6gmseven921 +q4eight3eight +fivenkjkrcvs8hpvnrgpcthreekjfnmtg1vntwo +7nine9 +lthqzvxmthreeonefourtwo8fourfour8 +vgn96cmdrnxs +94fourdmfpjfbgdc7sb5xldk +1eighttwodfzffvpv8eight +onefivetwo1five +6ttjvrlqv2fiveseven5d4 +87399 +7hblrjsxdphnplgsevendx +6312 +vtwone4five61 +2fdmhrbdssf +ztxbmttzvldljxrtt142tkfrfivesevenfive +zz1one +fivetwo98 +mcqggtklx39cdz7lkpxthreensztkfmc +qbzmkprpfd166qhtzpcjhkqpmqrdqtcdgfhtgx +95xjrltxrnp +4rsjnrone85 +qqnhlgchvvpcrj8dmcjccthreesseven +fivevbvqdftvxvgxglsevenlvrrknpk9 +3krqgv5fourq47 +ninetwosixvmt3one +fcfvzrsbrqcsdhbflhkn9fdgtjxn +82onekcxcvjv6dkk +fkntvmx8 +nineljkckkldnk6 +twoqdptcvnine5tnmstkrsixdc +ftwone6lmjlntfxptmnnnconepqszsbsbkqkvcxghmhtvsxvfldd +eightfivexxhjmxvmklhzt52mvh +1mmpxmsbpkf368sevennine +8six3 +onekh1 +74nine6gh1bbvsevenone +4pxzmslsevengdqqv +five1qjfxlstfsixnine6pqqseven +mgbdtwooneeight74hrfflzddfgtnmd +mrsqnffrhmhjlvqthreesevenseven6fxrfmhfv +two5threeeightthree +ddgsixeighttwo26fourgmhg +nine41g962khzsxzkg +qfvdz41svzprbzthreedsfcqksix +threebnbbs5six +msix1 +three1eightoner4 +b2twojnrfk2zsrzqfourthree +3onevqhp +fjszvhmsix1 +hhjkjxz37nbbsjpfg28btponeightxv +2six2krqlzph8 +5two8jmtkmpfxmkbjqxjbbvnfcgl1 +h2mg +3seven2nine6 +five5qbcnsfjxm5nptwotwo +6nineoneppcgf5threedcv +fournjkrjn9zd2cxsfmhjtzfourphflng +9seven33five1 +xjmhz86 +7sevenfivesix +3kpdzzninebjzbmnklkhvn +cvlcqtsix4seveneighthvhrfmsjeight +1p +2four3xrbhl +vonerdscjkztwosj8fbxskdzk7 +pnx8nqjninephdhnhmc7 +1sevenckbxpsix5stlhknddjmgdrpm +8vkltvtwo96 +88xccqf2fg7three +four75 +jrcfgzddtnlmvjxgttthree1threenmrbone9 +27btrxjlcqftxkkjvsxnine +8qvc98shcjzz +cjn8three9dphltgdrscdxpv7pzrfg5 +27sixthree +9one7nine3dvvfcztxk +three82 +bpszb42two9 +twofb5gdzxbt6 +threecrpmqbfivefksjlxgrggb8 +9eight9five872 +vtrsixjgccvbpdppthreethree1eightjk +37lh88four7six +6oneseven157fourtbzdtgnkgc6eightwoqdj +1two4nineoneone4 +2fourkqf +9xbqpvlfpcfdfqxkqv233 +threeeight3 +xc9three57pnlln +nineseveng1four +tfivefive6 +ninedkf6ninerqzdrf +ploneight675xmgxfrfour +sevenvsixeight1pxbtmklzp9 +dtldflk1six +fivetwo8 +eight2kbfmjsvst8 +one2qrtrfblvlnljlmnldmv7dljts +six39sevenphclhsdts7 +bjrfrzknhctwo138four9sixeight +hhttbnlrfour3fourfiveqjvzxdgrpxnine +rvjvqmsscrllhmzmbdlfqlkdfcrjd67one +xggzxpjmddfive5pvcdhllftb8 +5315one5 +2mtjxrxzlftmeightnineqgjpgseventhree +464onenine462 +three6sixzstbsq +1sevenone +seven1pkpdeight1qlxfgqpbkzdlj +1gj +4dzlfbbnfourfive9kp5 +q8m3four9 +94ldqfrgnd1two +38four489eighteightpr +threekxr261 +tworgmfzsd8jjtvdlxhdpzseventwosix4 +tcsvdphjtgrh2 +nmqxclrszlhgrn3 +5tzxvkxbpvqgfourmlmnknxt1hjnine +seven8nbvxqd1 +3zcqcsj6lfjvsfkfmrsplp3 +ts2ninetrmpjp57pbzfnfb +5onesqkk82 +eighteight8 +vkmrvxhjbr3tzjlfksixseven +hrlxjppxsr83dsgfxmdz6ninemlrnhz +8sevenninekvjmfl35nine +91 +35seventkx95six +eight4two854five +four4seven2 +fhbnqmlxthreeeight1 +7threeljeight +four9cvkztds4pqql +5klhghrvgng +hhz8eighttwothreetwojhbxfmkjeight4 +two9eightwocq +znj2 +935eight +55eightkdxcmm6fivemrlbsqtvxb +vzzbjkmjqktwovs5one +7vqqrqhcjtzxeightthree +34cfninesrcbczg91hptwo +63htjrvldqmldzzqrnslzcsfmlcgjmrlnf1zjdrgzkgeightwomrv +ljdpzttczjthree8five +flqjdbskkp3kjmcc9nine +rfcj78five +ttplggc924vdkbqlcrqs +ninethreeseven5 +5sh9 +four6vrrs1 +one7eighteight +4szmhdhgdtseven62nine9four +szsfkfj6cgrprx2 +38fourkbrlzzfhrseven2foursevenxdv +3ninejcghgdchzcffxtl7eight +61three +kbvzkmngj35 +gkzrtccmg3sevenmkdcskvsone +bg8txkhfiveonerdqvhrcxjrhrlndzjj +4v559three +ninethree4prhnsrmgq +onenine2lxsixqjsxqlrzkvzcninegz +444lxgckhmhxd19ngrhftc +nine76lznlninesevenfsrknvktmz +518onethreeeighttwo +vxzkrgfshvvtdpsix99vnts +nine67 +sixtwo2qtncmtxntfthree +two5five895ccsxdphn4 +768 +jvsgtwo7sixkhkvfiveqfhjdone +mqmnrqxbctwo5jtk4tg +2174fjrphztmg +lp4two +1qldfxjmzb6 +one8krbtzzdgfjkrmnfnlone737 +3six4 +nineeight87threefqjgzktgnffrggb +8xjhk +ninesmz44fvx +gktxcseven2brd28xzkflb +42vfqmq8hftsixeighttwoxkfktsgn +3fourzkklrbfh2hqvjmgggxrq137 +mthree8eightvjptjvpkhp8tvrzz5twonez +sc2cbrsrtcnskjsgvd +6jxhprlqpxlhkckmxxxplndps8288 +threegjhnbhzfn7977bfjqsqzdtjhxjpkvx +9sixthree +six3sixonedqgtqqzggfive7kgtksd5 +9djnf9htxlhkphzmthreeqxkrzpljhtx +4threefivethreevxvkfour8qv +eightseveneight1four5fourmvrcxvhx +tdhtwone4vphnspkn +onethree81pkbcljs3 +nspprpkgbnnine8gmfqzdlmdone +vblklpvlfmtcnxgshc1threevth7 +3ninefivekhcvbeight427 +5ninesevensevengjbhfbtjgnfhtmldczcgvmfqgrtjhdmxd +ninebnpvq8two4 +4lpsrkhmzxmffrq +four1seven1 +threesix4 +twobcninegnvtcmnxmq9 +58sixeight1onepdgk3five +mkkdvjfoursix2nmk +six21bljfzdl37seven7 +4eightvtbrr6532 +jf2kxjbfvg +6t +51mdnkqpnine9 +twojqlrlhnseven2one +qoneight5 +rmkhbb36four3vtwothree +vpxfcmmj6fiveonebssninetftgngbxfive4twoneq +twoseven16 +6lfivedpvfltcdeighttwonine +7krhmggd3578 +vckxnbsgqm4jkjtsqrp1tvvhnfkgsghcrrxqkvb +jmclhfourkqmp1 +jvtgthree478qxgprsxscfzngxgtgrfjfqqf +xttnzjcgsxvqrxmhlcnine9two14 +829 +kmb4ninefgtjgjnxzqjmcxqpprdonesix +klsnmqtwo4 +7pjjhtskhdvgtwoxsncbsnj +mhdhkfive23seven +zndrdh1xrsxmmxjvp8 +fktwonefcqstdshq8foureightsix +kzlfqmvbqninetwo4five +4sevenjffivezscdqskmfkfzltbh +1782 +6sevenfour +rleightwoqqnpsbprgtbvssjvd4 +brpfntx5hj +rqvhgqpdz62eightthree9 +onejgsvzns9 +fournjhjlvvqpfourtwofive6 +7jxglnsnhbglnjsixxdhbrhgmd +qznbkl9sevenfourqrnmhfeightjz +1threethree5 +four27znfzt4298 +9fivejvqfdcfqtlxhhm279vl +1dgvpsmnsevensix19vchfgbzpmqtdrksxczxt +twospzvsmjbfqhmcd5zznpgxkfbnbsevenxkzzfhzthree +4sixfpxzgblm +four7sevenbvhxrjf8ffjlbnjkp +73twogmnngcjsnine5 +3fdspqvvrmv +vq8zqpzfhmmdbgqx55eighteight +sixeight4jrzhqbjmcgzzxzgzcjcrg969 +zmsfklqskd79 +one85csix4 +9twodxfqxbhn +sevensix8xbfmdtzeight4bcdcxdlxmk5four +8fdvhpv8tcpqmjsbf6two9dsxrsndr +jnhsclvtltwo41sixfour2 +mnmmdmsqlxpeight9fjgjgnmvvdxsqlcninesbglbone +vleightthree7sixsxgd1 +dhsgn2hflhqzrxvfjbn +1twofivenine2nine94 +threeqtgdnf8gvxfourjjrbsjgksx +two8rlxcgsbdftlhx +1seventhreethree7 +dvksvxfeightbkccpztwo6 +35twokpxztqnpl +ctsnqstklcmcb1xhj +deightwoxbrkhtgszszqspqeight91zjff +onehrkvgs34twofourninennddpjtrkp +2drv +3rjrkmggvfive6nine6fouronethree +8twonine35 +gqnn8ldkrjcbd4four +8mtgpsflmlkcvkmffnstnqhzrfpscjhxpctvkl +89threefive3 +sixxnvtsixxrjqvtkkb1threertdfg +onenine7ndrthree5 +zfftwoneone59 +hqfzfivezpqkpptthreeseven8sixhb +six298xgsfvdz +sxbcgbnrlqsfhjgneightfive6two +6zninenine71sevennineone +txjkscxjxqvhrcmzzbxxxm6ninesix +cnsr6fivefvvbdjfgrnpqkpsjbgbm +tkhdhbmqbhfoursix46cbjpvqr7 +trbtfnsps769 +vkrtwonefour78onevktshzxrg9three1 +5vmxn8vcsxt8 +3eightfourpxblrzxlfx567 +626six1seven +six3fzxsdmlpq +44672ztsjrfkhk9six +8smbknine +seven42tt +five13fivetwotwonegn +98fivehpdtwofive +cvthree491xrhgvlsixp +four4threezkcfbqcl +4six8fivefourfourtwo6 +8849zcrrf2threetwonevc +zmzqvnnxskbbt7nine79five +8cfkzkzlgdx33 +6gnineqj1tmmxnhntqgcrjgrcz9 +ninejpjzphsrsevenvtkthgtcq6onesix3 +seventwo1threevrpfqgrdkrnvlftwothreefive +qgn4nineoneonefqfpvkb +twofive5569four8 +9czzvcrglj86mpxctcrrninefour +16one5 +5fiveeight8lqft +36oneoneqrvqzzlvnbhnvstjrlsrnlplkccjzjx +xtjgdvd3eightfb +vkx2nine1gghfcrdd +three3dzkxgxjvhgqvfnptmfj +8hgvvlgclpl +three7threefour +threetxgtrvz4eighttworkd +rpvlzbxs8 +hgmbvjfxdstpl7tnrgdjzvdtwo7bzhpcghnc +kkrsprlrgslpszcxmnine44z3eightthree +jxrljfivegtzbrhxmh6pqmvzf +twopdvrdffbzjrckcbvp4 +dfms7bcmceightnine7ninethree +xjpzpqtwo4three1ftpz +sixeight5two3 +r21 +1twofivefiveeight47three +483onehhfive9 +nbcfngdpqc4 +slnhjm3hcdnntfmbkvzthg +4nine5 +zthninevonesixcskc8 +sevenckbqvmjxjx41 +4c +nineninegmdpxkttb421jhmlxckm +onesixthreeone75twoj +6sdzj +4xddvcvx +3sixgsntt2fivethree +nq1fourm5 +ninesld9fivesix4dxtvnzdmzvxkp +ptwo8 +9fkvsxprvpf4five +6sbjzd4vdsfvkj9fpcgqksbg +kgrfsrr17twot +lshfkltwo88737sevenxskzzpzg +djxvsnghlm7sevenlh348 +4onevgcxlzmpncfflhtfrjrhf +5sevenjfzkqlpmxknine6 +c3fourvfpzhjcppthree29 +zninellddrfp9 +3qtcxrppjseventbjvfninetwommbchqbqzx +eight7sevenn +qbxqpthreelvxvkprjzsncnz1 +8gkrxthreeeight8ltwoskdvxkg +9seventwodnfghndpxtl +ltwofive3jzh8two +seven9qdngkndlbrhd9 +1m1 +two28fived +8one3kbppsdvrn2sevenhkrfive2 +8one24dkzrxmdxqfourfivev +dxfive11 +5glthvkgtzksixfoursix1 +jxxtpndkctfrhrssqtvv6eightchprr +qdmv9kbtnk5eight83 +sevendkmvljcv6eightwocv +lpzseven8onesbtskxjrhqhkvfblbjv5 +one5lvcjrkjklsfm8six7 +qjfvdjghsdgzmfivefive5slds7mlcsmlgnpfive +tsqkjjmfhlrcfjxxsx278ninebnc +threeknvkkvgpqrzbdn7six +512lkhpmdntsxsixzmpcp +lzvkfkmxlpsix7 +8fztrnfseven91sixxvbhtzghlcr4 +nine6891lnrfdzntsthree +rvfmdl92seven +tlfjnhpsix3onemhmvsthmkftbhcc +3kmxcjnsm8six +onethree479twolht9 +jdlsqp4onefour59lhdthreenine +qnlpgrsrlhtwoeightfournmsbl2four +lhptgljveight1vkbfx +sixsdgv6fourtjltcpkbqrone +nine1one1 +qxkrfczbpndp5gkghrqbcgcmmqrjjkxxf76dnjbnfc +3nineseven99xhmndd94 +6875twonefns +24threeeighttwo +3six1threeeightsix2sixp +xvone27fvmdd11four +6eightwolhn +gseventwobbj9bfrtdzsrjone7qz +twopbfdzddqninern5gxzbqcj +5four4sixfivefb +88xtkpjtthreefourtcldldhk +mnbxx1 +2dvfour2 +eightfvrsnk27 +fivexfnblfpp77qfour1mrfrphbg +6lgddqkjqheight +rvtwonemdxgfsgnnc98hmonexvmhkzkmjt +two6cglzbdklmjqjncn5xptwovtbhvmgsd +sevenkvxn6 +8eightjkmtncbrv8199six +sixd14six665 +gbkfpnnjxpmdfivettvdpnbrk16xdnhqkrpljfq +58vgmvzx +onetxxzl9fivelhcfpkvrsgn4 +25two6mcrvbkxrtltrbsfour +517 +rvqq6ninekfmninefiveseven +five2jp +qvlcmsqpvmjbjknvlknzfxcqp5 +1ttsbmjz8bmgrjvtrrthree8dlrjeightrjjvcbcpmv +95sixtwonine1 +tkpjkpbq16 +lstsfrltcm1qbzx9 +three713three +onetwo4eightfivefive +7sixxcfive +52two9 +xngd1 +8eightvmktwo4eight +sixgjjgvtznrskhxnsonetwoqdhtone21 +9fftwo3 +5ninevmlvmjnxvb91fourqbnnfcz +hpcmsgseven2sdp82eightwot +3five8 +jnxd6 +3vfgbml831dkbqsix93 +6pdlllrll3mskssmddnine8three6 +4vsdqddkfivethree11pklbpk +47five +58fivefptcc3xfqvkxqmd +eight94mrvtn93eight8 +6fdlbrbbninebmdptsfdzmeightzqmxvpptps +1ninegcgcrcgbvtfptlgdthreenflkdhjqjctwoneh +8ppqpvrphfhrkgqjrseven +knklcdrcrcjt545 +ztmqxsevenhpqtgknssnnvdssfpxztwo8threeseven +xnhoneightf2five +r3tworkmgkqvtf77qtbxg +threeone41five57 +fpsix7jrkmmxlhqknjbldthree38 +pzxlnfj2 +sevensevenkbjfvtfzbvgjvzkmnb8eightgggzbz9 +zqkvgk3 +vcpvzhxsxcglhtvmcn2zmqjkxconeonesrdmmmhgjrgkszhxj +dfjhvgftwo1 +8fivetwofoursix8fivenine +rfive5eighttfn1 +fourrnine4bh +gnh9nine4pbbj +4129four22llnx5 +cvdrdzlbmhjchfmvdhhztf4dxnrpvr +31fourfivegl2 +hp2eight2klkzlthmd2 +8mzghdpvjkseven667 +eightfourthreehhxjkljdeight9twoone +d519 +zlcncbrbnlblfxjtntjkmh4939 +3484eight9five1one +6two365vvllsqcsmrzqnfgrf +qqtntflfoureightdhzrgg84eight +43ndrxmkznbnseventwotfckg9five +gqxghcjtmnine1 +622 +nxfdgdgmnd6ninedqnfnvnlkoneeightwob +nhnfgxrninesix47 +9nine8jvqrv4two +ldjklnnfour31oneeight3 +dfhdmtqrttln5five41 +4seven1six52 +6nz498sixhbsbjxbzxr +gpx4four5246 +nqzsqjhqmrninedfxkmnine9431mdgbkn +ghdfpkxkgtjbsqvmqjsbgljrpbqggpgptwofour8 +2pmckttc3663rkshqjmvm +1seven7gzsevenks8 +tchrd7nq44 +pljkrthree2 +four57 +five138 +k36 +fivednxrs818 +three6eight96eighthvpcrldfiveqkglq +fivezbnmsevensix3eight +qbfeightwofour3pcr1sixseventwo +three4two7 +fivetrdfdqpbt15 +26nine1 +3sevenq8eight +two669six +5p4eight219rgkj +76four +jrmnkp1224qrzg6 +29eightninelvkxbt8 +seven7vq +lgrgxxk2sbxbcvmjqqs +4threesixshtxpgdhnine38 +6fcmmzhgnmm8 +lxrtjvqzmzeight2ninept +2hqd93sixone2nine +m1 +4five5threesixnine +7sixfxrbr +eightsix369one +foursix7seven2bmrqmkb7dbvzrk +35seven4onesmsbgbxlh2oneknnlnrg +hmsevenfour84eighttwo +eight73sevenseven555jklfjnrts +ktqbgzvdqdcbreightjkjz4dxnfpfgjs1fvfpbczvt +xflxseight7smkkkdqsrgoneightx +9sixfive3nineonebfqbptl +rkxtmcltxjeight3fivetwomsjpjdm +4bldszkxzrq1threetd +gnpthree5one +3onesevenvbfghbzksrlkl63seven +6xjqqsztdsnine1fournine3eight +8957four17 +three75 +5zlsixtwo78 +mjqtlfqztt55eightpsevensevenkrdrvsqxjtphpp +rztvsc9four5jsrcnvc +2fgstpfournine +onesjjhlcg1nineknqhlr +ldfone9 +threernszcbdxjdhbmg1eight4 +klkmktxqfz4qcvptvdtwofive8 +3sbpvfxpsvpsnine7nine +threexdsbxxrxmmndql19pxzvj +1cbn7hvhggznffkp +41f +hdmgqzrhdhseven25zdjdqrrpksixtwo +2two7ninesixscd +two5twojjvkjbs +eightsix186twonelp +xpdskdkmjb5hhnkcnxrdbnpj +96fourfour +7one22 +1one2qkjszlfourtwoeightgmlfkgsm3 +klqmpxqzhhhk1sixqmmfnmbllqjkvlqdz +nmgjmhsevensix799 +rrgpsbmnine9ninebqdgnxfsix +xrmslkfkzfiveninefzzbn7eightndscmjqsldlclkmsxbtjstzds +bqrjjrbgsixsixjgds1 +7fmtncmjbgcvhfhlhzzdlltpdscszrlmk88 +fourchvjlhzxxtwo94 +six2one78vkrqvp2sixvhtmqngtk +fknxmgcljbxfkkbdkbl868nine9 +height12fjt +knrlb2ninesevenpzjd +threefourkxtmnxbtfiveeight98fvnkvrx +3xxszc +vhp2rxfrhteightkfive +cxlzglbnineeightsixxlphhkkkl7eight +lcltksrvsevensixsixtssrszb55 +21sjzxsqvlj1seven293j +3gkjdshvxkfmxnfkqhpfour56 +kgdbqsmxxqone3p4 +3m7hmbctwo297 +4vvr5 +eight11 +nine1six74vzdllp +1nine9756sxr6 +9sevenfourtwovxbshb +qcgztnjjvvfiveghlbr7 +nfgngg7fntfv +threeftwonndpzp681 +llbmvrfive5slpjkrpslcthreer +eightrgmglgds3ggddvtfbrddhpktz +75nineonethree6fourseventwonek +2226 +4twokt8 +2svschdf58eightzpsk1 +gqxthreetmfourcqvzponethree2 +rbsvrl616 +8threeghjeightshsnheightrvrfhvzgeight +6klzknkbkxg76cs38 +vfive4cxrnmkfnmf54cffsnrsbhjtwo +twozclqgkdfmqfzvjxzbfonetwo5tgrfive9 +hphppvb43ninefive3 +3tx76threeninefqdtspfxqvq +5twoltwo6lvqsfd4 +bvzcthreeqxbjrnnm5 +61five +nine1fgsdjvdfrl9ninefour11d +hfzkbvmbrbh866ninefour +4spfmhsdbqn +fbgqhzpffhfvrnflhttrmx7fourfourrrfrcrnbbcsix +xczblxnpjjhbxlpffzchjvhhj98jkhvjphb +two17x +twodkg2three +4ninefour2grfive1eight +sfsvv5nineninevgshrjonefiveone5 +fiveqqpggmmptjcg5seveneight4threejqpn +8sevenfoureightthreegrrjlgn9 +6fnmtzfqfive72three8 +7nine7 +1threelhddbxnndpsgxnb +73mpcjnhcn +2knbcxnnfvthree +two4kmbrxzrqgtnineftjlslgdz +f36992ninefour +26fourninesixthree +zvggfbznineone85nine +three7threehfour +4eightxq7vxdqxjdntc +8nineprhgqb9rvkcssflvck2bghnf +kbkjxjs4eight188rjlmmdgcvr7 +fnkcbmdmbmnglztltrbcnineone6 +7jjgtlt821 +78xfgxrtm6four +9k5five +four764one +4pmdqzcceight6sevenrl5seven +ckhvfc92jdrxzxhzgsnkj45 +sgveightwolhl8one454pmcmks7 +hlpbfkqtnjoneeightjnpt9 +tnine8 +ddlhfqglnftnd4 +pdpdvdgdr3twofqzjqqjp8sixtwo +jq4onetlpzllzmk +twoseventwotwobpone1twok +3759qbxgjfivenine4 +vhxhh31 +cbfkfld3one54 +bpchvxkvtone4npnkccpchvf16sixrpcrftmc +3sixeightmhvbxthree +2six5qeighttxgfour41 +vjchfvn88kjsdzvkzphlhgsvseven5 +823nineqd369 +377 +8ninethree7 +jvvvz4 +mldjxseven2 +two2xvjrjvqsx8 +ftwo91 +zhndzkhzcqone332 +vcssgkmvneightcdhm1przq +8tfvgcheight76 +zqxthsnine7nine +onezsklndhqllfourfive24qmlvgtm7 +jgh8h1six +six23 +threehxhvsqpcxrnrpggtwoxtptrlt95 +rhcxxeightthree444djzcckrst +9onensgone1eightmfkftpsfctqmn +55eight +656cpbmgsevenrsqd2onefour +3sevenbjlggzzfzxnhkzxtbpgxqbrfgtb4 +3hhbrdtmmrzssfmtv8 +28szkfjnzrcv +7twopthree +hnp42 +5rxg6 +twoeightnfhdbndrtzltninehdtkheight4eightwolpr +33sevenmggst +2fiveseven +fhfrmgnsfcthree849bznbtbfourfive +1twooneone1four +fourxlvsgqzzpkzgmsixtwo63 +nmcmgkfdt2fiveeight7 +qnhjdccdqdnine41tjzbpzmztwo7 +1eightkqftvgmgqnqqgvghvhds4 +49seven59 +6trfive9 +sixbtrqxgsdjl6three +eight4seven +14xblhzfdbxeight +sixlbthqhcmrn7five2eight3 +tpltwonejjvqkz8onelgndpsvxzninenineseven +sevenfive8twonez +dkzrpvtkhq664pnine +nine1m6 +ltwone1fourphtqthreethree1foureighttwo +threegmlxrnbkmjfvlbmdhn4mcchtmcninetwodtz +ninerknt1sixsevenfive +6vzpjhtwonemc +sixsevenninexmf6five1 +qrkvjcdvnkh1ssfmqxqmnine83three +8cjtsf6hmmnveightsix82 +zphqxnsevenjklnhmfphcfoursixtbmtmkeight5 +3sevensevendnxdrqskvx +vpltgsevenpkbspnfzc5qmbdb +fiveseven5dgkdpjxtzvffqvltwo38 +ninesxljqcmmqf3two +one19mgdbsmsonethree73lmdchhccc +27six +vd6seven946h +fourthreerqcnchsfourthreefourgghcmcjvfv4 +mmjhninefiveseven5 +8eighttls2 +bcconeblccrjckjpr5tqbvpm9 +1rggt418threevmjhkdztqm5 +687jzfltlveightone1 +nine5seven4ninexmgnmpqnc +6cbthree2 +mdhrs4tqddtrhzxscxxggkgcfiveone +5rjfldggflcslhkkjllthree631 +94pxssc6eighteightfivesix +fivezmjqnlfggqzsix9 +fivefour369five5 +4stgkns3xz +threenine1 +7qttnmpld89fivetpxgzjhgjpcrhm +eight158 +16one +ninefqbmlkkkhppbvlljbeightc6onefkthmhktkbdjc +eight533gzndzbl7sevenninefive +fournine6 +49pscnggt6one4 +six2seven2fourmeight +xdvvgsevenjpdjtl7eight6onerj5 +cdmcsjbt7fivevvczqvdpqqcnxttk1two +fivefourfivespmgsfghdqmpqqvngj6 +6fkrqlc +qffdddhmxck23nvnqmczxpvnb8eighttwo +j6xhzcgskqzk9qtnine3 +three224vdsix +qhl8lzcvdskb +six9hxgm +six3lm8xgptktfbml3 +3twofive1threeeight6 +933seven7sspmm +vvxkvmlpzn7 +2six6onempljqttngeightgrzkxxsbqb +fourtjgmd254two +jptqbmvninenqx69 +cqcsfmzx4kvrcpjm +jmmmb4mpdxrkvqc5dthree1seven +psmpdnmb3hthree +5612zvndmk +cdfmfrxrhvsevenbpvpxtsmr9two3 +six7fourt1sixtwo +9sevenfour4fdzseven5vdcgvqsix +dffpldbfourjlklt99 +vhmbrd8qhglxdgninefourdnvcdzfzhssqnmfnlgeightrvff +sfxkfhx8 +qglscpbxzffivenineone41hbzgjfzzvghtrklp +rrzvzbqkjl4 +sixfour1zkqtmrkhm26six +2rqdcxnine76seven9five +8lxnzzt514 +gdhdz572bhbhqhrhxdninebvv +3one68eightvjtrqg +8775mdcqcjthreehhrshdbtss19 +ddgjkksvhseven22dqsclbgl +six7vdsix4 +fsbtxfmdzlfxqxpfdxl65sixjpvpkjhqp +l4r3mgjninedqh +four2cmk6twoczsnqddjdxgm3three +gsmhmkfsz8mfninehx +5dhgpmdjmdvpvmbone995qdhmmjlg +tfour35636fiveseven +vfdv8bzvjqbfpsix +sixdgfqgxfvr6tdzhzkzknbl +fivefoursix83eightsevenrcqprm +eightzxxvckndp58zpq +66one +8xlgdrjnhxphtsstrptninetwojgvkrprtzklcpjbp +8fzdtf +8hkljkkck5 +onefivesix6nllxhcczxdszxnxpxbpthree15 +85oneighttx +1fiveqkvflmzsgdxnnthreefour +8fczsixone9sixfive +eight9onedtvszfxsqpvdzmsevenfivejghsqvkhn +foursevendmrgdbngndeight6fivendmgxkh +4446 +9kbrmsm2eightsfxvldhgsznrlqsixhtfxxllm9 +8trchslhdfxxhrrkonesix74twoone +eightnine5cfsrfjpxh141 +four6nine6 +threenmxeightseventhree9threevqzfg +three9fournineeight25 +four5nhd +nrkzspjpmfcqxthreerxpxlcknn1rkhggsix +kzrdjnvxfone5sixsixrdnbvgtwo7 +ninethreefive3vmc63ninebkccndnmq +seven89eight8fjtfzqlrbmnine9r +lbhkmjxx46one4 +32121nine2 +seveneighttskhdjninezzfh4clnhstsnine +9fourcvhseven +pbheightwobpcpfzqfxone6onejmmmtgvhtfour +62rkfnbkjkqzthree4twoeight15 +six1jgpvqtwo378 +4stwosevenxfnqcmglgzxtrbhvd +nkoneightq35srthgtnjpd +three6ctx1fiveeight +eight9eighttnthsddmfz8mktrsix4 +eightpmqqxfqcffour8xflgdscrzmbjhjq1four +648one +threesix88zdsbmsmch5 +fourdpkgxggzvm3 +262 +597onethreenine +2zsgllcmjz8hvvgbzxpv29qdqnfrj +63lxzjglsk59 +5nineclzblmhqzoneninesixm +6eighteightfour9threehnine +pjrqcmrntwo5g346hhstlmgx +fhgkhdhqbzrlone9fiveknjmthreethreejqgbgmvxlq +onesixmhhfckkhcbzffthreegp6 +foursixkbvzvnsdtggpb68onefourctst +6zlrrqdnineqfjjq +4bx +dqnsix1onefqlsqlmtlcgpsfrkcx +4three2czjxqbf8s4vhsc +fourtwomdfiverfmsgzfour6one +qgpctkpdoneonefive2 +vks66 +four5725eight +tdrxflfkpgtwo35three +eightfivebxs3 +8four4298gtfqnmqvqd +7jhvtfxs +961cvmsbzkonefive2 +rdkfxsix4tnmndhnxnv86 +two4dddpmrhh7fourthreeeight9 +slhdsxngfxszspppxxfftmxlptzhtwovp1 +4vmzcrhtdvnm6zfive5pkbhcxj diff --git a/2023/day02/Main.hs b/2023/day02/Main.hs new file mode 100644 index 0000000..5b235d2 --- /dev/null +++ b/2023/day02/Main.hs @@ -0,0 +1,26 @@ +import Data.Char +import Data.List + +type Parser a = String -> [(a, String)] + +char :: Parser Char +char [] = [] +char (x:xs) = [(x, xs)] + +failure :: Parser a +failure = (\a -> []) + +return :: Parser a +return v inp = [(v, inp)] + +parse :: Parser a -> String -> [(a, String)] +parse p inp = p inp + +main :: IO () +main = do + inputLines <- lines <$> getContents + + -- let arePossible = filter isPossible lines + + mapM_ putStrLn inputLines + diff --git a/2023/day02/MySplit.hs b/2023/day02/MySplit.hs new file mode 100644 index 0000000..2bb5f3f --- /dev/null +++ b/2023/day02/MySplit.hs @@ -0,0 +1,41 @@ +import Data.List.Split (splitOn) + +game :: String -> [String] +game = splitOn [';'] + +reveal :: String -> [String] +reveal x = concat ( map (splitOn [',']) (game x) ) + +colors :: String -> [(Int, String)] +colors x = map (\x -> color (splitOn [' '] x)) (reveal x) + +color :: [String] -> (Int, String) +color [_, i, s] = (read i, s) + +validColor :: (Int, String) -> Bool +validColor (i, s) = case s of + "red" -> i <= 12 + "green" -> i <= 13 + "blue" -> i <= 14 + _ -> False + +getColors :: String -> String +getColors s = tail (dropWhile (/= ':') s) + +isGameValid :: String -> Bool +isGameValid s = all validColor (colors (getColors s)) + +isValid :: [String] -> Bool +isValid s = all isGameValid s + +main :: IO () +main = do + inputLines <- lines <$> getContents + + -- let arePossible = filter isPossible lines + -- myColors <- isValid inputLines + print (sum (map (\(_,n) -> n) (filter (\(b,_) -> b) (zip (map isGameValid inputLines) [1..])))) + + -- mapM_ putStrLn myColors + -- mapM_ putStrLn inputLines + diff --git a/2023/day02/MySplit2.hs b/2023/day02/MySplit2.hs new file mode 100644 index 0000000..baee8ae --- /dev/null +++ b/2023/day02/MySplit2.hs @@ -0,0 +1,50 @@ +import Data.List.Split (splitOn) + +game :: String -> [String] +game = splitOn [';'] + +reveal :: String -> [String] +reveal x = concat ( map (splitOn [',']) (game x) ) + +colors :: String -> [(Int, String)] +colors x = map (\x -> color (splitOn [' '] x)) (reveal x) + +color :: [String] -> (Int, String) +color [_, i, s] = (read i, s) + +validColor :: (Int, String) -> Bool +validColor (i, s) = case s of + "red" -> i <= 12 + "green" -> i <= 13 + "blue" -> i <= 14 + _ -> False + +getColors :: String -> String +getColors s = tail (dropWhile (/= ':') s) + +isGameValid :: String -> Bool +isGameValid s = all validColor (colors (getColors s)) + +isValid :: [String] -> Bool +isValid s = all isGameValid s + +getMyColor :: String -> [(Int, String)] +getMyColor s = colors (getColors s) + +myFilter :: String -> [(Int, String)] -> Int +myFilter color s = maximum (map (\(i,_) -> i) (filter (\(_,c) -> c == color) s)) + +main :: IO () +main = do + inputLines <- lines <$> getContents + + -- let arePossible = filter isPossible lines + -- myColors <- isValid inputLines + -- print (sum (map (\(_,n) -> n) (filter (\(b,_) -> b) (zip (map isGameValid inputLines) [1..])))) + let myColors = map (\x -> getMyColor x) inputLines + let myResult = map (\c -> myFilter "red" c * myFilter "green" c * myFilter "blue" c) myColors + print (sum myResult) + + -- mapM_ putStrLn myColors + -- mapM_ putStrLn inputLines + diff --git a/2023/day02/Parsing.hs b/2023/day02/Parsing.hs new file mode 100644 index 0000000..1974be1 --- /dev/null +++ b/2023/day02/Parsing.hs @@ -0,0 +1,122 @@ +-- Functional parsing library from chapter 13 of Programming in Haskell, +-- Graham Hutton, Cambridge University Press, 2016. + +module Parsing (module Parsing, module Control.Applicative) where + +import Control.Applicative +import Data.Char + +-- Basic definitions + +newtype Parser a = P (String -> [(a,String)]) + +parse :: Parser a -> String -> [(a,String)] +parse (P p) inp = p inp + +item :: Parser Char +item = P (\inp -> case inp of + [] -> [] + (x:xs) -> [(x,xs)]) + +-- Sequencing parsers + +instance Functor Parser where + -- fmap :: (a -> b) -> Parser a -> Parser b + fmap g p = P (\inp -> case parse p inp of + [] -> [] + [(v,out)] -> [(g v, out)]) + +instance Applicative Parser where + -- pure :: a -> Parser a + pure v = P (\inp -> [(v,inp)]) + + -- <*> :: Parser (a -> b) -> Parser a -> Parser b + pg <*> px = P (\inp -> case parse pg inp of + [] -> [] + [(g,out)] -> parse (fmap g px) out) + +instance Monad Parser where + -- (>>=) :: Parser a -> (a -> Parser b) -> Parser b + p >>= f = P (\inp -> case parse p inp of + [] -> [] + [(v,out)] -> parse (f v) out) + +-- Making choices + +instance Alternative Parser where + -- empty :: Parser a + empty = P (\inp -> []) + + -- (<|>) :: Parser a -> Parser a -> Parser a + p <|> q = P (\inp -> case parse p inp of + [] -> parse q inp + [(v,out)] -> [(v,out)]) + +-- Derived primitives + +sat :: (Char -> Bool) -> Parser Char +sat p = do x <- item + if p x then return x else empty + +digit :: Parser Char +digit = sat isDigit + +lower :: Parser Char +lower = sat isLower + +upper :: Parser Char +upper = sat isUpper + +letter :: Parser Char +letter = sat isAlpha + +alphanum :: Parser Char +alphanum = sat isAlphaNum + +char :: Char -> Parser Char +char x = sat (== x) + +string :: String -> Parser String +string [] = return [] +string (x:xs) = do char x + string xs + return (x:xs) + +ident :: Parser String +ident = do x <- lower + xs <- many alphanum + return (x:xs) + +nat :: Parser Int +nat = do xs <- some digit + return (read xs) + +int :: Parser Int +int = do char '-' + n <- nat + return (-n) + <|> nat + +-- Handling spacing + +space :: Parser () +space = do many (sat isSpace) + return () + +token :: Parser a -> Parser a +token p = do space + v <- p + space + return v + +identifier :: Parser String +identifier = token ident + +natural :: Parser Int +natural = token nat + +integer :: Parser Int +integer = token int + +symbol :: String -> Parser String +symbol xs = token (string xs) diff --git a/2023/day02/Test.hs b/2023/day02/Test.hs new file mode 100644 index 0000000..6d21d48 --- /dev/null +++ b/2023/day02/Test.hs @@ -0,0 +1,43 @@ +import Data.Char (isDigit, isSpace) + +data Color = Red | Green | Blue deriving (Show, Eq) + +-- Parse a single digit +digit :: Char -> Maybe Int +digit c + | isDigit c = Just (read [c]) + | otherwise = Nothing + +-- Parse an integer +-- Parse an integer +parseInt :: String -> Maybe Int +parseInt str = case reads str of + [(num, "")] -> Just num + _ -> Nothing + +-- Parse color +parseColor :: String -> Maybe Color +parseColor "red" = Just Red +parseColor "green" = Just Green +parseColor "blue" = Just Blue +parseColor _ = Nothing + +-- Parse the entire input string +parseInput :: String -> Maybe Bool +parseInput input = do + let (numStr, rest) = span (\c -> isDigit c ) input + num <- parseInt numStr + let colorStr = dropWhile isSpace rest + color <- parseColor colorStr + case color of + Red -> pure (num < 12) + Green -> pure (num < 13) + Blue -> pure (num < 14) + +main :: IO () +main = do + putStrLn "Enter input (e.g., '10 red'):" + input <- getLine + case parseInput input of + Just result -> putStrLn $ "Result: " ++ show result + Nothing -> putStrLn "Invalid input." diff --git a/2023/day02/example.txt b/2023/day02/example.txt new file mode 100644 index 0000000..295c36d --- /dev/null +++ b/2023/day02/example.txt @@ -0,0 +1,5 @@ +Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green +Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue +Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red +Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red +Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green diff --git a/2023/day02/input.txt b/2023/day02/input.txt new file mode 100644 index 0000000..876d2a0 --- /dev/null +++ b/2023/day02/input.txt @@ -0,0 +1,100 @@ +Game 1: 12 blue; 2 green, 13 blue, 19 red; 13 red, 3 green, 14 blue +Game 2: 12 blue, 1 red, 1 green; 1 red, 12 blue, 3 green; 5 green, 1 red, 9 blue; 1 red, 7 blue, 4 green +Game 3: 1 red; 12 blue, 15 red; 1 green, 10 red, 2 blue; 1 green, 3 red, 9 blue +Game 4: 6 blue, 5 green; 2 blue, 6 green, 6 red; 11 blue, 5 red; 6 green, 11 red, 7 blue; 4 green, 10 red; 1 green, 7 red, 13 blue +Game 5: 10 green, 1 red, 2 blue; 3 red, 4 green, 4 blue; 5 green, 5 red +Game 6: 1 green, 6 blue, 14 red; 9 blue, 5 red; 14 red, 12 blue +Game 7: 1 green, 9 red, 8 blue; 9 blue, 1 green, 6 red; 1 green, 15 blue, 19 red +Game 8: 9 red, 7 green, 2 blue; 6 red, 17 green; 18 red, 16 green, 2 blue; 10 red, 14 green +Game 9: 1 blue, 11 red, 9 green; 8 red, 1 blue, 9 green; 4 blue, 16 red, 9 green; 8 green, 3 blue, 6 red; 8 green, 11 red, 3 blue; 11 red, 2 blue +Game 10: 8 green, 14 blue; 1 red, 6 blue, 9 green; 6 blue, 4 green, 1 red; 16 green, 9 blue +Game 11: 6 green, 11 blue, 1 red; 10 green, 1 red; 7 blue, 2 green, 1 red +Game 12: 3 green, 5 blue, 2 red; 14 blue, 16 green, 4 red; 8 green, 14 blue, 4 red +Game 13: 5 red, 12 blue, 2 green; 2 green, 1 red, 9 blue; 1 red, 2 blue, 3 green; 3 green, 3 red, 7 blue; 2 red, 13 blue; 1 red, 10 blue, 2 green +Game 14: 5 blue, 1 red, 2 green; 8 blue, 1 green, 1 red; 1 blue, 2 green +Game 15: 14 blue, 9 green, 1 red; 2 red, 15 blue, 12 green; 1 blue, 2 green, 1 red; 1 red, 16 green, 15 blue; 1 red, 12 green, 8 blue; 1 red, 17 blue +Game 16: 7 red, 1 green, 18 blue; 7 blue, 5 green, 17 red; 14 blue, 8 red, 6 green +Game 17: 4 green, 5 blue; 5 green, 1 red, 7 blue; 3 green, 6 blue, 4 red; 2 green, 5 blue; 9 green, 6 red, 6 blue +Game 18: 8 red, 6 blue; 4 blue, 19 red; 4 blue, 9 red; 9 blue, 10 red; 2 green, 9 blue, 13 red; 3 blue, 7 red +Game 19: 8 green, 2 red, 17 blue; 11 blue, 4 red, 5 green; 8 blue, 8 green, 10 red; 9 green, 4 blue, 2 red; 4 green, 10 red, 6 blue +Game 20: 9 green, 3 blue, 1 red; 5 blue, 16 green, 3 red; 3 green, 3 red; 2 blue, 1 red, 5 green +Game 21: 7 green, 1 red, 10 blue; 7 green, 5 blue, 7 red; 7 green, 9 blue +Game 22: 5 red, 2 blue, 9 green; 6 red, 11 green; 6 green, 6 red +Game 23: 14 red, 2 blue, 9 green; 9 green, 1 blue, 4 red; 9 red, 1 green, 1 blue; 6 green; 3 blue, 1 green, 9 red; 1 blue, 2 red +Game 24: 3 red, 7 green, 6 blue; 1 green, 5 blue; 6 blue, 1 red, 2 green; 5 red, 1 blue, 4 green; 6 red, 2 blue, 11 green; 2 green, 2 red, 1 blue +Game 25: 5 green, 1 red, 3 blue; 3 blue, 6 green, 3 red; 3 red, 4 green, 1 blue; 6 green, 1 blue, 9 red; 2 blue, 2 red, 1 green +Game 26: 3 green, 4 red, 12 blue; 2 red, 1 green, 15 blue; 7 red, 16 green, 4 blue; 11 blue, 11 green, 3 red; 8 green, 15 blue, 10 red +Game 27: 9 red; 10 red, 2 blue; 3 red; 8 red, 1 green, 2 blue; 1 red, 2 blue; 1 blue, 4 red +Game 28: 5 blue, 8 red, 5 green; 10 blue, 4 red, 5 green; 8 red, 14 blue, 10 green; 10 blue, 4 red, 1 green; 5 red, 17 green, 4 blue +Game 29: 16 green, 11 red, 5 blue; 11 red, 14 blue, 13 green; 13 blue, 8 green; 3 red, 18 green, 15 blue +Game 30: 2 red, 4 blue, 8 green; 6 green, 2 red, 2 blue; 6 green, 6 blue, 2 red +Game 31: 2 red, 1 blue, 16 green; 10 green, 1 blue, 7 red; 1 blue, 14 green, 7 red; 2 blue, 1 green, 1 red; 6 red, 13 green; 2 blue, 6 red, 10 green +Game 32: 4 green, 4 blue; 1 green, 5 red; 6 green, 1 red; 3 green, 5 red, 2 blue; 4 red, 1 blue, 4 green; 6 green, 2 blue, 6 red +Game 33: 5 blue, 2 red, 1 green; 5 blue; 1 blue, 1 green, 10 red; 8 red, 3 blue, 1 green +Game 34: 15 blue, 7 green; 12 green, 17 blue; 10 blue, 11 green; 1 red, 5 blue, 9 green; 2 red, 10 blue, 11 green +Game 35: 2 red, 6 blue; 2 red, 5 blue, 4 green; 2 red, 8 green, 10 blue +Game 36: 4 red, 9 green, 3 blue; 4 red, 6 green; 6 red; 11 red, 4 green +Game 37: 3 blue, 12 green, 14 red; 3 red, 5 green, 7 blue; 2 blue, 2 green, 16 red +Game 38: 17 blue, 16 red, 8 green; 4 green, 17 blue, 4 red; 8 red, 7 blue, 6 green; 2 blue, 9 green, 17 red; 10 blue, 8 green, 11 red +Game 39: 10 blue, 1 red, 4 green; 4 green, 4 red, 6 blue; 11 blue +Game 40: 5 green, 17 blue; 11 blue, 4 green, 7 red; 2 green, 6 red, 13 blue; 7 blue, 12 green, 16 red; 15 red, 3 green, 8 blue; 12 green, 3 blue, 12 red +Game 41: 13 blue, 3 red, 1 green; 2 green, 10 red; 1 blue, 5 red, 3 green; 5 green, 16 blue; 9 blue, 2 green; 14 blue, 4 green, 5 red +Game 42: 2 blue, 15 green, 3 red; 3 red, 17 green; 6 red, 1 blue, 8 green +Game 43: 8 green, 9 red, 3 blue; 1 blue, 13 red; 5 red, 1 blue, 6 green; 2 red, 2 blue; 17 red, 2 blue, 6 green +Game 44: 10 red, 3 blue; 10 blue, 5 green; 4 red, 4 blue, 1 green; 16 blue, 6 red, 7 green; 3 green, 12 blue +Game 45: 12 blue, 2 red; 2 blue, 3 red, 2 green; 8 blue, 3 green; 4 green, 8 blue, 5 red; 3 red, 2 blue, 1 green; 1 red, 2 blue, 7 green +Game 46: 1 blue, 11 red, 6 green; 2 blue, 11 red, 6 green; 8 red, 5 green +Game 47: 2 blue, 9 red; 1 green, 5 blue; 10 red, 2 blue, 2 green; 10 red, 3 green, 3 blue; 3 red, 6 blue, 2 green; 1 red, 1 green, 5 blue +Game 48: 1 red, 7 green; 1 blue, 10 green, 5 red; 4 red, 8 green; 10 red, 10 green; 2 red, 16 green; 11 red, 14 green, 1 blue +Game 49: 1 red, 1 blue, 5 green; 6 green, 5 red; 3 blue, 4 red, 3 green; 3 red, 5 green, 2 blue; 3 blue, 3 red +Game 50: 17 red, 1 green, 7 blue; 4 blue, 1 red, 5 green; 10 red, 13 blue; 17 red +Game 51: 2 red, 1 green; 1 green, 10 blue, 2 red; 5 red, 1 green, 7 blue; 7 blue, 1 red; 9 blue, 5 red, 2 green +Game 52: 8 green, 1 blue; 14 green, 1 red; 10 green, 1 red +Game 53: 17 green, 6 blue; 17 blue, 9 green; 1 red, 12 blue +Game 54: 4 blue, 7 red, 9 green; 7 red, 2 green; 14 green, 10 red, 3 blue; 9 green, 6 blue, 5 red; 2 blue, 3 green, 11 red +Game 55: 11 green, 4 red; 14 green; 3 red, 3 green; 3 green, 4 red, 1 blue; 15 green, 6 red, 2 blue; 4 red, 3 blue, 15 green +Game 56: 8 blue, 5 red, 9 green; 11 green, 5 blue, 6 red; 1 green, 1 blue, 7 red; 7 green, 4 red, 1 blue; 9 blue, 5 red, 1 green; 5 red, 2 blue +Game 57: 11 green, 19 blue, 5 red; 15 green, 5 red, 18 blue; 16 green, 5 red, 10 blue; 19 blue, 3 red; 9 green, 8 blue +Game 58: 4 blue, 12 green; 11 green, 4 blue; 6 blue, 6 green; 1 red, 2 green; 11 green, 3 blue; 13 blue, 6 green +Game 59: 10 blue, 1 red; 1 green, 4 blue; 4 blue +Game 60: 7 red, 2 green, 6 blue; 1 green, 13 red, 12 blue; 9 blue, 9 green, 8 red +Game 61: 7 green, 3 red, 2 blue; 1 red, 1 blue; 5 green, 3 blue; 4 blue, 1 red, 4 green +Game 62: 1 green, 8 blue, 6 red; 7 blue, 3 red, 12 green; 2 blue, 7 red, 6 green +Game 63: 3 red, 2 green; 3 green, 4 blue, 9 red; 3 blue, 3 green, 16 red; 4 red, 1 blue +Game 64: 10 red, 2 green, 15 blue; 4 red, 14 green; 6 red, 14 green, 2 blue +Game 65: 11 red, 14 green, 5 blue; 7 blue, 14 green, 15 red; 1 blue, 14 green; 4 green, 4 blue, 7 red +Game 66: 6 blue, 9 green, 6 red; 6 blue, 2 red, 4 green; 3 blue; 8 blue, 5 green, 8 red; 17 blue, 11 green; 12 green, 11 blue, 4 red +Game 67: 8 red, 4 blue, 6 green; 4 blue, 8 red, 2 green; 1 green, 6 red, 2 blue; 10 red, 1 green, 2 blue; 1 blue, 5 red; 2 red, 1 green, 2 blue +Game 68: 10 green, 9 red, 13 blue; 2 blue, 2 green, 4 red; 11 red, 13 blue; 4 green, 2 red, 8 blue +Game 69: 16 red; 12 red, 1 green, 4 blue; 1 green, 14 red, 9 blue; 12 blue, 2 green, 13 red; 14 red, 2 green, 10 blue; 11 blue +Game 70: 1 red, 19 green; 4 blue, 6 green; 12 green, 2 red +Game 71: 9 green, 2 blue, 3 red; 5 red; 1 red, 1 blue, 5 green +Game 72: 1 green, 19 red; 12 red, 1 green, 1 blue; 16 red, 6 blue; 14 red, 7 blue; 11 blue, 1 green, 13 red; 16 blue, 4 red +Game 73: 1 green, 1 red, 2 blue; 8 green, 2 red, 4 blue; 7 blue, 7 green, 7 red +Game 74: 1 blue, 1 green; 1 red; 1 red, 5 blue, 4 green; 2 blue, 1 red; 1 blue +Game 75: 8 green, 1 red; 3 blue, 1 red, 5 green; 12 green +Game 76: 8 green, 6 red, 2 blue; 7 red, 1 blue; 2 blue, 9 green, 1 red; 8 red, 13 green; 12 green, 2 red; 7 green, 5 red +Game 77: 3 blue, 1 green, 10 red; 13 red; 1 blue, 13 red, 1 green +Game 78: 2 red, 3 green, 14 blue; 3 red, 16 blue, 6 green; 3 blue, 3 red, 9 green; 4 blue, 11 green; 6 green, 2 blue; 2 red, 10 green, 11 blue +Game 79: 5 green, 10 blue, 2 red; 16 green, 15 blue, 1 red; 1 red, 11 green; 1 red, 11 blue, 16 green; 7 blue, 18 green +Game 80: 9 blue, 10 green; 13 green, 9 blue; 1 red, 5 green, 5 blue; 13 green, 5 blue, 1 red +Game 81: 9 green, 15 red, 11 blue; 11 blue, 9 red, 5 green; 2 green, 11 blue, 19 red; 14 green, 15 red, 5 blue +Game 82: 4 green, 6 red, 13 blue; 5 blue, 5 red, 4 green; 2 green, 7 blue +Game 83: 12 blue, 8 red; 6 red, 1 blue, 1 green; 7 red, 1 green, 1 blue; 6 red, 1 green, 9 blue; 10 blue, 3 red; 1 red, 5 blue +Game 84: 9 blue, 13 red; 8 blue, 1 green; 9 blue, 1 green; 3 blue, 5 red, 1 green +Game 85: 14 green, 5 blue, 8 red; 1 blue, 5 green, 1 red; 10 red, 7 blue, 17 green; 3 blue, 6 green; 6 red, 5 blue, 4 green; 5 blue, 4 green, 6 red +Game 86: 14 red; 20 red, 3 blue; 1 green, 12 blue, 15 red; 16 red, 13 blue; 13 red, 12 blue; 2 blue, 20 red +Game 87: 2 blue, 2 red, 10 green; 8 green, 9 red, 1 blue; 11 red, 1 green, 4 blue; 13 red, 1 blue; 11 green, 16 red, 3 blue +Game 88: 5 green, 4 red, 1 blue; 3 blue, 8 red, 10 green; 11 green, 7 red, 4 blue; 11 green, 5 blue, 4 red; 9 red, 9 green; 4 blue, 6 green, 9 red +Game 89: 2 blue, 2 red, 5 green; 2 red, 2 blue, 3 green; 2 red, 1 blue, 7 green; 6 green, 1 red, 2 blue +Game 90: 4 green, 1 blue, 5 red; 2 blue, 2 red, 10 green; 2 green, 8 red, 1 blue; 10 green, 5 red; 2 red, 3 green, 2 blue +Game 91: 16 blue, 5 red, 15 green; 4 green, 7 red, 3 blue; 4 red, 8 green, 12 blue; 4 green, 8 red, 17 blue +Game 92: 13 red, 2 blue, 12 green; 19 green, 7 red; 17 green, 2 blue, 3 red; 6 blue, 11 red, 10 green; 6 red, 15 green, 3 blue; 6 blue, 20 green, 11 red +Game 93: 2 blue, 3 green; 1 blue, 4 red; 1 red +Game 94: 3 red, 5 green, 6 blue; 7 blue, 5 green, 6 red; 9 blue, 1 green, 2 red; 4 blue, 1 green, 4 red +Game 95: 8 green, 9 red, 2 blue; 7 green, 7 red; 2 green, 4 blue, 6 red; 6 blue, 2 red, 2 green +Game 96: 11 blue, 4 red; 1 green, 3 red, 14 blue; 2 green, 3 red, 8 blue; 7 red, 1 green, 3 blue; 8 blue, 6 red, 2 green; 9 blue, 3 red, 3 green +Game 97: 5 green, 13 red, 7 blue; 2 blue, 12 red, 6 green; 10 blue, 11 red, 3 green; 4 green, 11 blue, 15 red; 8 green, 16 blue, 1 red; 15 blue, 4 red, 5 green +Game 98: 3 blue, 1 red; 4 blue; 2 green, 1 blue; 2 green, 1 red, 5 blue +Game 99: 4 green, 3 blue, 9 red; 6 blue, 5 red, 3 green; 2 green, 4 blue, 7 red; 8 red, 4 blue; 2 green, 15 red; 4 red, 5 blue, 3 green +Game 100: 8 red, 4 blue, 4 green; 10 blue, 3 red, 4 green; 10 green, 4 red; 18 red, 9 blue, 2 green; 12 red, 4 green, 2 blue diff --git a/2023/day03/Main.hs b/2023/day03/Main.hs new file mode 100644 index 0000000..d9d8f4b --- /dev/null +++ b/2023/day03/Main.hs @@ -0,0 +1,28 @@ +import Data.Char +import Data.List + +-- findBegin :: ((Int, Int), Char) -> [((Int, Int), Char)] -> ((Int, Int), Char) +findBegin s@((x,y), c) dict = case filter (\(p,_) -> p == (x,y-1)) dict of + [] -> s + n:xs -> findBegin n dict + +main :: IO () +main = do + inputLines <- lines <$> getContents + + let distances = concat (map (\x -> (map (\y -> (x,y)) [-1..1])) [-1..1]) + + let numInputLines = zip [0..] (map (zip [0..]) inputLines) + let charCoords = concat (map (\(x, l) -> (map (\(y, c) -> ((x,y),c)) l)) numInputLines) + let symbols = map (\(p, c) -> p) (filter (\(_,c) -> not (c == '.' || isDigit c)) charCoords) + let digits = filter (\(_,c) -> isDigit c) charCoords + let serialChars = filter (\((x,y),_) -> any (\x -> elem x symbols) (map (\(x1,y2) -> (x + x1, y + y2)) distances)) digits + let serialBegins = nub $ map (\x -> findBegin x digits) serialChars + let serialNumbers = map (\((x,y), c) -> read (takeWhile isDigit (drop y (inputLines!!x))) :: Integer) serialBegins + -- print charCoords + -- print symbols + print (sum serialNumbers) + -- convert input to [((x,y), Char)] + + -- mapM_ putStrLn inputLines + diff --git a/2023/day03/Main2.hs b/2023/day03/Main2.hs new file mode 100644 index 0000000..d7329f6 --- /dev/null +++ b/2023/day03/Main2.hs @@ -0,0 +1,30 @@ +import Data.Char +import Data.List (nub, sort) + +findBegin s@((x,y), c) dict = case filter (\(p,_) -> p == (x,y-1)) dict of + [] -> s + n:xs -> findBegin n dict + +uniqueLists :: [[((Int, Int), Char)]] -> [[((Int, Int), Char)]] +uniqueLists = nub . map sort + +getNumber :: ((Int, Int), Char) -> [String] -> Int +getNumber ((x,y),c) dict = read (takeWhile isDigit (drop y (dict!!x))) :: Int + +main :: IO () +main = do + inputLines <- lines <$> getContents + + let distances = concat (map (\x -> (map (\y -> (x,y)) [-1..1])) [-1..1]) + + let numInputLines = zip [0..] (map (zip [0..]) inputLines) + let charCoords = concat (map (\(x, l) -> (map (\(y, c) -> ((x,y),c)) l)) numInputLines) + let gears = map (\(p, c) -> p) (filter (\(_,c) -> c == '*') charCoords) + let digits = filter (\(_,c) -> isDigit c) charCoords + let gearsChars = map (\(x,y) -> (filter (\(p,xd) -> (elem p (map (\(x1,y1) -> (x+x1,y+y1)) distances))) digits)) gears + + let gearsBegins = uniqueLists $ map (\gearChars -> (nub (map (\x -> (findBegin x digits)) gearChars))) gearsChars + let twoGears = filter (\x -> length x == 2) gearsBegins + let serialNumbers = map (\gs -> product $ map (\g -> getNumber g inputLines) gs) twoGears + print (sum serialNumbers) + diff --git a/2023/day03/example.txt b/2023/day03/example.txt new file mode 100644 index 0000000..b20187f --- /dev/null +++ b/2023/day03/example.txt @@ -0,0 +1,10 @@ +467..114.. +...*...... +..35..633. +......#... +617*...... +.....+.58. +..592..... +......755. +...$.*.... +.664.598.. diff --git a/2023/day03/input.txt b/2023/day03/input.txt new file mode 100644 index 0000000..0d465e9 --- /dev/null +++ b/2023/day03/input.txt @@ -0,0 +1,140 @@ +.......262....300...................507.....961..............668.....................189.906...........................624.................. +..148.................805..130..880*...........*684.............*......*..............*..-......%.................$........17...65....91*... +......272.....464.....=......*.........................208*.....260.967.38.......692*.........676............@247..652.585.#......@......74. +.................*734........772......171.........728$.....52........................747.=866............350...........*.................... +..328....21...........941......../.....*...243................429@......567$...623.................654..#.....*815....360......812%......... +..........$.....%....@....6....583.....598...&.114@...618......................+...............156.........817...../.................340.... +.....883........359.....*.*..........................*............@............................./...920............302.712...........*...... +........*.....*......100..192.160........791......843...680*643.252.................322...354..........*.....+.........*............556..... +.........958.580.................*.............................................879.....-..$............633...63......561.....289............ +..............................745.......221..504-................356..............*827........355...............................*46......... +...................206..382...........$...........142@.105...534........./.......................*..........535.....................515..... +..201.....336.......-..*.....268..121..775...-...........%..............791.............129...449.....450..*.........790...........*........ +............%.559*......7.....+..*..........865......895............930.....427..242......#...............414.830............37..809........ +..................85.............466..550-..........+....................44...*...*.........361..215..........*......808.220*............... +................*......709....................577......430...&..148........*.696.988....801.*.....*..........202..25..*..................... +.....636......14...........372.............64...*...........586.%...15..241.............&....387..447...............*..811....146........... +.....-...........892*226....*....161.........%.623..................*...........$...............................................&.....657... +........987.................147.=....+.254..........887........773...321.....221....415.971..................74.......702..212.............. +......@............182............335.....*...........*..77.......#......................./.....29..........%...........&..*.......872...... +......643............*...................756.........677.*..........251......521..620......................................685.206.......132 +............274*...........929.................871........686.542..%........*......*.......................882....756.............*859..*... +................516.........*.....................*..............*...289...10.....890..985...258...963...............*.................526.. +.............................610...............857........210..818......*.......@.........#..=......*.....968.........42..........732....... +.............../..*453.................467..........376......$..........429..218.....................955..%..............357................ +.......841....493..............830#.......*342.........*........*................./....562....945................224.......*..435........... +..................843.803......................2........56...248.560.............281.....*.......*.........-........*5....728..*......156... +...822*288....352.*...+..............$.........$........................@..............794......539..-814..528.81.......+.......687.....*... +................*.783..../454.859....809..742........................663...267/..................................*.....847..............167. +....&371.296.484..............*..........=...........516.......925...............................#................441...............224..... +.........#............594..417....458............112*.....65.....#.....337...357....#..369*277.825....386..................212.............. +................651..#...........*.....$..................*............*.....*...125...................*......497.........*..............509 +......320..........*......-...883..989..733.....668.905...997.......454.....353...........946....18.....340...&......515...774........*..... +......-.....880....476...955.......=................*...........58.....................23....*69.+..102..............*.............933.687.. +........931....*..............................757....602.983......-..822..............*.............*.......732.....15...................... +....../....*....463.............183$..961........*.......*....#...........572......618.............52..........@........205......*....&429.. +...204......550............-.........%.........628.....240..588............*................................/..........*......167.776....... +................360....*....69..........*..........534..................%..340.....................885*912..52......949..................... +.........483......*..46.754......-....607.346.....*..............851.302..................@....................-........330.-201............ +.........@...274.811..............819...........56......326......................496....650...........382......168.420...*.........452...... +..............#........325.449........581...........112*........................+............163.......*.................407.......*...460.. +......595.........*......*...................226+.................268..153.........#123........*.....$..877..........#..........361...*..... +......*........280.287.427...........755...........................%.........................722...323................307................... +..132.553...............................*.......117......450.109...............849.....749.................................105..537#..741... +...*.................................788.......*....691...%...$............148.....960..*....512.728#..544.624.....$......*................. +.523..97...186..907....508....................739......*................*.....*856.&....15..................$.....911.......&..877..632..... +..............*.*.........*.........161*....+........381.............453.376..........................30..................806.......*....... +............560.877...773...............168..446..............465..............435@..24..622...%.................................=..347..... +...*165................-.......................................*......@816..............*....313..421......269....539.49.530..113........... +768......*626.926....=.....676...981=............703.........682.&141....................444......=........@.........*......*......539...... +......159.......$..362......../.......254.....14..=...............................219.................383.........*......182.............733 +.324........879.....................*.=...............316.....*480......*............*............439*.........621.961.......*481........... +....*...208*...........188.......763.....553...........*...957.......771.944........445......4...........375..............174.....903.665... +.................651........851.......37*...........303.................................446......61......*......346................@...*.... +......160....412*......../.....=.220.........354.........-.....838...........473..........#........$.870.......*............*........391.... +.....*....................218.....*.............*.....739..320*.........358....*...521......383.........*.....27...........107.............. +...969...718..................+....200.534.237+..........................=..889....*..........@........396.......................103..243... +........&..................841...-......&........./748...655..325.................430............813.................618.....687...#..@..... +..........825...761............800......................*....&...........496............652...$..*...............206..*..................... +...................+....&584.........35..663*590.....677...................*........741*....908...293..918............570....$......%....... +...........794.......................&...................852*...........361...............-.................................502.769.82...... +..535.......$............523*522................-..............847..........593..........267.....................................*.......... +....*...........73...............................299..262..941*..................813..............682..........877........494...411......... +..528................*997....*...477........464.....................521........@....*315......#...=..............*.......................... +............669...909.......342..*...........*..........444@...@.....-..611.911..............864......114....555..628..890.................. +............*.....................444.....921................783.......*.......................................*........=...414............. +..........622..................................422..-...............404......&906..381............438..........605.........@.....389.352@... +....77.........519...282........720.....159=..*....87......225.605......125...........+.............*..860-......................=.......... +...$...556.......-.....*..........#..........479............&....*.........*967...343..............400...........*883..................*881. +......*............207.653....113...359............227............357............*..........771...........426.905..............313..563..... +...74..233....959../.........*.........&............*...#.................543..64..*....179................*........@.............*......... +.....*..........*.......707.341..........&489.....206..132..407..........*........224..*................310........255./.........136........ +...251.......770........................................................475.............694....514.....................236.................. +........944........-379...............403.....934......47........................................*..............694........359.............. +732.............14..........*..........*.........*.................720....325..............375.483.............*.....356&..............686.. +.......160..672*.........250.125....791.....&76...1.....&963...422..#........../....191......*................925..........771...405&.-..... +...205....%......402................................117........*.........887....509..........44.....417.................=.-................. +...................*............=..145......746.......*........861..804....*.........313...............*....*.........761.......638......... +..852..767.....#67.835......$.359..*..................789.@................675.938.............957..........459.652..............*...949.... +........*.................977.....779.......348...627.....136.........+623..........964.............948+..........*.................=....... +........882......+............................./...#...............................*......311...152.......186......233.......374.......989.. +..148.........125.....931......706%....#...379.........................181.......227..........*..........*..............581..*.............. +.....*..179..............*.............970.../.......605...........736*......................700......970.................*.........+.487... +....209...*..............810....790..............787*......................#...+....-...824......587......709*.....899.....283....324..*.... +...........50...750............./.......633...............................364..66..593./......................115......-..............561... +...................#......989..............*217.......................620...........................................740.....*361....+....... +..........266.........647*....$..992....*...........318...345...........*..............-........252..797.................354........8...110. +.............................375.....344.334.......*.......*..........460......558.....364.......#..$...........@....%..........3........... +...$14...314...652...............................626............%...................%.....................778....868..215................... +...........&....*.......$........241.................*796....552..738..#234...@....358............993....*.................................. +................594..230..-..647*.....&............56.............*............479.....921..............519................426......713..... +.....944*................404........53..349....$........459......986..+......=..............-666..............237...897#..*........&....755. +.........176........280......714..........*..876.268...*.............946.492.113..........*..............................855................ +.....................*........*...936..................973.................*............736.......844.659....652.@............266...547..... +...677......@........426.....89........./...................185..........630.285............196...../....*...*....349....102....*....*...... +........765..677................*..46....85.901.....*...440...................../..........*.............304..952............1........507... +...........=.........669......847....*........*..821......*.301.......880.................829.951.460....................876................ +.................466*......*.........69.....207.........419...*...................442............*...........-.....898.....=.667............ +....421.56=................318....................................178...............+...............896*855...522..&..........%....151*405.. +....*.......481-...70*401..............550...................*.......*296...91........998.566..112.......................................... +...235.472..............................*......962....963.935...921.........+.....................-...........168.....=516.304...416*699.... +........#...*10.................240=.....687..*...................*.475..-...........697.......................*..............*............. +..261.....47.......750....954.........=......274........-...203.570....*..71...........*...484..*.....%61...397..854...#.......523.....931.. +..............34............$....%.....500........216.647............271.......908....906.......488...............*..92..634................ +..........83*....................994.......511.55*........991...16.........417*....*......96...................697.................&........ +.............582.450=.....................................=.....*...............654.411........313..................29.........32.849....... +.......563..............239.........&.............405............193......+.411.........%......*...&.....623.........$....+748..=.....840... +..........&......#.......-....761....639.275+.......*...................69..$....../.233..@..88.....226...*.....366................../...... +.............248.16............/...............+...556...........306............354......308..............682.../......894...#.............. +..697.......*.........@..........959...125....297.......................*337...................72....108...............*......991.344....781 +...*.......715...49.392.........*.......*................652/........#.......55*.......................-.844......./..344..........-........ +...591....................334.701.......838.......................397....501....759.....-.........................946.......442............. +..................557*421...@.....749........500..........#170..........%............941..373....425..818.......................828.....237. +..793*144...........................$.302....*.....938*..................................*..........*....%.378........66..63...*............ +............474...............893............267.......810................585..........558.......694......../.................340.701....... +..............#..798......332*.....855.....................592.589........&.....833=.........199......730.......+......177.................. +.................*..................*.........................*........................#.......*......*.....154.589...*..................... +.....64*809........../............@.139............228..374....../.......771.........534........281...........*......506.......=............ +..............427.750......546...98............707..=......&..381..877..*..........*........6.........%......489.........../.795............ +...895.805*.....*.....................*694....=........848...............616.....69.86.....*..460......895.......544.....651.......14.886... +...........390...850..777.534..138..52..........570....@.........812.$71................795.......557............-.....................*.... +..46*41...............*...........*................@.........613*.................584.......=........*...............106*....627.602....829. +........217*380.............721..928.873...........................593..353...............341..430..989..923.............695......-...%..... +..................586.......$.........*...207.......585&......485..*...*..........................*......*..........................929..... +............#.154*.....60.............95.......................*..138.764..........................425.275......%.331*664..854..........887. +908.917..359........../........659........125..785...........499..........991....358..........102*...........903..........*.....409....-.... +...*.........963*.../......408.............%........830*871...............*......*...828..........764.671................293...*............ +....................559....=..........81............................391...969.513....*.......991........&..518.....208*.......75............ +.....461.560*......................../........950.........320%.....*................97........................#..........+675.....352...339. +......*......439.%101.709...302.870......838....@.....594........953.......514*862........339....................................*.......... +...247...................@......*.................312....#.................................-...271..800...@..818.850....333*722...330..951.. +........922.................184.666.............../..........................356...105.........#...*.....353./........................*..... +832.....-.......758...800....$......................337.......419...........=.......*...258........926.........................../592..186.. +...................+...........220.287...117....783......646..#.........451........750..........27.....$.......*750......890................ +........719............982....%.......*..*.........*144.*..................*...........*764./.....*373..368.201..........@.................. +......../..........388....*........115...432.............594............345..658$...442......833.................408.........=..........542. +..........27.#498..*.....286..+490...............................966.....................262.......................#..542.237............... +72....251..#.......667.....................282..556..260...........%.$......................*....107..................*..................... +.......*.......*..............................*..-...*...............64..#...=.....402..@....790.@.....................295.766...484..969... +......85....882.80.......184$................117........................454..583......*..351...............266....................&....*.... +.......................................................48...........................436........275...................869............258..... diff --git a/2023/day04/Main.hs b/2023/day04/Main.hs new file mode 100644 index 0000000..9bf100b --- /dev/null +++ b/2023/day04/Main.hs @@ -0,0 +1,20 @@ +import Data.List.Split (splitOn) + +getGame :: String -> String +getGame s = tail $ dropWhile (/= ':') s + +splitGame :: String -> [[String]] +splitGame s = map (\x -> filter (/= "") (splitOn [' '] x)) (splitOn ['|'] s) + +calcPoints :: [String] -> Int +calcPoints w = round $ 2^^(length w - 1) + +main :: IO () +main = do + inputLines <- lines <$> getContents + let games = map (\x -> splitGame (getGame x)) inputLines + let wins = map (\[w, cards] -> filter (\card -> elem card w) cards) games + let points = map calcPoints wins + + print (sum points) + diff --git a/2023/day04/Main2.hs b/2023/day04/Main2.hs new file mode 100644 index 0000000..7b883e8 --- /dev/null +++ b/2023/day04/Main2.hs @@ -0,0 +1,26 @@ +import Data.List.Split (splitOn) + +getGame :: String -> String +getGame s = tail $ dropWhile (/= ':') s + +splitGame :: String -> [[String]] +splitGame s = map (\x -> filter (/= "") (splitOn [' '] x)) (splitOn ['|'] s) + +calcPoints :: [(Int, Int)] -> (Int, [(Int, Int)]) -> (Int, [(Int, Int)]) +calcPoints dict (num_cards, []) = (num_cards, []) +calcPoints dict (num_cards, this) = + let new_wins = map (\(i, w) -> take w (drop i dict)) this + in calcPoints dict (num_cards + length new_wins, concat new_wins) + + + +main :: IO () +main = do + inputLines <- lines <$> getContents + let games = map (\x -> splitGame (getGame x)) inputLines + let wins = zip [1..] (map (\[w, cards] -> length (filter (\card -> elem card w) cards)) games) :: [(Int, Int)] + -- let points = map calcPoints wins + + print (calcPoints wins (0, wins)) + -- print (wins) + diff --git a/2023/day04/example.txt b/2023/day04/example.txt new file mode 100644 index 0000000..9bdb874 --- /dev/null +++ b/2023/day04/example.txt @@ -0,0 +1,6 @@ +Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53 +Card 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19 +Card 3: 1 21 53 59 44 | 69 82 63 72 16 21 14 1 +Card 4: 41 92 73 84 69 | 59 84 76 51 58 5 54 83 +Card 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36 +Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11 diff --git a/2023/day04/input.txt b/2023/day04/input.txt new file mode 100644 index 0000000..da97dbb --- /dev/null +++ b/2023/day04/input.txt @@ -0,0 +1,208 @@ +Card 1: 57 76 72 11 8 28 15 38 54 46 | 77 87 71 98 40 7 84 43 61 64 5 50 19 83 79 99 36 47 4 95 30 44 37 55 26 +Card 2: 44 69 14 83 54 48 21 6 20 26 | 80 26 86 3 9 4 62 34 15 87 60 88 90 29 65 46 92 73 24 12 40 10 99 37 74 +Card 3: 15 60 63 84 20 93 36 39 17 19 | 68 80 17 91 20 84 69 72 15 39 5 61 74 99 60 85 19 45 24 79 53 36 7 63 93 +Card 4: 22 74 83 58 88 46 7 52 84 5 | 75 20 95 8 37 56 31 42 73 43 40 48 4 28 99 45 90 63 81 93 68 50 46 30 7 +Card 5: 4 97 41 50 32 26 68 84 5 11 | 91 70 87 4 88 13 48 51 32 34 38 82 86 11 1 50 40 43 28 5 61 89 84 41 37 +Card 6: 79 97 39 26 57 69 38 87 60 44 | 22 92 80 38 27 66 54 2 9 62 3 4 71 99 24 97 14 7 93 28 53 50 77 68 73 +Card 7: 73 91 51 23 90 67 19 81 50 12 | 4 76 97 64 19 85 31 3 74 12 23 60 20 68 52 39 43 65 37 63 40 59 99 80 6 +Card 8: 23 64 38 82 68 79 49 56 5 76 | 68 25 64 30 40 52 16 53 95 96 85 9 4 7 26 80 62 67 73 35 32 44 90 69 93 +Card 9: 75 87 69 31 8 11 89 49 95 24 | 35 26 68 69 42 66 37 77 25 45 75 72 38 50 27 24 32 46 11 10 14 95 62 7 86 +Card 10: 37 25 47 36 57 81 44 6 79 98 | 67 34 86 70 39 97 80 69 27 17 7 50 99 84 45 32 49 53 15 95 19 18 47 37 41 +Card 11: 87 98 16 76 21 53 8 42 40 75 | 21 7 89 85 65 30 32 19 68 22 64 82 48 62 39 46 4 57 77 18 55 24 34 29 67 +Card 12: 60 11 44 35 9 56 93 91 15 32 | 31 45 37 63 26 12 15 14 48 92 81 1 97 65 29 95 57 77 99 93 27 25 58 66 61 +Card 13: 25 75 5 60 47 83 8 37 2 43 | 52 30 68 13 1 92 89 63 78 57 87 75 28 82 59 46 33 3 65 41 47 69 21 2 96 +Card 14: 64 44 89 88 1 38 20 99 9 81 | 71 68 91 21 92 75 49 22 27 12 9 26 57 13 66 45 40 37 16 4 44 90 98 85 61 +Card 15: 16 56 91 62 12 83 25 3 70 61 | 81 55 73 96 13 7 67 99 88 90 87 48 83 35 19 97 9 31 20 49 38 44 41 45 5 +Card 16: 78 68 81 18 76 41 88 45 24 87 | 59 84 67 36 33 57 42 32 11 74 65 31 54 46 72 39 98 40 16 49 79 19 3 44 22 +Card 17: 84 11 48 66 54 86 28 4 45 23 | 4 54 42 62 81 8 92 45 47 66 84 48 18 72 28 86 23 34 3 24 73 82 96 11 59 +Card 18: 46 40 41 22 75 92 68 10 52 3 | 84 73 9 22 7 19 3 65 32 6 99 77 97 63 62 59 57 17 8 68 91 28 39 4 41 +Card 19: 19 57 22 85 75 69 50 62 65 61 | 35 24 50 47 74 97 61 27 66 57 77 75 22 30 70 41 62 69 85 58 81 65 19 91 63 +Card 20: 18 13 96 41 20 44 62 97 57 52 | 18 59 96 40 23 58 20 57 41 97 44 62 75 54 85 78 94 52 64 34 37 45 84 13 53 +Card 21: 34 3 13 85 81 19 37 97 29 91 | 9 97 52 3 35 48 24 34 17 50 21 71 57 36 94 82 19 4 14 83 98 37 80 91 59 +Card 22: 18 14 95 74 23 71 31 83 51 57 | 94 14 63 18 16 73 57 31 5 23 51 69 85 45 70 35 74 49 79 27 40 95 83 13 71 +Card 23: 54 12 52 31 58 93 9 45 27 64 | 48 54 93 12 44 64 56 83 35 94 33 4 58 89 8 45 27 1 86 90 52 31 19 57 9 +Card 24: 56 75 17 67 59 37 76 94 25 36 | 24 14 56 53 82 35 92 96 17 34 25 1 16 86 41 95 64 45 38 63 31 18 80 33 66 +Card 25: 32 22 47 24 80 92 96 67 5 26 | 22 81 87 47 26 96 92 60 57 64 66 16 5 83 67 49 32 39 71 80 40 63 99 75 53 +Card 26: 62 36 66 9 3 71 75 67 29 61 | 9 31 66 82 29 41 67 71 38 36 28 76 14 75 69 61 99 57 62 88 70 95 63 10 59 +Card 27: 46 38 59 90 1 65 16 80 76 34 | 70 15 49 31 27 71 54 46 76 1 8 77 93 2 90 39 14 67 62 16 78 56 68 9 58 +Card 28: 47 85 54 21 37 14 44 73 12 51 | 78 70 14 77 98 88 25 49 9 79 58 23 52 2 43 17 12 84 59 51 56 89 47 48 6 +Card 29: 74 37 60 11 56 21 87 44 33 46 | 80 61 34 54 9 3 45 7 55 13 98 84 10 19 14 8 90 81 50 69 31 12 38 29 78 +Card 30: 29 20 44 62 79 34 52 15 49 48 | 17 84 34 1 33 9 23 55 94 10 95 69 42 79 78 44 51 82 20 25 81 29 15 13 32 +Card 31: 88 41 38 98 34 40 92 36 25 50 | 33 54 18 53 46 69 8 22 25 36 51 34 42 92 85 45 40 60 84 27 97 39 10 70 41 +Card 32: 5 28 85 29 95 37 60 34 24 16 | 74 8 48 73 34 65 66 56 64 85 78 17 39 67 92 30 75 22 95 12 29 24 6 2 51 +Card 33: 71 31 99 53 62 80 65 32 13 23 | 87 20 55 24 42 19 67 77 37 89 32 83 44 9 60 46 47 36 49 35 92 10 82 2 81 +Card 34: 78 61 12 81 96 82 7 30 80 32 | 62 8 56 89 11 12 39 31 17 18 79 51 30 92 48 5 45 78 41 44 77 98 71 67 73 +Card 35: 59 35 63 76 51 8 53 70 24 97 | 20 36 31 17 77 26 34 15 41 39 61 24 35 46 80 74 2 71 5 91 16 11 55 87 4 +Card 36: 46 51 79 66 57 52 21 11 75 33 | 88 64 74 99 22 39 42 11 14 65 1 56 86 8 26 16 72 13 55 20 60 40 19 85 58 +Card 37: 83 88 1 19 95 30 38 43 14 51 | 98 20 22 55 13 58 93 21 68 11 76 70 71 35 44 90 52 53 75 17 96 27 49 31 26 +Card 38: 87 49 43 19 16 34 88 66 67 9 | 70 46 63 58 7 53 96 1 59 35 91 85 18 21 93 68 90 73 11 92 60 61 98 38 15 +Card 39: 24 68 25 61 54 63 30 37 21 73 | 50 84 48 10 81 5 62 28 92 66 96 6 20 83 78 88 31 89 12 71 60 8 34 70 90 +Card 40: 18 72 44 15 3 19 69 63 73 57 | 14 3 52 76 71 12 50 13 86 21 55 31 27 29 43 47 90 75 9 97 6 32 96 37 18 +Card 41: 81 66 49 20 86 80 4 55 93 44 | 87 81 7 47 25 85 80 51 76 27 78 10 16 50 33 66 13 64 35 18 44 63 29 92 48 +Card 42: 27 21 14 28 69 89 94 9 19 46 | 92 13 27 99 96 19 43 54 4 14 45 16 44 83 24 61 2 28 5 90 49 51 63 64 73 +Card 43: 34 49 58 85 23 88 84 78 89 55 | 72 45 73 23 75 52 84 78 46 55 58 71 98 5 56 91 49 39 88 70 42 59 89 85 34 +Card 44: 18 69 46 58 73 59 56 23 12 40 | 71 23 87 93 21 84 10 79 47 92 91 13 52 1 32 78 59 95 72 55 97 56 43 61 75 +Card 45: 33 47 58 69 57 1 82 6 61 48 | 48 97 4 1 67 66 82 12 6 29 21 96 90 33 57 28 47 69 74 27 2 32 58 61 9 +Card 46: 42 54 98 50 36 86 27 66 29 60 | 32 23 40 62 38 91 43 98 29 85 18 30 66 28 81 35 68 61 11 27 50 22 41 46 42 +Card 47: 1 31 87 71 53 17 5 93 84 56 | 48 26 14 47 34 44 18 93 17 88 61 8 95 74 53 50 56 80 62 84 99 49 87 52 1 +Card 48: 40 75 79 29 64 57 33 49 95 68 | 7 39 63 79 89 10 23 40 22 86 92 13 57 29 9 19 90 87 58 12 77 16 75 4 91 +Card 49: 4 45 87 47 71 35 9 2 81 77 | 93 33 49 75 11 34 62 39 83 40 55 17 84 43 80 60 46 7 18 56 48 66 95 57 74 +Card 50: 88 42 2 30 24 89 15 93 16 45 | 93 45 72 68 30 28 17 82 64 91 29 98 14 24 88 70 55 48 58 10 42 83 66 2 77 +Card 51: 91 96 87 48 6 73 95 55 71 89 | 94 49 84 33 82 9 21 32 25 46 65 15 86 83 66 11 37 1 14 61 92 36 35 45 27 +Card 52: 48 3 94 56 41 13 34 8 96 25 | 40 88 46 14 68 25 75 66 87 55 64 78 92 43 19 97 53 90 83 59 69 31 84 95 13 +Card 53: 13 45 61 92 91 32 49 58 43 36 | 44 70 55 28 2 6 35 79 24 54 82 95 52 73 75 84 34 57 21 23 33 22 80 88 1 +Card 54: 61 52 20 8 73 54 83 60 29 6 | 74 40 27 46 81 75 3 42 47 69 22 59 58 49 90 63 57 50 79 70 82 5 53 91 39 +Card 55: 41 51 64 55 57 44 26 70 62 34 | 24 82 49 39 56 84 31 27 86 77 22 6 73 72 99 47 60 18 53 68 42 19 66 9 50 +Card 56: 30 89 82 17 72 46 98 5 54 58 | 4 86 18 15 84 41 16 63 44 91 12 31 66 96 94 87 49 59 67 64 80 33 5 11 40 +Card 57: 39 80 17 47 15 96 69 50 46 24 | 5 83 16 52 57 27 98 43 78 1 66 90 19 6 58 3 49 94 85 62 44 54 75 14 9 +Card 58: 42 77 37 13 74 40 31 92 36 46 | 16 74 80 59 51 31 95 85 40 93 23 15 32 18 46 97 36 13 79 10 37 99 77 25 92 +Card 59: 39 1 78 7 57 46 91 26 12 94 | 46 13 26 83 21 1 67 78 50 94 8 12 39 61 86 91 35 29 32 72 30 97 57 16 7 +Card 60: 62 32 18 51 40 96 93 36 80 84 | 42 93 65 8 2 52 84 70 11 1 92 21 80 99 18 14 17 47 56 90 49 67 19 48 97 +Card 61: 6 83 74 89 44 73 39 42 47 88 | 72 74 42 21 88 77 18 6 83 85 49 73 5 39 78 44 64 10 47 14 89 53 98 13 92 +Card 62: 91 86 35 23 30 28 77 88 56 41 | 54 26 90 20 96 78 14 5 47 98 31 55 74 83 33 15 67 92 19 40 73 72 52 81 94 +Card 63: 87 91 78 92 33 71 80 47 13 65 | 32 33 56 55 2 4 61 71 91 97 93 78 83 74 3 13 47 70 54 80 65 60 49 26 96 +Card 64: 70 61 63 52 32 35 85 46 54 4 | 42 54 32 84 56 46 29 61 63 78 4 36 80 86 26 17 3 87 48 21 85 52 35 70 22 +Card 65: 83 95 45 97 49 67 13 92 1 90 | 68 75 20 96 6 33 73 1 50 14 17 66 34 78 54 84 92 9 64 61 85 88 72 42 12 +Card 66: 1 7 99 75 17 21 48 70 30 13 | 70 80 45 89 75 7 21 99 20 54 42 46 67 85 61 17 1 16 30 92 77 48 13 68 90 +Card 67: 69 55 20 91 47 31 33 75 56 39 | 69 31 62 20 58 1 93 48 35 55 47 13 56 60 50 75 25 37 91 81 10 39 32 33 54 +Card 68: 14 97 54 28 73 64 81 32 47 17 | 86 48 88 25 47 65 22 81 28 95 41 14 27 26 46 64 79 61 45 96 32 9 21 54 53 +Card 69: 6 21 89 82 75 48 46 56 68 47 | 48 32 74 30 13 56 93 90 68 33 41 58 21 47 8 17 65 6 89 97 75 82 46 26 59 +Card 70: 35 48 78 92 64 30 88 77 76 10 | 76 33 48 67 78 64 24 69 36 14 77 85 30 73 53 91 3 35 96 88 43 84 10 95 92 +Card 71: 59 78 57 66 15 18 41 83 70 35 | 7 62 19 30 48 97 89 71 40 27 11 63 60 47 23 86 10 84 4 75 80 69 61 67 25 +Card 72: 80 82 46 70 10 14 55 49 62 9 | 31 76 62 17 8 49 19 50 85 72 77 75 42 48 33 60 54 45 12 91 20 92 15 3 25 +Card 73: 38 83 96 47 42 99 13 82 36 85 | 74 86 59 16 49 45 81 61 44 39 3 91 9 26 35 25 55 21 19 41 90 70 10 29 4 +Card 74: 92 36 96 65 24 6 98 13 33 86 | 17 83 30 5 46 51 54 81 44 99 33 56 45 14 57 34 8 16 77 48 40 94 82 73 75 +Card 75: 14 21 57 66 33 8 90 7 4 28 | 91 61 3 84 89 45 60 56 51 10 58 20 96 78 73 93 97 44 19 15 12 90 35 87 42 +Card 76: 37 91 60 44 43 3 40 33 95 51 | 24 39 81 1 46 83 97 88 87 6 67 40 22 96 93 2 71 33 29 15 41 16 89 21 68 +Card 77: 91 84 43 9 87 96 37 64 41 31 | 35 13 30 43 78 32 23 85 84 19 88 68 10 63 27 77 61 50 41 94 54 12 97 86 33 +Card 78: 9 78 53 16 80 56 91 3 62 70 | 85 64 21 88 51 16 15 4 69 30 13 1 70 17 52 23 90 5 24 50 19 81 41 67 12 +Card 79: 59 28 42 51 66 58 63 9 24 47 | 69 95 26 36 14 62 13 20 35 25 34 74 40 41 9 39 45 77 5 10 55 96 22 81 49 +Card 80: 72 83 73 23 85 2 53 22 3 43 | 14 50 67 63 19 76 39 60 31 33 62 92 29 12 49 75 69 78 44 8 96 95 34 65 20 +Card 81: 2 46 29 50 65 57 55 83 74 12 | 4 70 97 54 68 99 81 5 84 10 73 61 88 66 27 8 56 33 79 47 85 49 17 16 34 +Card 82: 37 30 10 3 8 34 44 24 57 13 | 42 17 25 65 48 71 4 64 51 83 75 27 72 96 45 18 11 15 70 53 91 14 12 87 59 +Card 83: 82 81 15 4 54 96 74 72 37 70 | 37 78 72 25 4 66 81 97 6 83 43 96 61 44 15 71 40 54 27 70 82 98 74 93 7 +Card 84: 97 52 96 23 80 53 57 83 16 62 | 5 31 89 91 84 33 52 83 76 23 64 67 10 97 29 63 96 58 74 53 62 57 80 81 92 +Card 85: 53 33 76 24 81 68 51 47 40 89 | 70 38 51 50 85 57 89 40 30 61 1 24 54 75 32 33 96 19 14 53 76 20 7 99 47 +Card 86: 19 96 52 18 15 53 82 16 86 13 | 69 27 32 85 87 30 33 83 11 47 3 21 68 70 42 61 46 2 64 65 44 1 97 48 74 +Card 87: 18 40 55 62 39 95 60 11 76 46 | 82 81 22 46 92 80 62 91 12 40 76 60 69 78 17 18 11 93 56 39 37 88 3 64 95 +Card 88: 72 65 91 61 57 4 49 24 45 31 | 28 49 91 31 19 59 65 36 34 87 72 24 60 89 17 12 57 30 75 32 63 8 21 4 25 +Card 89: 18 24 64 43 33 56 6 67 8 16 | 40 21 27 52 3 23 65 89 16 7 96 31 48 73 33 37 18 99 12 50 74 26 71 84 8 +Card 90: 75 3 92 35 12 26 49 59 60 55 | 65 58 39 73 3 56 11 44 4 47 68 24 86 10 61 6 72 13 82 42 29 93 97 77 8 +Card 91: 78 40 49 75 60 15 59 7 31 93 | 71 9 48 10 69 29 65 40 21 57 68 87 12 35 81 70 30 94 36 97 51 43 8 82 5 +Card 92: 3 53 23 43 15 4 98 11 67 29 | 35 3 93 87 83 60 5 92 1 90 67 23 78 98 20 37 81 71 31 82 95 47 53 75 21 +Card 93: 20 61 6 36 52 77 59 16 18 81 | 66 29 4 87 61 92 78 30 68 69 67 57 88 83 71 54 24 21 13 56 84 35 60 86 53 +Card 94: 25 52 87 17 94 41 23 30 72 53 | 93 62 38 77 31 24 21 36 75 64 45 83 56 39 90 29 55 43 71 54 42 98 76 74 28 +Card 95: 84 66 91 8 26 82 85 96 31 36 | 93 51 40 98 69 74 53 67 86 23 77 41 62 89 64 34 5 26 50 73 42 43 13 19 91 +Card 96: 7 6 90 39 14 73 66 81 33 67 | 63 26 1 58 29 10 3 13 94 9 85 68 69 19 53 96 90 36 49 99 31 74 54 45 77 +Card 97: 66 64 77 7 88 18 40 24 10 63 | 28 22 62 41 30 21 19 12 50 43 46 42 56 6 60 36 95 82 97 2 73 55 38 53 8 +Card 98: 48 10 16 15 93 40 37 72 57 88 | 10 59 38 19 97 23 51 40 35 31 56 54 21 27 28 81 15 67 12 57 37 65 9 22 74 +Card 99: 45 57 7 23 86 82 15 14 75 35 | 55 19 84 37 82 39 15 77 42 52 44 18 75 45 7 69 67 23 86 6 89 14 43 57 35 +Card 100: 68 85 29 69 17 44 19 56 92 8 | 8 4 20 98 36 39 78 79 72 81 51 22 13 47 2 77 30 28 64 41 89 57 50 34 16 +Card 101: 6 91 90 43 85 1 19 2 28 9 | 63 25 2 9 83 85 87 43 91 6 62 64 74 28 19 82 92 29 36 1 71 90 60 99 84 +Card 102: 20 72 12 52 58 28 30 76 42 55 | 30 47 59 29 20 93 90 33 76 58 78 28 52 83 48 72 54 42 67 17 55 12 36 2 37 +Card 103: 58 18 40 8 73 69 22 74 26 63 | 61 40 63 41 82 87 22 8 34 6 73 95 69 44 45 85 62 74 27 28 26 4 96 58 15 +Card 104: 42 71 57 39 22 79 43 80 90 37 | 43 37 76 94 40 67 4 55 74 21 7 42 3 39 28 12 80 57 32 61 95 58 64 90 13 +Card 105: 60 9 50 14 56 11 54 33 77 84 | 77 81 17 99 11 84 70 60 5 43 83 19 80 13 54 33 50 30 87 31 9 4 37 56 14 +Card 106: 79 87 86 96 1 8 63 43 39 91 | 6 2 75 63 67 38 11 96 90 91 87 97 86 9 21 77 43 36 79 8 40 85 39 1 13 +Card 107: 97 83 21 39 74 64 79 70 77 14 | 85 32 55 18 24 14 79 57 51 12 4 21 23 70 26 83 39 66 63 1 64 73 30 8 77 +Card 108: 18 41 11 62 88 38 73 4 47 36 | 82 53 41 92 65 15 42 47 85 96 26 43 58 62 11 3 54 55 89 63 30 17 20 93 2 +Card 109: 28 34 55 39 22 99 98 89 86 54 | 58 76 46 70 91 43 2 79 16 25 89 42 78 52 12 56 44 69 80 85 84 99 62 19 15 +Card 110: 32 38 50 41 8 97 84 60 92 40 | 43 7 51 76 69 38 92 34 41 71 8 49 95 79 32 45 42 58 60 40 4 3 98 31 20 +Card 111: 61 7 67 98 74 21 79 4 85 68 | 90 80 4 8 46 55 40 28 30 38 64 86 73 51 42 66 69 15 29 6 52 78 82 49 41 +Card 112: 13 92 98 37 72 52 1 30 42 36 | 17 65 49 6 5 33 40 10 57 72 12 53 7 15 44 18 90 46 81 99 26 16 23 52 66 +Card 113: 39 30 46 62 55 42 32 77 9 37 | 37 21 50 40 63 97 28 11 51 26 75 86 80 32 16 69 77 60 6 99 9 72 22 55 79 +Card 114: 54 6 72 17 56 76 23 78 7 38 | 15 76 40 56 8 50 51 97 94 64 13 3 69 24 54 66 14 25 82 1 71 41 47 74 92 +Card 115: 50 66 30 89 46 20 35 59 22 88 | 96 72 32 97 61 64 25 70 4 11 88 34 46 6 10 73 71 79 45 33 66 50 24 13 42 +Card 116: 83 33 99 22 90 32 11 28 47 85 | 80 58 57 7 15 1 23 59 86 54 67 36 83 38 34 18 37 35 19 90 45 24 46 4 84 +Card 117: 95 23 58 8 76 82 60 1 15 80 | 75 77 10 85 36 52 91 54 44 96 97 89 25 67 16 31 99 51 68 83 55 29 3 20 33 +Card 118: 53 7 99 97 39 37 80 52 18 77 | 76 78 83 34 75 69 39 14 27 44 89 56 23 30 43 48 57 61 29 82 87 93 67 62 12 +Card 119: 19 22 6 97 71 68 59 95 67 75 | 91 40 20 74 87 46 4 85 63 64 50 88 14 1 54 39 3 62 58 10 28 55 27 86 60 +Card 120: 37 76 87 74 15 84 14 11 99 60 | 24 15 92 60 25 3 86 1 33 5 62 65 79 6 91 45 11 14 10 2 43 4 68 85 54 +Card 121: 74 43 96 14 67 85 19 51 80 95 | 27 53 14 15 72 99 85 30 33 20 13 58 12 25 36 18 45 67 34 79 32 76 96 95 55 +Card 122: 93 51 95 32 2 18 40 72 31 45 | 8 98 70 17 62 22 63 72 69 73 3 26 42 25 1 41 28 13 77 92 32 60 56 2 65 +Card 123: 9 82 93 20 35 69 87 40 30 67 | 87 10 67 63 76 23 45 35 54 5 75 79 66 40 1 89 71 20 77 43 90 65 9 82 37 +Card 124: 93 48 59 54 75 8 83 35 4 64 | 71 59 41 35 4 65 49 5 98 91 54 45 76 64 93 75 8 83 48 87 94 32 16 89 82 +Card 125: 24 14 40 22 2 57 67 35 36 98 | 36 82 19 88 23 55 15 97 78 35 94 24 67 52 14 30 40 56 38 57 2 31 22 98 71 +Card 126: 22 7 97 12 95 66 69 51 59 88 | 94 88 59 58 70 64 95 29 7 93 68 21 16 19 36 39 41 66 10 76 78 82 63 34 56 +Card 127: 46 9 32 85 22 20 14 68 98 61 | 69 25 4 70 64 57 14 89 41 98 22 53 27 77 20 56 84 42 85 40 90 6 61 71 60 +Card 128: 53 84 81 45 23 13 93 34 42 80 | 80 74 39 50 75 49 7 61 43 5 1 51 36 54 57 97 26 32 82 98 68 45 93 37 86 +Card 129: 40 29 85 88 86 7 49 67 91 92 | 86 38 79 31 57 34 78 17 52 53 22 36 62 75 21 70 88 7 3 49 28 6 85 14 4 +Card 130: 63 20 36 62 43 98 99 12 46 57 | 14 32 99 22 17 70 5 91 57 95 49 15 28 46 84 89 78 79 43 98 45 50 88 16 23 +Card 131: 7 16 87 36 73 82 11 40 14 69 | 25 31 82 24 50 38 2 28 4 23 72 6 51 79 86 46 55 97 42 90 84 1 39 32 27 +Card 132: 67 56 15 63 40 9 59 23 94 27 | 26 65 80 40 46 23 37 78 27 12 34 98 41 59 94 16 50 79 90 15 4 7 6 62 17 +Card 133: 18 91 27 52 4 34 12 32 65 41 | 45 55 7 3 84 79 54 91 75 80 17 49 42 9 18 48 59 6 8 22 94 10 93 53 57 +Card 134: 78 75 48 26 14 8 91 41 34 68 | 18 29 57 5 17 22 56 97 74 34 13 50 40 33 62 20 10 71 58 1 21 88 87 8 25 +Card 135: 5 97 16 92 74 51 61 65 3 14 | 15 50 86 24 99 90 59 32 45 81 97 75 6 25 29 80 9 89 46 70 40 57 42 63 60 +Card 136: 81 35 23 70 51 14 31 50 67 7 | 32 28 40 58 4 99 18 95 11 90 86 13 84 74 61 5 44 47 24 38 21 1 77 48 78 +Card 137: 74 99 57 81 5 1 90 9 69 30 | 88 23 97 7 25 68 78 91 53 15 55 81 92 90 12 18 50 71 61 75 8 76 36 19 34 +Card 138: 37 2 84 13 78 51 29 15 42 71 | 49 30 16 88 79 67 76 75 38 80 91 6 28 83 14 26 1 19 40 18 32 98 74 17 44 +Card 139: 49 75 16 61 39 4 51 55 17 97 | 11 45 56 47 81 78 67 21 57 42 84 58 8 13 10 91 7 19 46 14 90 87 26 1 18 +Card 140: 39 19 41 45 17 30 29 66 61 25 | 61 53 29 41 37 30 95 93 45 17 8 21 66 10 14 78 65 18 39 5 52 91 19 25 4 +Card 141: 7 66 29 40 9 14 34 64 4 31 | 98 63 65 6 92 56 81 67 48 88 49 18 38 61 13 95 28 85 20 17 21 30 58 52 89 +Card 142: 32 88 54 27 21 86 49 87 44 45 | 15 44 67 75 87 79 21 10 34 70 54 49 88 3 28 32 65 27 43 98 53 64 45 86 9 +Card 143: 14 7 67 53 37 73 45 18 62 34 | 87 68 3 22 40 86 26 85 70 4 61 78 1 29 48 12 37 10 77 54 99 36 94 79 15 +Card 144: 92 35 52 27 19 16 58 4 22 85 | 47 37 30 51 96 28 58 81 85 9 19 10 46 22 27 7 35 52 16 60 4 92 53 13 84 +Card 145: 71 32 62 83 43 20 97 57 78 24 | 88 34 23 25 67 52 11 9 49 80 70 29 43 2 44 45 62 56 33 3 20 98 28 77 79 +Card 146: 99 11 17 93 16 77 1 46 55 68 | 25 17 77 99 35 53 3 84 98 2 21 74 27 58 16 20 33 22 39 28 69 9 92 46 52 +Card 147: 56 26 30 23 66 94 82 47 14 49 | 68 41 6 13 99 7 71 67 35 93 57 84 44 40 70 89 42 63 74 22 20 55 33 91 64 +Card 148: 21 6 43 36 7 44 61 23 93 57 | 53 20 51 59 74 77 16 92 47 25 62 58 18 85 3 63 46 81 99 5 79 70 69 75 34 +Card 149: 31 36 91 20 17 50 1 18 64 52 | 66 90 80 33 26 24 30 58 45 77 25 29 44 48 6 35 96 13 78 65 68 98 93 89 94 +Card 150: 81 91 37 66 12 33 59 97 38 32 | 61 38 91 95 75 85 48 44 37 47 84 66 35 62 79 94 25 22 97 17 10 31 96 5 78 +Card 151: 32 35 11 75 63 61 42 62 10 56 | 4 44 53 12 50 76 51 5 82 25 30 8 89 41 34 98 54 96 37 74 35 16 31 57 65 +Card 152: 96 60 29 43 99 19 80 8 5 2 | 87 52 19 11 99 35 20 60 55 80 24 21 8 61 38 78 42 28 95 6 64 65 49 59 26 +Card 153: 53 30 75 13 87 77 56 89 63 6 | 7 54 93 80 47 4 72 9 69 44 97 96 23 24 94 67 55 8 33 30 37 6 14 5 3 +Card 154: 10 65 46 58 13 25 69 52 19 3 | 47 41 9 3 40 79 89 21 33 73 14 7 74 65 31 62 24 69 60 87 12 16 53 80 82 +Card 155: 24 51 35 95 93 73 36 65 27 20 | 14 83 97 94 29 39 19 38 33 32 44 92 60 25 76 64 49 71 65 34 91 31 53 74 23 +Card 156: 52 31 50 54 82 42 23 9 39 3 | 29 64 88 70 48 74 12 90 75 57 23 25 58 68 36 33 73 5 84 28 47 92 50 41 21 +Card 157: 66 20 50 96 6 84 54 67 59 81 | 77 60 38 65 37 44 15 73 23 83 18 71 89 53 90 36 40 32 2 39 78 63 8 51 19 +Card 158: 38 46 85 81 87 86 98 90 37 34 | 41 71 35 26 12 19 51 93 39 20 76 24 7 80 50 56 49 2 57 84 68 92 54 1 75 +Card 159: 61 36 84 47 4 22 49 17 31 75 | 77 83 49 55 84 80 18 44 31 47 22 67 4 68 69 35 75 5 59 13 61 39 36 54 17 +Card 160: 90 70 62 65 87 95 15 77 76 35 | 70 94 97 10 90 80 35 27 84 87 42 62 54 26 95 57 82 63 1 18 92 25 49 64 21 +Card 161: 44 6 28 50 79 16 15 83 45 53 | 79 72 12 45 50 35 67 6 89 28 15 61 16 7 46 36 44 55 27 92 1 59 83 53 94 +Card 162: 29 51 46 64 4 75 37 78 81 71 | 83 71 37 39 74 66 32 1 51 93 43 46 20 3 15 50 81 64 75 73 78 29 33 4 22 +Card 163: 1 52 37 97 88 47 94 10 98 5 | 85 31 33 46 15 1 16 61 98 59 64 94 83 68 35 11 44 80 38 36 84 72 86 40 29 +Card 164: 60 40 94 62 18 71 92 25 21 64 | 64 18 58 76 38 55 40 45 71 92 73 75 25 62 12 94 68 79 23 91 21 60 72 39 7 +Card 165: 63 88 91 22 85 18 39 55 33 84 | 95 88 37 5 39 46 33 61 32 45 74 20 27 35 76 85 84 18 54 86 91 75 22 55 63 +Card 166: 72 11 31 50 53 82 41 74 62 87 | 42 34 50 11 96 3 77 7 37 22 44 38 62 1 87 68 12 54 74 53 47 82 69 89 85 +Card 167: 79 26 70 95 25 16 18 37 75 61 | 39 11 68 61 44 53 42 94 37 45 75 78 62 18 95 26 79 92 38 13 16 64 21 91 57 +Card 168: 94 86 69 88 31 15 62 44 19 14 | 3 24 29 8 44 61 89 7 75 15 91 36 45 70 66 4 35 6 71 22 25 39 55 33 18 +Card 169: 86 68 72 15 42 99 9 35 2 74 | 42 84 59 86 6 15 53 89 85 79 20 68 62 61 10 2 9 51 99 54 33 35 13 48 93 +Card 170: 83 6 15 80 93 63 79 50 69 5 | 15 25 6 93 69 50 83 68 16 40 66 58 63 79 52 7 80 34 61 95 5 33 78 91 32 +Card 171: 33 85 4 12 72 62 49 67 17 53 | 4 17 53 72 47 6 49 56 82 48 12 26 30 85 61 15 36 70 64 25 2 33 67 46 62 +Card 172: 98 63 26 82 12 61 56 95 27 99 | 76 30 14 95 26 97 71 19 57 67 73 48 63 54 82 18 98 27 61 5 12 44 1 56 74 +Card 173: 7 32 34 4 22 79 27 10 78 65 | 3 81 65 36 91 62 94 54 41 32 12 28 39 34 18 61 78 79 80 66 9 63 43 72 97 +Card 174: 14 78 60 32 26 31 15 80 11 72 | 1 31 33 35 73 83 97 36 21 3 26 9 91 23 51 84 82 70 22 20 34 90 98 87 69 +Card 175: 73 14 7 11 20 64 30 90 62 23 | 60 53 15 73 63 19 71 92 48 89 80 44 78 79 2 76 45 64 42 35 81 27 10 21 26 +Card 176: 32 30 39 10 1 3 67 66 94 62 | 86 95 56 54 58 35 90 19 74 43 5 48 17 2 46 65 97 71 36 31 69 8 47 94 42 +Card 177: 24 90 40 47 51 75 63 29 57 10 | 49 68 61 43 30 26 84 59 99 75 44 41 17 24 12 38 90 37 36 35 91 9 89 46 8 +Card 178: 73 74 31 76 10 21 70 3 30 41 | 39 14 30 70 79 75 97 44 87 20 92 12 86 56 18 46 8 90 23 98 2 59 28 53 3 +Card 179: 78 44 89 84 50 97 55 90 77 99 | 79 1 88 65 2 50 72 68 7 15 85 41 64 93 37 16 53 44 42 48 89 97 59 60 8 +Card 180: 55 98 13 45 33 91 88 4 49 37 | 18 44 64 83 56 79 81 26 78 54 72 75 11 70 66 57 73 61 62 34 19 95 93 94 76 +Card 181: 94 47 65 55 8 45 1 67 71 25 | 99 34 43 64 36 50 6 51 27 59 37 40 3 98 72 78 38 74 82 46 85 90 48 32 84 +Card 182: 78 75 63 31 30 70 84 50 28 19 | 61 18 58 87 77 48 71 50 91 92 60 86 73 94 85 57 97 15 1 25 74 67 11 68 47 +Card 183: 94 27 68 41 8 72 48 85 97 49 | 81 35 90 69 76 18 53 1 59 25 88 31 4 93 84 32 9 55 66 50 22 62 43 60 17 +Card 184: 40 31 56 54 59 98 93 81 24 44 | 62 42 93 56 99 10 81 59 37 6 41 66 44 72 31 30 20 54 51 24 27 83 40 73 98 +Card 185: 38 73 79 48 3 46 99 93 50 24 | 65 34 40 2 20 92 10 32 67 57 22 47 96 11 7 31 87 6 28 95 77 25 58 29 27 +Card 186: 47 65 99 98 90 68 13 49 51 10 | 90 82 27 68 84 83 57 50 18 5 49 65 85 10 46 13 21 81 73 51 71 47 98 88 99 +Card 187: 25 56 18 15 59 47 20 86 50 83 | 25 57 83 36 56 87 50 34 9 70 4 64 77 45 92 13 20 47 48 15 97 18 86 28 59 +Card 188: 99 16 44 2 85 17 71 45 49 11 | 94 13 45 36 77 89 26 6 39 27 84 1 80 21 73 41 33 90 46 72 65 96 34 71 83 +Card 189: 34 24 76 68 47 19 85 15 50 46 | 43 67 4 44 14 34 19 61 47 68 50 46 99 94 16 76 15 28 36 27 52 85 88 24 89 +Card 190: 56 20 43 86 2 88 87 30 14 4 | 43 14 19 92 3 23 87 74 50 97 2 88 18 80 20 86 36 41 95 27 57 98 49 30 26 +Card 191: 47 2 18 84 91 66 24 6 42 56 | 12 93 7 50 42 45 2 91 66 4 32 47 19 56 49 18 15 24 44 84 97 6 16 31 25 +Card 192: 42 88 68 56 93 48 9 52 20 70 | 30 93 42 4 68 70 36 56 9 15 88 98 64 67 33 91 20 61 50 27 13 94 52 48 85 +Card 193: 46 57 19 40 9 7 47 33 86 11 | 65 54 38 43 82 55 79 51 77 73 74 97 75 96 6 47 62 88 92 18 84 48 41 29 52 +Card 194: 58 23 35 79 82 72 44 93 12 43 | 43 60 2 24 77 48 61 25 44 75 35 12 93 51 36 72 6 31 29 50 37 80 19 14 87 +Card 195: 15 77 78 50 36 83 68 52 86 26 | 16 72 67 88 14 81 34 24 71 32 91 77 90 1 98 95 7 28 49 84 86 20 44 73 56 +Card 196: 25 3 32 15 1 56 27 51 82 81 | 87 79 15 11 98 54 56 88 18 92 69 25 66 27 60 58 44 1 51 3 32 81 12 72 41 +Card 197: 3 99 81 8 93 28 76 7 27 48 | 78 98 85 5 93 77 72 62 69 82 50 9 35 74 18 10 33 67 90 31 79 84 58 29 17 +Card 198: 26 81 19 24 59 82 8 95 86 17 | 13 22 10 96 19 20 88 3 90 78 24 9 50 34 6 94 7 60 44 76 31 81 26 33 43 +Card 199: 77 91 58 16 47 94 23 30 88 5 | 38 66 12 25 95 67 72 89 36 45 63 15 54 98 74 57 32 39 59 28 7 62 82 13 26 +Card 200: 82 47 52 12 83 4 26 93 33 9 | 31 30 91 2 6 27 28 1 81 8 75 92 56 57 41 24 72 85 53 74 59 11 66 32 54 +Card 201: 4 13 26 57 84 17 63 10 98 56 | 72 85 68 47 44 60 54 34 38 16 8 11 23 84 32 18 69 13 26 35 9 73 43 15 89 +Card 202: 11 9 1 42 71 78 97 89 8 10 | 33 17 81 48 60 96 69 37 12 46 73 4 76 54 86 91 28 5 51 98 99 84 13 85 32 +Card 203: 37 80 7 87 79 60 6 49 16 12 | 23 34 15 46 38 20 27 45 33 97 37 14 68 83 49 79 43 70 57 60 11 63 24 35 73 +Card 204: 84 24 48 76 7 18 77 37 69 5 | 88 39 92 94 34 37 11 40 85 35 2 81 73 58 42 66 83 9 56 12 14 51 62 20 7 +Card 205: 5 84 4 6 95 77 59 67 74 35 | 58 47 29 34 79 86 35 89 71 96 27 64 90 48 37 78 1 39 46 21 98 91 43 8 56 +Card 206: 56 21 34 13 1 17 99 11 76 60 | 36 24 83 31 50 19 82 32 61 9 98 71 79 39 97 37 29 13 27 10 52 22 41 40 59 +Card 207: 62 7 22 90 51 96 12 13 36 52 | 48 37 70 24 73 51 83 3 5 77 29 87 23 18 26 76 19 97 20 86 84 14 63 33 21 +Card 208: 40 42 5 91 29 59 70 49 23 94 | 82 81 30 61 64 65 19 9 67 75 92 16 26 52 73 43 55 35 17 93 39 90 74 53 51 diff --git a/2023/day05/Main.hs b/2023/day05/Main.hs new file mode 100644 index 0000000..e7c71e8 --- /dev/null +++ b/2023/day05/Main.hs @@ -0,0 +1,24 @@ +import Data.List.Split +import Data.List + +toMapFn :: [(Int, Int)] -> Int -> Int +toMapFn map seed + | Just (d,s) <- find (\(drs, srs) -> srs == seed) map = d + | otherwise = seed + +main :: IO () +main = do + lines <- lines <$> getContents + + let sections = splitOn [""] lines + let seeds = map read $ tail $ splitOn [' '] (sections!!0!!0) :: [Int] + + let maps = map (\(_:xs) -> (map (\l -> map (\i -> (read i) :: Int) (splitOn [' '] l)) xs)) (tail sections) + let myMaps = map (\m -> concat (map (\[drs, srs, r] -> zip [drs..(drs+r)] [srs..(srs+r)]) m)) maps + let myMapFns = map (toMapFn) myMaps + let myFn = foldr (.) id (reverse myMapFns) + + print (minimum (map myFn seeds)) + + -- mapM_ putStrLn lines + diff --git a/2023/day05/Main2.hs b/2023/day05/Main2.hs new file mode 100644 index 0000000..3a57caa --- /dev/null +++ b/2023/day05/Main2.hs @@ -0,0 +1,52 @@ +import Data.List.Split +import Data.List +import Data.Maybe + +windows :: [a] -> [[a]] +windows = filter (\xs -> length xs == 2) . map (take 2) . tails + +genBetweens :: [[Int]] -> [[Int]] +genBetweens section = map (\[[dl, sl, rl], [du, su, ru]] -> [sl + rl, sl + rl, su + ru - sl]) (windows section) + +-- 79 14 +-- +-- 50 98 2 +-- 52 50 48 +sectionToRange :: [Int] -> [Int] -> [Int] +sectionToRange [d,s,r] [start,range] + | begin <= s + r - 1 && end >= s = [d + (begin - s), end - begin + 1] + | otherwise = [start, range] + where + begin = max start s + end = min (start+range -1) (s+r-1) + +toMapFn :: [[Int]] -> [[Int]] -> [[Int]] +toMapFn section seedPairs = nub $ filter (/= []) $ concat $ map (\f -> (map (f) seedPairs)) (map (sectionToRange) section) + +main :: IO () +main = do + lines <- lines <$> getContents + + let sections = splitOn [""] lines + let seeds = map read $ tail $ splitOn [' '] (sections!!0!!0) :: [Int] + let seedPairs = chunksOf 2 seeds + + let maps = map (\(_:xs) -> (map (\l -> map (\i -> (read i) :: Int) (splitOn [' '] l)) xs)) (tail sections) + let mapsBetweens = map (\x -> [0, 0, (x!!0!!2 -1)] ++ mapBetweens map ++ maps ++ [(last x)!!1 + (last x)!!2, (last x)!!1 + (last x)!!2, (maxBound :: Int) - (last x)!!1 + (last x)!!2] ) maps + let myMapFns = map (toMapFn) maps + let myFn = foldr (.) id (reverse myMapFns) + + let seedRanges = concat $ map (\seedPair -> myFn [seedPair]) seedPairs + + print ((myMapFns!!0) [seedPairs!!0]) + -- print ((myMapFns!!1) ((myMapFns!!0) [seedPairs!!0])) + -- print ((myFn) [seedPairs!!0]) + -- print ((map (head) ((myFn) [seedPairs!!0]))) + -- print ((map (head) ((myFn) [seedPairs!!0]))) + -- print seedRanges + -- print ((map (\[start, range] -> start) seedRanges)) + -- print (minimum (map (\[start, range] -> start) seedRanges)) + + + -- mapM_ putStrLn lines + diff --git a/2023/day05/MainOpt.hs b/2023/day05/MainOpt.hs new file mode 100644 index 0000000..9b883e6 --- /dev/null +++ b/2023/day05/MainOpt.hs @@ -0,0 +1,23 @@ +import Data.List.Split +import Data.List + +toMapFn :: [[Int]] -> Int -> Int +toMapFn map seed + | Just [d,s, r] <- find (\[drs, srs, r] -> (srs <= seed) && (seed <= srs + r)) map = d + (seed - s) + | otherwise = seed + +main :: IO () +main = do + lines <- lines <$> getContents + + let sections = splitOn [""] lines + let seeds = map read $ tail $ splitOn [' '] (sections!!0!!0) :: [Int] + + let maps = map (\(_:xs) -> (map (\l -> map (\i -> (read i) :: Int) (splitOn [' '] l)) xs)) (tail sections) + let myMapFns = map (toMapFn) maps + let myFn = foldr (.) id (reverse myMapFns) + + print (minimum (map myFn seeds)) + + -- mapM_ putStrLn lines + diff --git a/2023/day05/example.txt b/2023/day05/example.txt new file mode 100644 index 0000000..f756727 --- /dev/null +++ b/2023/day05/example.txt @@ -0,0 +1,33 @@ +seeds: 79 14 55 13 + +seed-to-soil map: +50 98 2 +52 50 48 + +soil-to-fertilizer map: +0 15 37 +37 52 2 +39 0 15 + +fertilizer-to-water map: +49 53 8 +0 11 42 +42 0 7 +57 7 4 + +water-to-light map: +88 18 7 +18 25 70 + +light-to-temperature map: +45 77 23 +81 45 19 +68 64 13 + +temperature-to-humidity map: +0 69 1 +1 0 69 + +humidity-to-location map: +60 56 37 +56 93 4 diff --git a/2023/day05/input.txt b/2023/day05/input.txt new file mode 100644 index 0000000..2fb1f85 --- /dev/null +++ b/2023/day05/input.txt @@ -0,0 +1,197 @@ +seeds: 3082872446 316680412 2769223903 74043323 4131958457 99539464 109726392 353536902 619902767 648714498 3762874676 148318192 1545670780 343889780 4259893555 6139816 3980757676 20172062 2199623551 196958359 + +seed-to-soil map: +2211745924 1281207339 39747980 +3648083739 2564129012 145170114 +4171944574 2333022880 44675857 +540694760 848661020 78793182 +256996824 588160543 260500477 +1870557289 1804847051 174857657 +3877597859 2853012070 228980636 +1634159465 2150723562 100770342 +3793253853 2293912908 39109972 +652571990 567856215 20304328 +2480343183 3372556760 130573730 +1831144195 528443121 39413094 +0 1690920197 113926854 +3145720856 3081992706 290564054 +624623106 1979704708 27948884 +3844601856 3751059243 32996003 +1260492360 1175075910 106131429 +1366623789 166330978 138490835 +1175000149 927454202 85492211 +696570061 1596389312 94530885 +2647046837 3784055246 498674019 +4216620431 2709299126 78346865 +953230443 1450000160 146389152 +791100946 1012946413 162129497 +1734929807 427093569 96214388 +672876318 403399826 23693743 +113926854 2007653592 143069970 +2045414946 0 166330978 +1099619595 328019272 75380554 +3832363825 4282729265 12238031 +619487942 523307957 5135164 +517497301 304821813 23197459 +2293912908 2377698737 186430275 +1505114624 1320955319 129044841 +2610916913 3714929319 36129924 +3436284910 3503130490 211798829 +4106578495 2787645991 65366079 + +soil-to-fertilizer map: +2733576308 471599794 76965554 +1171423854 1329782324 37554133 +2640052871 928987130 93523437 +2015828352 548565348 204028986 +3562821857 3651707516 643259780 +1208977987 2596877127 12575372 +778871551 2204324824 392552303 +1221553359 2609452499 201089363 +3520687457 3069361301 42134400 +4240454288 3542205804 54513008 +2219857338 1367336457 420195533 +3034988650 3111495701 430710103 +307271757 0 471599794 +1422642722 2082393746 121931078 +3465698753 3596718812 54988704 +0 1022510567 307271757 +1544573800 1787531990 294861756 +4206081637 3034988650 34372651 +1839435556 752594334 176392796 + +fertilizer-to-water map: +1807260819 3957534991 337432305 +774926879 2718324291 701236360 +2351569884 1690420176 794087185 +313174888 2484507361 233816930 +3145657069 541109949 949949029 +546991818 313174888 227935061 +2144693124 3750658231 206876760 +4095606098 1491058978 199361198 +1476163239 3419560651 331097580 + +water-to-light map: +3834982820 3688486185 202897824 +2016707141 372287565 116618935 +3386838019 3412408553 81116937 +1125723906 705568567 205087174 +4037880644 1840142480 150018623 +2359176858 4109550629 126312910 +3328178239 4050890849 58659780 +1801115923 3893484758 43944958 +1516002989 1645262885 194879595 +3501845456 488906500 216662067 +1373868013 2223115169 142134976 +3467954956 3641943956 33890500 +1845060881 3937429716 113461133 +3718507523 910655741 57371540 +3315526510 3675834456 12651729 +2936874590 2031117287 84929853 +1710882584 3551710617 90233339 +372287565 2365250145 753436341 +2133326076 968027281 225850782 +1330811080 1990161103 40956184 +1958522014 3493525490 58185127 +3021804443 3118686486 293722067 +2485489768 1193878063 451384822 +3775879063 4235863539 59103757 +1371767264 3891384009 2100749 +4187899267 2116047140 107068029 + +light-to-temperature map: +156743496 2059819668 37694357 +4058204935 4136802755 38991573 +2484168315 1803830764 54458297 +2053264847 2531370441 7735546 +586814267 2539105987 96956250 +2538626612 2097514025 117228608 +4097196508 3782742182 197770788 +1246999413 607900903 25957627 +1877009740 1752361784 30081637 +683770517 3121708332 89729874 +1835387899 343006762 41621841 +1806332066 3242032508 29055833 +2212907940 137512351 205494411 +809588378 2954088675 69458905 +1689902424 3271088341 436818 +3306521233 894737794 308504080 +3235066415 3050253514 71454818 +1147299995 1960120250 99699418 +2046683718 749851354 6581129 +3782742182 4222506720 5456115 +2061000393 756432483 138305311 +792839631 591152156 16748747 +1478425864 2742612115 211476560 +2793367571 2636062237 73608402 +2471831801 2214742633 12336514 +194437853 1622309324 130052460 +3901915150 3980512970 156289785 +2655855220 0 137512351 +324490313 1359985370 262323954 +3855202758 4175794328 46712392 +2445108285 1782443421 21387343 +2467550357 3211438206 4281444 +3788198297 4227962835 67004461 +2199305704 2709670639 13602236 +1272957040 385683332 205468824 +1690339242 633858530 115992824 +1907091377 2227079147 139592341 +0 1203241874 156743496 +2866975973 1858289061 24590288 +1120987137 3215719650 26312858 +2891566261 3271525159 343500154 +2466495628 384628603 1054729 +1043746236 1882879349 77240901 +879047283 2366671488 164698953 +773500391 2723272875 19339240 +2418402351 3023547580 26705934 + +temperature-to-humidity map: +159374282 333555332 155635040 +2263203984 507165487 202752561 +1337996197 836383358 269347352 +733930089 139752127 104367475 +2840449774 3878218681 416748615 +3373626730 3111757526 416998602 +3943881399 2795875886 241056063 +3790625332 2642619819 153256067 +3298801153 3036931949 30341941 +1671783850 1980182260 485774285 +0 313933177 19622155 +2642619819 3680388726 197829955 +2157558135 1398186167 105645849 +4283100212 3528756128 11867084 +843670838 1503832016 347905328 +1607343549 244119602 64440301 +315009322 709918048 126465310 +441474632 1105730710 292455457 +3257198389 3540623212 41602764 +838297564 308559903 5373274 +1320021082 489190372 17975115 +4184937462 3582225976 98162750 +1191576166 1851737344 128444916 +3329143094 3067273890 44483636 +19622155 0 139752127 + +humidity-to-location map: +3728200417 3220538748 36833684 +1907946842 1065499951 70751518 +1978698360 2011387412 298481649 +4048923771 3541262102 246043525 +1314245652 402299218 396512619 +577039234 798811837 266688114 +3249926596 2795059130 273974120 +1734859977 229212353 173086865 +2718652009 3787305627 454867466 +1710758271 1405898165 24101706 +843727348 1510857580 66114574 +3765034101 3257372432 283889670 +1179488618 1876630378 134757034 +909841922 1136251469 269646696 +3675406214 4242173093 52794203 +310070062 1576972154 266969172 +229212353 1429999871 80857709 +3523900716 3069033250 151505498 +3173519475 2718652009 76407121 +2277180009 1843941326 32689052 diff --git a/2023/day06/Main.hs b/2023/day06/Main.hs new file mode 100644 index 0000000..c7976b0 --- /dev/null +++ b/2023/day06/Main.hs @@ -0,0 +1,18 @@ +import Data.List.Split (splitOn) + +winsFromTimeDist :: (Int, Int) -> Int +winsFromTimeDist (time, dist) = length $ filter (> dist) $ zipWith (*) [0..time] (reverse [0..time]) + +main :: IO () +main = do + lines <- lines <$> getContents + + -- let values = map (map (\y -> read y :: Int) . splitOn [' '] . drop 9) lines + let values = map (map read . filter (/= "") . splitOn [' '] . drop 9) lines :: [[Int]] + let time_dist = zip (values!!0) (values!!1) + let wins = map winsFromTimeDist time_dist + let result = product wins + + print result + + diff --git a/2023/day06/Main2.hs b/2023/day06/Main2.hs new file mode 100644 index 0000000..ca975dd --- /dev/null +++ b/2023/day06/Main2.hs @@ -0,0 +1,16 @@ +import Data.List.Split (splitOn) + +winsFromTimeDist :: (Int, Int) -> Int +winsFromTimeDist (time, dist) = length $ filter (> dist) $ zipWith (*) [0..time] (reverse [0..time]) + +main :: IO () +main = do + lines <- lines <$> getContents + + -- let values = map (map (\y -> read y :: Int) . splitOn [' '] . drop 9) lines + let values = map (read . filter (/= ' ') . drop 9) lines :: [Int] + let wins = winsFromTimeDist (values!!0, values!!1) + + print wins + + diff --git a/2023/day06/example.txt b/2023/day06/example.txt new file mode 100644 index 0000000..28f5ae9 --- /dev/null +++ b/2023/day06/example.txt @@ -0,0 +1,2 @@ +Time: 7 15 30 +Distance: 9 40 200 diff --git a/2023/day06/input.txt b/2023/day06/input.txt new file mode 100644 index 0000000..bb5cfbc --- /dev/null +++ b/2023/day06/input.txt @@ -0,0 +1,2 @@ +Time: 38 94 79 70 +Distance: 241 1549 1074 1091 -- cgit v1.2.3