diff --git a/AOC22.cabal b/AOC22.cabal index 22e99d3..916ec79 100644 --- a/AOC22.cabal +++ b/AOC22.cabal @@ -29,6 +29,15 @@ executable AOC22-exe AOCUtil Days.Day01 Days.Day02 + Days.Day03 + Days.Day04 + Days.Day05 + Days.Day06 + Days.Day07 + Days.Day08 + Days.Day09 + Days.Day10 + Days.Day11 Paths_AOC22 hs-source-dirs: src @@ -36,4 +45,6 @@ executable AOC22-exe build-depends: AOC22 , base >=4.7 && <5 + , ghc + , modular-arithmetic default-language: Haskell2010 diff --git a/data/day03.txt b/data/day03.txt new file mode 100644 index 0000000..6da1d58 --- /dev/null +++ b/data/day03.txt @@ -0,0 +1,300 @@ +shzsFcPssFhjFssBzdpRcNHNZrpdJdJVJZ +fwvMCntfCCbSbSbtDgDNrDtDtJHZVH +GbCwwbwwnGrLhBzjFFFsWPhL +PpCqRsqqmmtCwMJC +LHFrLLHDSNHlfWNhDzmjzzJlJzPJMvPJjQ +SGSWDNrhZhPDSWDZLgVVRgbRppgpGVnpnn +GRRjbVjmJZlgMRzzrN +FpDptHpfHfnpPTvDFTWpFPnPcMfNCClNrzcVcrMMzVsCZlsZ +TFTQDnvLHPFDtVbLwbjdGjdwwJ +lhljvvhCjjzhjszzBPmnmGVZMGzG +FbTcTwbtSFdtcMPnTBPQVnnBZT +SFMpHDtNDSSbSdwppvgJWjJCJJgWgvlJHH +wzNCWpzCzJnWWpRRNdJrgHLhjfbLrHrchV +lBMStmPmmLQDPQZlshrdhgrfrcrrddgHgs +mvGDGQSvDPBlGMLGCvCWpNvpzRWFwqRw +stBttBThtDZqPWssPWZp +gRggwwggCGFSBBvPRpHZZrHdZLZq +ccFJGCNJmmGQzbTDhnQhBBnB +HJqMqtZbJMmJTqtLtVMqhpfphNdQfhfzzjhhlHll +rWSBrnwFwWCvwWCwBgPgCgzjQccQhhgRzcdQzjfcNfzR +CWBCwCvCvvwssWLMtJJGMdMZJsGV +nFwSFQwsNrrsssSwCrhrCNnfcCRgJRMJTJcMfRzMCMCRvW +DdbGdLZLttllWWvTzgzzgR +ZqGzPdLtDjBjDZGPZVmnhQFwqrFQhVFnss +sNNpCjttjsJjSpgpWjslCTnqqSVffrnhSfDhmhrhfm +dBwcGzbPBHbbwZcwJbcTTFDFFFDVrdVmFdnDqf +HzGcczQPHGwzPzGHRctWlvRgtvJlvNlJvRNj +cFNCFdvcCHvFBCZcwBfRSpttGhDmCghGShmSRt +QjLnTTzQVzTTnLMqhDgPhGDDSjGPrgSh +TTJGnJJlLQdNWZWJNBJZ +WHBpHcMDZHLDbHLtGCnmRmLNGmRqvsCC +PzTFzPPTJzrSbGsvnmqfsqfqRz +dJSQQdVFQgjTrjQPWcWHbBVcZVccZtWp +JDtnRtJzNzTTNlHc +rQPJFrLPGMMwrGPFwjFMVLjSTWHdWBTdSWdWZlcWTHlZ +MGFrCvLLwrwPFVVhvLMGGtnqfsmRJgDnqbRgfbqmfC +jnTtFjcSSvctJjznzvFmpqqPMqQDRVpRqPzqQzVQ +bhHBfrWpfHsfGNllRrRCPqDCqPqq +gsGZZpbWgbwHWGNgfZNjvLSTTjtnTgjSSSSJmL +RLQNdVNnRQdQHVVLGpspNqvtsqptqpTtsp +MlRWwbRBBFMFjCTFTTFDvj +WmlWBmBwwmrndnmLRHRQ +WnftJWlfnWSHGCjWWWSCFqFGBDqBwMcDmmMmGmqD +pTNhpTrPhhhRPzbhrppLhThLgqDmwccwqPBmMMqnFBcwwmBB +ZrhQTpzdjSVVtnvZ +jgtnJtBjtlTdJBZJVQBngQGDCGWpPGCcPWCbWdWMbcpP +wHstNNttSHPDmHcMCp +rrFFSvLLNfsFtNSqrtfrhsNjjVTBVgVvnTBvTQvjTgjVZz +qhZwlqFqFwlJwrDHqHcDvgcNzv +RCCTQmjCbQTBtRTbjJRDpBrgDHPPpPDvHccDPc +VmjVWstQJhlJlGVJ +GggpGwZmgvgJMvbJFQQDbDFbBbFCQDCW +rtrLzNLtNSPnNqDSQDcQCWlqBQ +VtzdRPtztLtVRtZmmMTRwCGZpMwp +vtvqjsCqtshfjcWFHWGjGFJj +zGrnzDDMpPcTHcSTVTJP +DbDwMbZRDrZdBBnMznZMGZDfwtlgQhsqCttClsqvsLfCff +JLzLtLsrzsQdvrWRwMHwcc +qPmCTzlPjljjFTZmWwcwwvHMMRWwHvMm +PFqZnVCqTCNjCzNgQsbGBLzLQQ +CBnppDHllVpPCBshBHpjDTSmZcSrfwvmJcDDTJfw +dFRLdLFQzNSTBTSNmBJv +FzFFzRMBFWtQlPlsjjPVMnhC +CVCfwnfdVvBdBbTNTT +LNzsHPNWsDjTZqDHqT +PtLgQsGQLSzWLstPgGWcgQLSNrpplffrnrNhpVCwlGVlrwMn +jPPVqPsHffzVnHzvSgMcCJGGMSVCll +pdbpDpBLNmNNppJgcvgSllGjDSGQ +hrbBwLpjLhhhNZLhNrhZZLHzfsztFzzsrtHfRFnFfRHf +tdjBdbmSfdHBdHHmZlWjFrnlWQlqvMFvFn +pDNDJhLhPVPLLLJphJLwNcwnQTcWWTqTrqMWTZvqMrlvFM +gpVLhNwpgZJCghCLDNwphgmsBdzHHHmSstmfggzdbR +TfMpfMBVftLMDBSjWDHgzHbgwLgHHvdzggzs +QJnZcFFnZRHdHjJvwgdg +RjjRRnmNmmZNjZqZnQcVffBrWqVTqrtffTSTVV +fZTdTVcVjrjdBzdTnGtgnnGSHHNFGn +thMWPtPMslmGnWnNnS +thvbMvQMRphhLCjrzBjZVdcQfC +MpmgZFgMGdrFrBCVnJ +JsbJlTTlvLQbVffRRvBBRVjd +LWlbhHlJhLTJmmGcMMHNmNgN +bhvmhPrbhqNqQRRGzQjVvvRL +wTwBZDBTwwggfnngcDfdsVVFQCdzCzDVRsFdQs +pngWMcgzMgpZWncnMpWNrbNHrNbmHhltWlbl +nPndBjLPscWSccBVGnScsSzMdhMppMthdMgpMgrzvhhp +CCFTFDwqZqCCJmhvpDzztVzDNztp +qQFJTbRVbmCfwTwfmnnssWBGnLnWlRLSGn +JRlJDSvLRRCdvmDSvdlbZNVBSWZGNgWsZGNgZBVs +QrjPMqMnLzzjLjFnNNgBpsgtgGGGVZ +hrjrFqjqFrQfMHPhQzDvvCLJdwwwmvbJbwDH +HDGrDDDpNsGQNdZQ +jpjgtgjSjpjllfZZtZsvNdtshqqq +cbgMfjclWTJcMwjWJfpfmVPLPBnVBHnmVbnmLBbD +rPrMZNsNrsvrwqvFFFdgQWNzLJJzRW +pStppStHmcmHpgVSllVcbVbWWDdLFhdbzdRRFhJFLLRF +cltCHmCBmtSlgjpllgGvTwPZPMfZvPsCMCwZvC +FRQQMdlFMDWRFQRQMQQDWdFbSSSVJSBbJSlBVVBnPJnzJL +rsftPfhsrgwznSzzHSLgJG +fhNsjrjhvsTTvdjcCRMRMRPcCW +tRtJttHFrjtDQHHBQMMBgMBSghhZQb +vqWPLpLvqrmPdmqwvqfmPhNBBBlSnbwbgnlnlhNSZZ +pGpdfzLLspddmqsqPvfvvPpGTVcJJCDRjHrccRtDjcRDFD +GJMHCdTMWJRhSTlhhSPllt +fVvqpfBFrqvqNzzgVDFrpDPmSVtQSlSmhjwltlRtmVhn +pzpBNDBzfDrsNsDRJJRdCssMLdLZWZ +hFfvWWvdpCwwcwFhphpcZCMmllHLfmbQlbrQLBJmGgQrQm +nVSNGjGzzSVNTsjzSJrbSrHBSHlrrmQHJB +PttTNsTRVnNjNqRnzRzRWCCCcpMCWGPMwwFZvFwW +DvZbFnDDsqDBwwRQgNBm +HhWpWWRMWChlChdHLlGlGtQtggSNPSSpgPmNgPJQtw +CMlWGMhhCVHlLCdHTHdrGHdbzjVqnzcvqqjRjFbbzbFFqR +ZZgCNqqBmjZsNgZCqJgNBdrLFHbBrWlPdHWFbPnHPW +TVwTDfzDwSDzmcSTcrzdbllnHPHdFlLzbF +tvDQwVtVvDVmtRsNMgRpJg +BBpDCpNJnmnpnDDmDGGmtTzqHcGTvTTjTbGjHLVcLb +swNNhPwwHzTVwwHw +rPRlPRhSQmmBDpnNfl +pbRhffPzcPDmfcNTpVBLpBjMGBGjZLLg +ssrCsqrszgJjZMqZLQ +SzCwnsllCrssvdrvwzPmDmPPbFRbSThPTPDD +QWLfcfczQQpcDTpLPfdZRRvRRVqbFWvZbvtqvv +NsGGJBhCmNdZVqsbdssZ +rMwwwBBJMrdzPfQMpzMnLQ +rdtCQhrCtQQprtTWQCHFjPgGBPdFPgvBqRRPqB +lsVsSnVSbLmmgBcgTLTFGgvq +wTTDTszsbzMDppJrJhDQ +ZlmsGLBVCBBZFCFFHqcHVvQhqVQSSHpH +dbbTRMrRwwzDfrTbFtMvcptvHFQQpqtc +gdJTDWgfwDwTwmgmNPnNsgFBlZ +PWhWhGFzzzrLdHCPccbJQJcHPD +NRpVTpTgRWVlHJNHMcHQMb +pSRSpVSZWRSTZjgTRTWnFLdZLrrndhdzZvtvzn +LgctLgVBVLhlPjqRhBLVcVlhbDDcGnNGfwCrbNDnrGbGCJNw +HmppHMWWmQmMqZZHWQrDDfDCffJrDGJrCb +qpWZsZZZMZWTLPhTRgTtThRP +hfhQfFQWzBfhfTQdmzdLDtDjtvHLjt +qsgpcqMNRmgpqsCwpCmZDvjwvdddHZHvZDtrrd +SgmNmqScbTSJbhJQ +dvMTQvTnZJsrQdbbSvMVZMblDwlflfDGgwwHcfGjPfjjrG +FqBLpBpFpFzRzqNFmgjGlDRHcwPPGwgcgs +tLNtWshsLLqWMJhTQVVbhvJd +bgZLMZgzbbLCcPCbMZbcNMgBqSTqSWVtSzvvTTBTqBvRBW +FhQpJQnGrlhGlrnTqRtTRJqSwDwtVR +FqlnnFnqFHnGHHdNZdbZbCNMdPLMPb +HHFnbftcfnfbbTbTnHTNVZZzJlPQlFrFzVJFZsdr +mvpGCBgwqCvLCqvMQWWzsQQWlPzwzsrV +hpGSGgqSvqbHcnhfVfct +lGVrnHsGcnVHzscrlGjHcrHqqWPlJCPJClTLLqCSPLPdqS +fRbwbtMQZtMMRFMSqfJTTWCTJPJCmd +ggdvtvdbVVGnpDGg +BnBjTcbnvhjjlMnNJJfnDnQDGdNDfP +qwFqVSWwqLpWFmFVCSqFpDDCJNJRQTRfRDGPfdfDQN +zwHwWVVWWFSqqwWTLqzzztHMvBhlcghblMlcttMllh +PFFNPNPmlFllbctNLmcjBstrsVrQHJSSHHSnnB +fddfDhdwGhTWWTDMwMggssjsjndsBsjsnSrVqSVV +MCvvTWvRMwCvGPpzCcmbplpCVC +thTqlPPTNbGNhGdqRRhRrNtFWnDnvvFZDpnFvfQDZtvWvv +HcMzVcVVcHrgHzcMcmmgfQvFQnMjnWDjfnvjQFfQ +VSmHJLHBJrTrJTlT +NjnsHjLLjNRddNdBFBSR +ftsbqfDcDqsrDtqsfSVBhJVFJgdBRVFS +wvDqwtDlsDDczjzjHvLzLQQM +qDwstwDtRfpJfVhBVZBMvnlRvv +zSFzQHFWdgZBVTZhTzrp +NHdggjGjWHQFPWHNPPbpJfPDtCwCtqDqJfbt +pvnbqHvnTvlCCpjsBsMGBGWWPp +RJSJhJCRVJmJwScrhSJdfwFsBGhZBjhGFFFFGgFPGhZW +cdRrdmwtfcdSmLtcSCQlvQNqQTlqqvtTlv +rnSlSrgWjVGpTTRhSffpRd +HtgHPsNNgNHszPcTBphMdhHhBcTc +JNNbZPZZsszNmtDbPgsmJlwFvWVnCwrlmWlnjnGvCC +WrVBVgVGGQCrSTTqvVjDqDjv +FmwRRwwRQhhLFMjFMzdqSSzS +RcJtbnnLtQWrGHcfrP +vpzssjmVjVZWNZzzQwtQwccpQhgtQCct +qDdfLMnMrrTbBLqTqltlTfbGQnghgRwggGgRnhhccCJJcG +MtdLfSSSddMftlrjjzsSWVSjFvjNvs +qTRPpRPzJglzGJzpGRHWHljwDtbwffjtbhjfwNfHmwwf +SZLVdsvrrdFdBcdZvsBdDCNtbmftNwfNbNhCNvtz +MLzzddLsQRppRlQGPq +PDDpdJgtpppGgttgdGdgJFzLjVcvVnnCTrVrRPTLvwnTTC +ZSbHBsSNlZcsfNnnvRrnVjrHwvCC +NmSmsfsfhmzcDmctJW +NbrLfrrLqpqWQHtBzbFttJgcgB +CmwjPPjjjShPvljwvwwjPBFttBtcHzFJcHTRHJRRmT +CCljjDGhvPCVdVSCdPvrrNfnnQsGqMpqqMqnFW +bdPdbcDZlddsZbHjrrgrmZmCZhCGjv +BffLfLVFVMMBRfwMpfzhFGFhGWvWvrhNvvNj +RMBpRSnffBJjSbJqdPHsDcbqtl +BgwGwDDZttDDTNND +WzNNnFRWFtTFlFsh +WJjPpPqqzWRbrqnNqvVvgvvdcBwgdrVBZG +FFbMVMFPvJppgvcvrZMjHlCJWHmHHBlqhCmqChCl +RGQVdVVLnLsQnQnnqWBlBmDRBDWWlhBD +SftLzQndGfVgFfjvvM +npvLlFLTWWqdLnJCmBmmpjQjjmjB +tfgDwzwVVVVtgtrsJtrbjSPQjQmjNBCNBNhPHDHC +ggVzVtMRgzMrvJLqFnnRnnRT +gZFZssWgNZTDwHDWzsFwWDQMMpqqpBPMjFtMPSQFqqqM +vrmvhdnVvQpftStnMN +JCdLddhhdJdcCdrrmCGhlgNsWDWDwWsgwHgHLZHW +vSsSGjSPvjvRSGpFprFbqFpppRfp +ZdmlndtBZbwrwfpWFn +JmdHdBBHtgllZldBhJZldLLBjPVQTfvGPNzQQSjjzPgTGNTs +TjTjBjVrTsLRRrMBsMMgzLqGGqgQHQdCQGgpgd +nbZcmNnPNcbNftvhlhZpgQgCqdSpgCHCqPFzSH +WfcNvtmmNmQlvNcbsWWjMwMVMRDVMDJM +hHHnfZSwHDgHcfclSGSnvrnvBCvWWntvzvzbWWVq +dTJTmspFTsFdRRLvtvLzvvVqtPVtrb +VFMNFpRJNTppTpsJVRcMGgfGfgZwghgGfcGh +lLGvwsMJLCMVnTrCrVdHRd +tbzqtDNNBpNWBtqzfRrFFnrVTTdrQVSVGp +tztfzmfzzPDzgWNNBbhGMlJLsvhJJjGJhGmM +rHrVJQVQVJLggDQQLbTvdCCSTdWLLLbCbS +pNtnwPthmZGRpmPFtqbMSzqffFSdTvbSzW +GpvvshwtmwsZDljjssHjVBVj +SmhJdtJhhzQSrzVhtQbtBRNfnFNSnDNGRfFGGMgR +lHwqPjqwTjLHCWLvPpvNrNMvnNGNfNGNBffGRN +lCrPTrwpPZWlqPlqpWWqZjsmJzbzVtVhhdsJcQdddZVJ +QqpCWHdQdVQlWcQCqcfRjnZZZPDnSPqPhhqZ +tmmzgWGgwJwwStSZZDRnZssR +GbFbLLvgmMMwGgmLCrppQrWVlWrFTHHd +qdqCgSVdVSVqfwsdZhpJspZsph +RjZBbmRlrlmmJwLNNNhLpwhB +vZlRrtTZCzCMfSPT +JBjhCNwjrlJlHJJRsscZrTcvLLgTsLPP +dDztmntCSgbLgqTzgc +fGVWnSMFtVGMNNNQllBjWHJC +dSDhVVdVZtnSgHQGThQvFNQQqF +LcfLRpMpcBpbrJfsbsscBNWRNPRGHvqPdTGPGqPWFH +spmrCcrdJJpLLmcmLLLDlzSzCCjVwZVtgnSZzn +ZJtgPTHtZPZQGbtNzzprVWWVrbrpCD +BRlfcRmBhSMVBqSVfBvNWrDrjWCjjzprCDCl +LfMRSmfqfSLcnnMqVSfccnhZwJFHZFTGZQGFLggwZTZGPJ +BChWddRRRcfmDbfhDP +MgpMFFsvMfGwvLgPjQPzPPmDcztDtw +NFgJpqvpLgqFnWWVNSfnNSCR +zMMMRmMfJpfhpzQJLMVtjtjPntgBtlZlVgJP +SdNbZvZbvbHTNbZbSWTdrTVBglBDlWBjDPDgntPqBDPt +rrNcrFwNdSrfzwMzZMLQQs +JPmCSfHTGJdTCbHgpgqLgRhghhffhg +ZWSSFVSVFQghQvwpphgh +lsDtZjVMMSdCNdbGCbjb +PBQPvDvVVRvQDqLDzJTlzwjz +tGcZTcdgGcncdrFrsTjzJSJqJqqwHSzzSZwq +CgtgdFgcFCMnMgsGFGGQWPQpQTCBvbNpNVVWVT +FHVFWMHMgVhnLWWMpnppfcdZNcPplnfn +RSvSCBSqGgDRjqCpPlPpppTpPjlcNP +zRzsGgJDqJwLVWVFwM +ThhWhNthVWTWqbWbFWbTdBtWSdMlHSlGlCGCdsCMClmnSlMn +DPPpvvfDHfLgDHvzpvPDsssMsmmzsMcClScMMcGG +rgPLHHJJHgZfvvZQQZfrpfFqBBwFBTNTBNBwtthQwVqt +JJgSWDSmSDQCFrhbRLSwLS +VznqzVNsMsZLdqslbRChtbHdHRrwHb +LVfNLMsLTmWDpBpf +cbTsnNpcnnchllFQlMRgJhRP +WddmdMVSBMWSBWjwCJVCPRwPFCQRRC +DWSSfjdSrTpDnHHMbZ +fgsVqqwQQtHhCrDfJH +pvbnBZWBbvWbTdthrJbDmqrmHq +TvZSNSNNSvFMBpqpnLnTBZBFGQwlQFggcFzcVGRlswsRll +zfMcQHzPtRNvlllc +BLnMhbZMLJLNNVtCdNgZgt +BJGFpqMBhBLLMqnwBhbrbhLssjFzssjfDzsmFmjmQFQPjT +JPBJPnpBFrqBJHtjlCjHJcCthM +wQZggQWQGfZFVmmGfDRjlvvNcvlNDhcNttlctt +SfmWfwVFwVGZWQVGSTdTbBpTPSqBbLnnrn +RJqBRJbqpqqJGvqHMmcfczfcjvHQfm +llgVnSWSlsssTnlWjhTcsZMcZcZMZMcccMNmcH +TnFhhllnWCnVCTllLnhhVSrbDDPrdpjRRqjBPRBBpbFJ +mRwRRNDjNTqwDNjNnNRTsQLcQWpQWZJLlLpQWs +PMFGCSzzgbBVzCGShVQZcgWsQLLftttQtlZZ +SlGVldCGGbBPMhPCVSBrNNdjRqjDrNmDnmrRwN +mqGGqGHnqGBCMrnGCbbbLgTTFFNNghHNTj +SdRfcsDPPcDdRzWPWltSlscwTSbShhgpQhgbFLbTQFjwhN +DPWWZzzztsDDtfzlscsPdcWZnVMNVqqGJnBrVqCrMrVvZnBJ +ZgglFCrrrlrWCJswHmwRVmFSwSsP +zhzqBLcjjnpzMzjhTtcqnVGbwssVRmqbHNPbwPsVNH +ftBjzLtptRWdvZlQQZQf +nGpsMncVRMGSnfsBllZdppwrTljZrQ +gcgHmtbCthHWhwBFBWZBlWlWrd +bCDDqHhcqbbtqcqtvJMzsGRsvVfPsfnzJV +TclPvSGZsPZRjhjWDgjp +JtnwHFtJqtwfQfgWgRWhdhjtgdRM +JBwnHwgFFqVJrsGmPvNTPsVvSN +ZJnfZNnDNZJLzNntDtDNNzNWTVBPrrvRRGdBcVRfPPcvfdMr +CFgjFmggQSQQmSggVMMvRdTvBVRjrdrc +mbsqQFqFgwwmgmSbwQWWLDWzpLcLnzZzLbLL +PnwSFSLSTwbbHdtstW +RrDZVVfJNZCmDCfVDVlblZHbddtHScbWbMjt +NmzqhzCCqmzffhCCqrhhLLnPvpnTPPgpGTTBSL +ShhfLSDDFMPQddpMrDgNbjzffqqqzgcjbqZR +sCstmwJwVBtmTltVmTVbRbcbcRvqvrZvBRvZbR +VwCnwnVrrrWShWPHHDdQFL +pbpDpWjZMmFCmmmb +jTjtJLJgJncCFmnJFC +LvhvhTQhBSdRNtLNsSszlGrHSGjZDlGf +JrhvTNJJhhCrtVtcrNLwDBSBwqzDwQVbBLQS +RnCgHmHHGMdPsGMfDlDqlSQbQnQQDbzD +RdPMPsmWHmjfMffPcCWrptcprpFTFrFp diff --git a/data/day04.test b/data/day04.test new file mode 100644 index 0000000..9f9e9cf --- /dev/null +++ b/data/day04.test @@ -0,0 +1,6 @@ +2-4,6-8 +2-3,4-5 +5-7,7-9 +2-8,3-7 +6-6,4-6 +2-6,4-8 diff --git a/data/day04.txt b/data/day04.txt new file mode 100644 index 0000000..c84044f --- /dev/null +++ b/data/day04.txt @@ -0,0 +1,1000 @@ +7-96,6-95 +36-41,35-40 +35-84,83-91 +95-96,5-95 +3-3,4-99 +12-21,21-22 +10-28,10-28 +6-11,10-12 +12-91,76-98 +17-69,18-69 +26-81,7-27 +26-42,57-80 +32-38,33-38 +4-83,5-83 +33-85,34-86 +14-95,6-78 +79-84,78-87 +12-61,11-62 +56-92,55-92 +34-63,9-34 +33-44,33-85 +5-17,16-26 +21-43,21-32 +12-60,59-60 +10-48,10-49 +94-94,71-94 +45-46,24-46 +81-97,82-98 +5-27,27-57 +3-96,2-22 +5-92,2-97 +53-87,76-90 +68-83,82-82 +55-67,55-73 +39-79,78-78 +81-86,87-97 +3-25,2-67 +50-63,62-62 +5-96,5-97 +27-88,28-88 +19-53,20-53 +55-89,55-90 +43-46,43-99 +82-95,56-96 +8-57,8-8 +90-95,2-90 +56-78,34-81 +53-81,54-81 +20-30,9-62 +12-83,11-16 +64-65,63-69 +15-95,15-94 +6-94,4-93 +36-93,8-92 +67-74,68-74 +4-89,5-89 +23-24,22-23 +44-53,45-80 +43-60,43-83 +61-69,62-78 +77-77,25-77 +43-65,43-66 +12-65,13-84 +54-56,54-97 +13-34,33-60 +20-55,55-56 +34-93,35-92 +26-85,27-96 +51-97,9-97 +18-41,17-40 +3-14,14-80 +55-66,8-56 +4-89,64-98 +20-98,20-63 +1-16,15-22 +20-93,41-92 +9-86,8-10 +5-27,27-28 +29-51,30-48 +44-64,44-44 +29-96,2-96 +1-98,13-97 +6-84,18-84 +28-81,27-72 +7-95,6-95 +43-84,78-84 +2-62,35-98 +46-88,9-88 +11-19,10-18 +21-81,22-89 +98-99,78-98 +26-57,25-57 +12-31,10-30 +31-84,32-85 +93-93,91-93 +10-89,8-76 +6-36,7-36 +51-96,95-99 +14-32,5-17 +23-37,34-38 +14-15,22-82 +95-96,72-95 +38-52,53-53 +25-94,25-96 +38-74,37-74 +73-94,41-73 +72-85,35-84 +15-98,14-16 +81-94,82-94 +85-89,85-87 +3-87,3-83 +84-93,4-91 +42-57,42-50 +42-80,23-42 +18-26,18-27 +44-58,44-99 +35-68,3-67 +40-97,41-53 +11-99,12-12 +7-51,12-59 +13-71,68-71 +5-12,4-97 +8-20,20-79 +13-91,12-14 +33-62,18-32 +3-94,5-94 +26-98,26-93 +31-38,30-85 +13-83,14-82 +6-74,73-74 +73-73,45-62 +38-38,38-38 +9-21,4-20 +14-60,13-83 +83-90,83-89 +73-73,6-74 +1-3,3-94 +3-84,3-85 +61-90,81-97 +93-93,23-94 +31-81,81-81 +26-76,75-75 +95-96,94-94 +70-72,71-89 +95-95,4-95 +10-70,9-11 +3-99,4-98 +26-99,26-92 +77-95,78-90 +47-82,48-83 +4-83,82-88 +51-51,42-50 +10-86,11-96 +9-46,39-49 +20-78,20-79 +1-62,2-61 +57-59,58-75 +4-90,28-90 +4-4,4-52 +34-81,35-96 +32-68,67-83 +83-87,84-88 +71-96,71-71 +61-96,95-99 +3-99,1-4 +13-94,12-95 +13-86,14-95 +36-89,35-88 +8-12,12-96 +34-55,33-55 +43-55,56-95 +38-39,7-38 +3-48,47-98 +86-86,5-86 +4-64,4-4 +80-97,41-98 +16-16,30-54 +3-94,4-94 +16-90,15-91 +7-19,7-84 +64-79,8-79 +29-94,94-95 +25-86,24-85 +91-95,90-93 +3-54,3-96 +4-92,6-95 +14-14,14-70 +65-82,83-83 +5-80,18-35 +63-88,44-52 +3-65,1-21 +34-87,49-49 +92-94,48-93 +3-96,3-95 +52-70,51-75 +64-64,7-64 +20-53,21-63 +3-9,6-10 +49-93,50-94 +38-97,38-94 +91-95,92-96 +38-43,38-45 +73-74,19-73 +26-83,82-83 +71-72,71-71 +6-97,6-98 +67-93,90-94 +39-97,40-97 +10-33,33-40 +35-84,34-93 +5-72,73-73 +15-98,14-66 +24-66,25-84 +23-49,11-50 +35-79,34-36 +15-78,16-94 +87-89,6-88 +5-8,7-39 +13-82,2-5 +70-70,14-70 +47-86,87-94 +10-98,9-94 +2-63,1-62 +26-67,26-26 +67-68,66-68 +51-58,49-57 +29-44,41-45 +33-95,34-95 +4-18,4-17 +75-89,75-75 +12-87,11-87 +29-60,31-61 +35-37,36-44 +11-62,10-73 +12-36,12-30 +67-67,67-77 +9-96,10-98 +15-71,12-72 +87-90,15-86 +37-76,37-77 +74-75,73-74 +32-71,31-72 +14-29,29-60 +47-94,36-79 +19-89,16-84 +84-85,77-84 +38-80,7-80 +24-36,25-52 +47-48,47-48 +95-96,34-95 +72-80,72-76 +13-75,12-75 +6-89,5-88 +61-90,21-90 +98-98,1-99 +41-84,41-52 +11-44,11-43 +25-97,25-96 +36-99,35-89 +24-53,23-56 +12-12,12-91 +52-88,52-87 +5-10,5-9 +94-96,7-95 +10-94,9-93 +30-32,31-60 +83-83,9-83 +73-97,60-72 +60-81,38-81 +20-59,19-21 +1-93,74-93 +64-86,17-85 +37-40,37-70 +53-87,24-54 +21-81,20-81 +53-93,54-94 +35-73,39-74 +5-74,6-73 +13-97,24-98 +80-87,81-90 +13-41,42-42 +40-40,40-61 +30-53,31-52 +73-97,74-95 +77-93,78-94 +42-81,43-98 +29-49,18-57 +93-99,97-99 +12-64,12-99 +25-99,46-98 +5-70,11-88 +7-65,7-99 +32-89,31-88 +6-92,1-61 +1-9,10-56 +57-96,97-98 +51-97,98-99 +15-81,14-81 +9-28,10-51 +4-99,4-98 +49-55,49-49 +51-77,43-78 +18-55,19-54 +22-22,22-85 +38-83,37-82 +20-89,4-13 +58-89,1-90 +94-95,55-94 +38-83,69-93 +29-53,52-52 +9-99,10-99 +37-67,37-66 +39-97,19-49 +10-96,9-63 +23-98,75-98 +15-96,15-93 +5-10,9-56 +7-84,3-8 +84-86,73-85 +64-84,39-75 +23-41,22-23 +18-20,16-18 +69-82,69-97 +42-76,43-74 +27-29,16-29 +52-63,55-64 +22-91,96-99 +13-74,12-75 +76-81,76-80 +23-54,20-53 +85-87,47-86 +23-33,22-30 +3-19,19-19 +36-43,43-53 +2-89,1-99 +9-31,8-15 +92-94,64-94 +36-88,35-70 +70-73,68-72 +44-70,33-38 +40-91,40-99 +77-77,15-76 +21-37,30-77 +82-86,61-82 +3-77,3-92 +49-60,15-60 +9-85,65-86 +2-13,12-65 +39-48,47-49 +37-77,37-37 +53-54,54-81 +43-72,42-71 +4-4,5-85 +54-85,85-85 +39-79,40-80 +9-83,8-84 +12-79,3-80 +62-92,61-90 +4-64,62-63 +82-82,9-82 +31-85,43-86 +5-51,4-52 +95-98,98-99 +61-89,89-90 +5-57,30-69 +6-46,6-50 +6-43,12-42 +33-58,32-57 +55-55,56-91 +92-94,42-93 +3-98,98-98 +12-68,3-13 +77-77,78-78 +33-92,91-91 +12-13,13-44 +2-93,1-3 +42-49,41-47 +16-86,3-16 +13-26,26-32 +1-95,46-95 +36-58,37-38 +15-17,18-98 +57-83,70-84 +23-85,5-23 +50-99,8-96 +76-76,75-82 +4-97,98-98 +3-24,11-30 +27-27,13-28 +25-55,23-24 +26-48,26-86 +15-42,14-42 +50-61,50-62 +39-96,3-39 +28-52,43-56 +20-90,61-91 +79-99,99-99 +8-23,8-29 +12-78,12-77 +39-41,27-40 +8-90,5-7 +8-32,20-33 +21-89,22-90 +3-36,3-99 +37-60,36-63 +28-42,5-42 +44-57,40-56 +52-69,43-69 +9-10,8-9 +1-98,1-99 +8-21,3-12 +1-82,1-56 +16-16,5-15 +37-56,38-75 +20-53,19-31 +54-97,97-97 +11-93,10-38 +18-60,7-41 +96-99,8-97 +42-63,63-92 +12-51,50-51 +45-45,44-87 +62-63,16-63 +36-81,36-36 +4-45,1-4 +12-14,7-13 +64-64,60-64 +68-68,67-68 +9-95,94-98 +56-72,55-74 +34-57,34-46 +33-69,33-70 +65-78,64-66 +3-64,63-65 +6-79,6-69 +66-93,93-94 +55-56,36-55 +8-96,7-95 +33-83,33-93 +54-96,55-96 +1-73,5-90 +76-78,61-77 +10-90,9-94 +27-81,16-57 +85-96,86-96 +48-48,11-49 +47-63,48-48 +18-27,18-48 +40-93,40-46 +31-44,32-43 +21-41,34-40 +44-53,44-54 +28-95,7-95 +2-97,1-97 +20-97,96-99 +71-82,20-72 +4-32,4-98 +56-56,23-55 +10-74,73-73 +22-78,21-77 +57-65,56-65 +45-95,12-87 +62-67,62-77 +33-78,31-79 +33-51,32-50 +21-99,26-87 +11-94,98-99 +15-49,15-50 +2-9,10-83 +39-39,16-40 +15-73,40-74 +98-99,6-98 +46-84,46-81 +9-97,9-96 +56-66,36-55 +65-81,66-93 +14-97,70-96 +47-92,46-92 +12-46,13-19 +5-57,25-86 +44-84,45-83 +14-39,31-39 +46-68,32-69 +13-90,17-80 +14-64,15-78 +3-5,4-57 +6-7,13-57 +75-75,6-75 +46-92,45-64 +17-45,16-45 +8-94,52-99 +94-95,6-94 +37-76,36-75 +55-56,6-65 +40-64,28-50 +12-20,21-95 +28-50,47-51 +99-99,7-98 +37-63,33-89 +14-99,13-13 +7-80,7-19 +19-47,18-18 +37-46,47-47 +17-73,4-86 +9-43,10-43 +26-71,25-26 +14-91,1-10 +31-58,30-31 +44-44,22-45 +59-59,59-60 +9-9,9-64 +44-65,45-46 +10-96,96-96 +2-52,2-84 +35-36,35-35 +94-95,81-94 +12-89,13-90 +4-86,4-93 +13-96,4-96 +52-54,53-72 +6-90,5-91 +10-34,10-75 +22-31,22-30 +23-97,9-96 +7-91,83-95 +8-12,8-18 +34-39,35-38 +2-22,3-87 +6-15,7-54 +37-84,36-62 +51-93,51-94 +4-4,5-97 +17-55,33-56 +48-53,50-89 +17-90,18-99 +8-8,29-60 +18-40,32-87 +3-88,3-89 +14-14,15-53 +55-62,55-61 +5-96,58-97 +50-59,50-98 +37-86,38-86 +1-56,11-68 +65-75,66-69 +66-84,73-92 +99-99,2-99 +99-99,13-99 +65-88,6-93 +13-89,90-90 +41-64,40-63 +21-66,22-66 +57-92,56-93 +57-78,78-92 +94-98,11-94 +10-53,27-54 +37-42,38-42 +17-97,1-17 +39-86,39-85 +6-6,7-43 +20-55,21-55 +93-93,7-94 +73-74,75-95 +29-88,28-72 +40-90,22-86 +75-75,20-76 +15-72,4-74 +69-82,64-81 +21-23,21-59 +56-70,68-73 +9-94,95-95 +4-6,8-53 +7-20,19-45 +25-41,26-40 +62-72,61-74 +79-95,49-79 +2-96,1-95 +19-33,25-59 +8-90,7-91 +28-91,90-92 +11-20,19-88 +5-30,6-10 +8-99,8-8 +90-99,94-99 +19-77,19-94 +37-58,37-63 +23-44,3-45 +6-98,5-98 +9-42,6-9 +66-75,71-76 +58-87,86-88 +40-48,40-49 +17-24,17-48 +3-97,2-32 +37-88,37-89 +3-89,5-25 +19-61,13-20 +5-67,3-6 +72-73,15-72 +36-78,75-79 +6-92,7-91 +28-97,27-98 +56-56,14-56 +2-92,1-92 +1-7,7-82 +34-71,11-72 +5-96,5-83 +23-71,67-73 +25-93,25-94 +2-99,1-2 +21-73,11-73 +57-63,56-62 +30-33,33-34 +77-77,31-77 +13-78,14-96 +17-80,46-93 +17-46,1-17 +42-50,41-87 +31-84,4-31 +39-80,18-79 +13-31,14-84 +2-96,3-94 +8-98,9-67 +22-60,22-22 +16-97,15-99 +82-93,82-82 +57-77,22-70 +96-97,13-96 +17-41,41-85 +17-72,17-98 +12-96,4-96 +15-18,17-19 +33-53,33-59 +34-41,35-64 +94-98,27-93 +98-98,1-98 +57-69,32-70 +67-89,66-67 +66-72,73-73 +5-43,5-73 +26-98,27-68 +16-80,15-81 +2-65,2-55 +82-92,82-93 +16-16,16-21 +2-19,4-48 +82-82,56-81 +2-97,1-97 +53-54,38-53 +20-87,21-88 +45-60,44-56 +4-4,5-92 +95-95,79-95 +21-71,7-72 +57-83,58-83 +4-66,11-67 +57-57,58-92 +17-91,17-76 +14-15,15-56 +4-4,4-98 +7-98,15-68 +28-94,94-94 +3-47,27-47 +4-33,12-69 +48-56,48-57 +3-26,5-65 +46-71,46-72 +9-98,37-99 +60-76,18-75 +26-26,26-27 +31-56,31-57 +96-96,4-96 +55-82,55-83 +25-26,26-48 +59-71,54-56 +69-70,7-69 +2-98,98-98 +24-74,75-92 +61-96,61-86 +1-73,1-1 +57-86,56-67 +9-94,94-94 +52-52,53-98 +4-7,2-8 +35-63,34-60 +29-94,29-71 +43-89,44-90 +13-17,12-15 +52-58,51-79 +51-94,12-93 +24-52,24-26 +14-53,53-54 +26-91,26-64 +18-78,65-79 +27-64,55-87 +40-67,68-68 +25-70,24-70 +1-82,81-94 +17-19,18-89 +18-18,17-18 +33-60,57-72 +51-73,52-99 +41-98,42-98 +8-25,14-34 +2-17,1-62 +26-40,21-40 +2-21,3-16 +72-85,72-98 +41-86,14-58 +14-16,30-60 +96-97,22-96 +12-57,12-58 +16-74,15-75 +8-61,7-36 +37-56,36-67 +6-99,6-87 +60-75,60-60 +96-98,67-97 +15-26,25-27 +14-88,87-87 +31-95,32-96 +75-91,53-76 +16-49,17-38 +40-82,41-77 +3-59,2-59 +20-44,20-45 +10-76,9-76 +11-13,12-91 +16-18,17-95 +47-62,33-61 +34-69,19-70 +72-92,91-99 +27-34,28-29 +6-86,2-5 +25-75,25-40 +34-68,35-68 +16-95,16-94 +37-96,37-93 +20-62,20-61 +5-86,4-85 +37-49,35-36 +48-59,48-60 +38-42,39-49 +36-89,37-97 +24-26,25-69 +8-93,21-93 +24-83,23-83 +38-68,37-39 +11-70,34-86 +14-88,13-93 +86-86,47-87 +33-67,32-34 +1-80,80-80 +81-82,8-81 +53-97,5-98 +11-30,1-18 +4-99,3-98 +1-99,77-98 +8-14,15-56 +3-70,2-87 +19-34,34-62 +56-57,57-91 +3-64,2-4 +80-83,84-89 +58-59,1-58 +4-77,5-86 +5-97,3-97 +48-94,26-95 +10-96,7-95 +4-4,6-41 +5-23,4-6 +5-91,90-93 +13-88,89-89 +1-97,90-97 +69-80,69-91 +8-11,11-72 +24-45,36-44 +20-20,20-46 +64-73,65-94 +46-90,47-77 +7-61,61-74 +16-25,25-26 +16-16,15-22 +60-89,61-89 +51-99,52-84 +22-85,22-93 +46-71,45-72 +9-65,10-66 +65-69,60-66 +24-43,23-75 +15-30,3-31 +44-93,26-65 +8-35,8-34 +68-82,2-79 +67-71,18-67 +93-97,93-98 +6-83,2-2 +26-84,27-50 +2-50,49-52 +39-80,40-65 +3-3,4-68 +27-84,36-85 +21-86,20-39 +10-82,9-71 +18-86,40-60 +55-80,23-46 +24-30,23-23 +29-68,30-45 +41-48,42-59 +85-94,88-93 +2-99,98-99 +33-94,94-95 +78-80,3-79 +94-94,16-94 +1-4,3-97 +71-96,52-72 +94-96,95-98 +71-72,72-81 +20-33,32-33 +15-55,15-15 +21-33,33-65 +28-33,27-33 +1-93,57-92 +23-64,63-93 +5-89,4-89 +66-71,68-78 +7-80,2-7 +10-86,9-71 +2-99,2-98 +6-15,5-14 +83-88,60-84 +34-37,33-36 +49-82,82-83 +68-75,61-69 +40-87,16-41 +61-67,64-67 +8-67,7-68 +31-61,30-88 +16-77,16-16 +1-62,63-63 +7-67,2-6 +39-67,8-57 +7-94,11-95 +41-93,73-85 +39-54,47-98 +28-90,2-83 +1-6,6-57 +10-11,9-16 +28-82,27-81 +4-95,5-96 +31-95,8-94 +73-91,33-84 +34-92,15-35 +49-94,6-50 +3-99,2-98 +59-60,34-59 +22-76,22-86 +9-11,10-93 +67-78,77-86 +16-83,15-47 +73-81,72-73 +72-88,2-73 +26-62,27-72 +5-81,5-89 +19-69,20-69 +32-97,32-96 +63-86,32-75 +7-97,7-96 +84-92,91-93 +72-96,2-96 +19-22,19-19 +66-82,65-81 +81-96,65-82 +71-83,35-88 +99-99,1-99 +22-97,22-96 +29-97,29-83 +13-85,84-84 +23-67,23-34 +14-81,13-81 +55-98,16-97 +58-78,38-78 +6-16,3-16 +47-78,46-77 +16-53,15-25 +84-90,83-91 +32-32,31-47 +2-21,4-57 +17-56,49-55 +12-67,67-67 +19-71,42-97 +82-82,63-83 +39-46,18-46 +6-97,1-97 +42-88,43-89 +19-19,19-95 +17-95,4-95 +50-96,50-90 +3-81,1-2 +4-47,7-18 +12-17,7-95 +23-92,23-58 +40-91,91-92 +3-69,69-70 +47-50,46-50 +9-92,9-97 +7-71,4-16 +27-38,74-96 +11-30,30-89 +23-46,22-46 +2-6,5-98 +36-93,35-93 +9-19,19-99 +25-33,32-34 +13-36,14-35 +5-97,4-5 +19-99,20-95 +43-79,54-83 +21-99,20-47 +71-74,70-72 +90-90,3-90 +71-99,71-71 +5-6,6-98 +74-84,74-83 +19-95,19-94 +34-81,38-83 +13-34,5-14 +15-80,15-79 +6-23,5-90 +67-76,67-70 +39-91,14-90 +65-96,64-95 +8-88,52-89 +61-94,89-94 +32-66,66-66 +10-28,15-55 +9-93,8-90 +38-97,39-98 +78-84,77-79 +5-85,3-29 +21-80,80-80 +84-89,88-90 +45-85,12-66 +99-99,1-98 +45-49,48-74 +6-98,3-68 +13-95,94-95 +49-52,51-53 +18-43,6-18 +85-85,20-85 +62-65,61-65 +8-92,9-92 +23-83,22-83 +15-77,77-77 +56-74,55-78 +23-78,22-79 +32-80,33-34 +4-99,11-96 +27-91,16-91 +8-82,8-81 +3-39,28-39 +39-47,39-46 +16-21,34-70 +65-98,65-97 +16-86,16-85 +8-99,33-73 +24-94,19-93 +48-57,56-58 +4-96,3-40 +73-83,17-82 +1-3,2-55 +83-96,96-97 +35-83,66-91 +27-44,16-34 +33-82,31-60 +46-88,45-88 +45-78,58-78 +41-47,40-80 +5-95,4-95 +9-65,10-67 +51-82,68-82 +52-98,36-94 +36-38,37-41 +19-33,9-33 +22-98,21-23 +12-96,11-97 +75-77,11-76 +91-92,12-91 +92-93,4-93 +18-18,17-18 +20-45,44-55 +94-95,61-94 +38-99,39-73 +6-11,11-84 +29-49,9-29 +24-91,24-44 +72-72,28-72 +49-53,49-51 +9-85,8-85 +26-80,26-90 diff --git a/data/day05.txt b/data/day05.txt new file mode 100644 index 0000000..22a2858 --- /dev/null +++ b/data/day05.txt @@ -0,0 +1,515 @@ + [G] [W] [Q] +[Z] [Q] [M] [J] [F] +[V] [V] [S] [F] [N] [R] +[T] [F] [C] [H] [F] [W] [P] +[B] [L] [L] [J] [C] [V] [D] [V] +[J] [V] [F] [N] [T] [T] [C] [Z] [W] +[G] [R] [Q] [H] [Q] [W] [Z] [G] [B] +[R] [J] [S] [Z] [R] [S] [D] [L] [J] + 1 2 3 4 5 6 7 8 9 + +move 6 from 5 to 7 +move 2 from 9 to 1 +move 4 from 8 to 6 +move 1 from 8 to 1 +move 2 from 9 to 1 +move 1 from 6 to 1 +move 13 from 7 to 8 +move 1 from 2 to 8 +move 9 from 1 to 5 +move 1 from 3 to 8 +move 3 from 6 to 7 +move 4 from 4 to 1 +move 11 from 5 to 6 +move 6 from 6 to 9 +move 3 from 4 to 2 +move 7 from 8 to 6 +move 1 from 7 to 5 +move 1 from 4 to 3 +move 7 from 1 to 5 +move 2 from 2 to 7 +move 4 from 9 to 6 +move 1 from 3 to 6 +move 1 from 1 to 9 +move 1 from 3 to 6 +move 1 from 5 to 8 +move 4 from 6 to 7 +move 3 from 8 to 7 +move 7 from 5 to 7 +move 1 from 3 to 1 +move 1 from 2 to 6 +move 14 from 6 to 5 +move 2 from 5 to 2 +move 3 from 9 to 2 +move 6 from 2 to 9 +move 7 from 8 to 6 +move 7 from 7 to 3 +move 2 from 8 to 7 +move 6 from 3 to 7 +move 17 from 7 to 1 +move 1 from 3 to 1 +move 1 from 2 to 5 +move 4 from 5 to 6 +move 17 from 6 to 9 +move 7 from 9 to 4 +move 1 from 2 to 7 +move 2 from 5 to 4 +move 3 from 7 to 8 +move 7 from 5 to 2 +move 6 from 2 to 8 +move 8 from 9 to 6 +move 1 from 2 to 3 +move 8 from 4 to 9 +move 7 from 6 to 9 +move 18 from 1 to 7 +move 1 from 1 to 8 +move 2 from 6 to 9 +move 1 from 3 to 9 +move 1 from 4 to 6 +move 1 from 8 to 3 +move 1 from 3 to 1 +move 10 from 7 to 2 +move 9 from 8 to 4 +move 1 from 6 to 4 +move 2 from 7 to 8 +move 5 from 4 to 9 +move 17 from 9 to 5 +move 2 from 7 to 6 +move 5 from 9 to 7 +move 5 from 4 to 2 +move 8 from 2 to 4 +move 8 from 4 to 3 +move 2 from 6 to 5 +move 2 from 8 to 5 +move 3 from 9 to 3 +move 4 from 7 to 3 +move 6 from 9 to 6 +move 4 from 6 to 9 +move 5 from 9 to 3 +move 8 from 5 to 2 +move 1 from 1 to 9 +move 1 from 6 to 3 +move 1 from 9 to 4 +move 5 from 7 to 4 +move 19 from 3 to 1 +move 4 from 2 to 8 +move 13 from 5 to 1 +move 1 from 6 to 3 +move 3 from 3 to 6 +move 2 from 8 to 9 +move 4 from 2 to 9 +move 2 from 2 to 6 +move 1 from 1 to 6 +move 5 from 1 to 9 +move 10 from 9 to 3 +move 15 from 1 to 6 +move 21 from 6 to 2 +move 20 from 2 to 1 +move 2 from 8 to 9 +move 28 from 1 to 2 +move 6 from 4 to 6 +move 2 from 1 to 5 +move 3 from 3 to 4 +move 2 from 5 to 4 +move 1 from 4 to 3 +move 3 from 4 to 5 +move 2 from 5 to 4 +move 1 from 1 to 8 +move 25 from 2 to 9 +move 1 from 4 to 6 +move 1 from 3 to 8 +move 4 from 3 to 6 +move 1 from 4 to 9 +move 2 from 6 to 3 +move 1 from 5 to 9 +move 5 from 2 to 8 +move 7 from 9 to 6 +move 2 from 9 to 4 +move 3 from 2 to 1 +move 3 from 3 to 4 +move 1 from 3 to 5 +move 16 from 6 to 3 +move 7 from 8 to 3 +move 5 from 4 to 3 +move 1 from 1 to 3 +move 1 from 2 to 6 +move 1 from 5 to 6 +move 21 from 3 to 5 +move 2 from 1 to 2 +move 1 from 6 to 7 +move 10 from 9 to 8 +move 1 from 6 to 5 +move 5 from 8 to 7 +move 12 from 5 to 3 +move 20 from 3 to 6 +move 4 from 7 to 9 +move 1 from 7 to 3 +move 1 from 2 to 5 +move 1 from 3 to 8 +move 2 from 8 to 4 +move 4 from 8 to 7 +move 3 from 6 to 1 +move 1 from 1 to 5 +move 2 from 9 to 2 +move 2 from 1 to 5 +move 2 from 5 to 6 +move 3 from 7 to 1 +move 2 from 1 to 4 +move 4 from 6 to 8 +move 3 from 4 to 7 +move 3 from 2 to 5 +move 2 from 7 to 9 +move 9 from 9 to 8 +move 1 from 4 to 1 +move 7 from 5 to 7 +move 1 from 7 to 8 +move 1 from 3 to 1 +move 4 from 7 to 5 +move 2 from 1 to 9 +move 1 from 1 to 2 +move 5 from 5 to 4 +move 1 from 2 to 6 +move 5 from 7 to 9 +move 5 from 4 to 7 +move 11 from 9 to 6 +move 14 from 8 to 9 +move 23 from 6 to 5 +move 6 from 9 to 5 +move 1 from 6 to 2 +move 10 from 5 to 3 +move 1 from 4 to 9 +move 1 from 2 to 1 +move 2 from 7 to 3 +move 10 from 5 to 7 +move 8 from 5 to 2 +move 5 from 3 to 5 +move 7 from 5 to 8 +move 1 from 2 to 7 +move 9 from 7 to 9 +move 3 from 2 to 3 +move 2 from 6 to 2 +move 2 from 3 to 6 +move 4 from 7 to 5 +move 1 from 1 to 5 +move 4 from 3 to 1 +move 2 from 5 to 2 +move 1 from 3 to 2 +move 2 from 6 to 8 +move 7 from 5 to 3 +move 9 from 2 to 4 +move 2 from 1 to 2 +move 2 from 5 to 3 +move 1 from 4 to 9 +move 1 from 6 to 9 +move 1 from 4 to 2 +move 2 from 1 to 7 +move 3 from 2 to 6 +move 4 from 8 to 7 +move 2 from 8 to 3 +move 2 from 3 to 7 +move 1 from 6 to 5 +move 2 from 8 to 2 +move 5 from 4 to 1 +move 8 from 9 to 8 +move 1 from 5 to 7 +move 10 from 9 to 2 +move 8 from 8 to 2 +move 1 from 1 to 6 +move 12 from 3 to 9 +move 7 from 7 to 4 +move 13 from 2 to 4 +move 7 from 2 to 7 +move 1 from 6 to 7 +move 3 from 9 to 8 +move 2 from 6 to 3 +move 1 from 3 to 2 +move 1 from 3 to 9 +move 3 from 1 to 5 +move 1 from 1 to 6 +move 4 from 7 to 6 +move 5 from 7 to 1 +move 1 from 2 to 1 +move 6 from 9 to 4 +move 5 from 9 to 7 +move 3 from 8 to 3 +move 22 from 4 to 9 +move 24 from 9 to 8 +move 1 from 9 to 2 +move 2 from 4 to 3 +move 10 from 8 to 3 +move 1 from 2 to 1 +move 1 from 3 to 8 +move 1 from 6 to 3 +move 1 from 1 to 4 +move 4 from 3 to 4 +move 4 from 6 to 1 +move 2 from 4 to 5 +move 4 from 7 to 2 +move 7 from 4 to 6 +move 4 from 6 to 1 +move 2 from 6 to 3 +move 1 from 6 to 2 +move 5 from 5 to 2 +move 12 from 3 to 5 +move 3 from 7 to 8 +move 6 from 2 to 3 +move 11 from 1 to 9 +move 1 from 1 to 7 +move 1 from 7 to 5 +move 2 from 3 to 9 +move 2 from 9 to 7 +move 4 from 2 to 5 +move 2 from 7 to 1 +move 17 from 8 to 1 +move 1 from 3 to 2 +move 16 from 1 to 3 +move 8 from 3 to 4 +move 2 from 8 to 3 +move 2 from 1 to 5 +move 1 from 2 to 6 +move 12 from 5 to 8 +move 1 from 6 to 3 +move 9 from 3 to 9 +move 8 from 4 to 6 +move 2 from 1 to 6 +move 6 from 8 to 4 +move 3 from 4 to 6 +move 1 from 1 to 9 +move 11 from 6 to 8 +move 3 from 4 to 3 +move 17 from 9 to 5 +move 2 from 6 to 7 +move 1 from 9 to 1 +move 2 from 8 to 6 +move 1 from 7 to 5 +move 1 from 8 to 9 +move 1 from 1 to 7 +move 3 from 9 to 6 +move 2 from 7 to 8 +move 1 from 9 to 6 +move 15 from 5 to 2 +move 9 from 3 to 9 +move 11 from 8 to 3 +move 6 from 9 to 8 +move 4 from 6 to 7 +move 3 from 3 to 7 +move 5 from 5 to 6 +move 7 from 7 to 5 +move 3 from 6 to 1 +move 2 from 1 to 4 +move 1 from 9 to 2 +move 2 from 9 to 3 +move 2 from 6 to 3 +move 1 from 1 to 8 +move 6 from 5 to 9 +move 8 from 2 to 5 +move 10 from 8 to 5 +move 1 from 2 to 9 +move 21 from 5 to 9 +move 2 from 8 to 4 +move 5 from 9 to 1 +move 2 from 5 to 2 +move 15 from 9 to 2 +move 1 from 5 to 9 +move 9 from 9 to 3 +move 1 from 1 to 6 +move 3 from 4 to 1 +move 20 from 3 to 5 +move 20 from 5 to 4 +move 7 from 4 to 3 +move 1 from 1 to 7 +move 11 from 4 to 5 +move 4 from 3 to 2 +move 11 from 5 to 4 +move 2 from 6 to 7 +move 4 from 3 to 9 +move 2 from 2 to 8 +move 2 from 9 to 4 +move 6 from 4 to 6 +move 2 from 7 to 9 +move 1 from 7 to 6 +move 1 from 4 to 9 +move 4 from 4 to 6 +move 2 from 8 to 6 +move 1 from 4 to 3 +move 1 from 4 to 6 +move 1 from 3 to 1 +move 3 from 4 to 3 +move 9 from 2 to 8 +move 2 from 3 to 7 +move 5 from 6 to 2 +move 2 from 7 to 5 +move 1 from 5 to 2 +move 1 from 9 to 3 +move 1 from 5 to 1 +move 13 from 2 to 5 +move 4 from 9 to 5 +move 1 from 3 to 4 +move 9 from 2 to 3 +move 7 from 3 to 2 +move 11 from 5 to 6 +move 5 from 8 to 7 +move 1 from 3 to 1 +move 2 from 8 to 5 +move 2 from 8 to 1 +move 1 from 4 to 1 +move 6 from 2 to 7 +move 3 from 5 to 3 +move 1 from 2 to 5 +move 7 from 7 to 9 +move 3 from 3 to 5 +move 1 from 2 to 5 +move 2 from 3 to 2 +move 6 from 1 to 7 +move 10 from 7 to 3 +move 1 from 2 to 3 +move 6 from 9 to 8 +move 1 from 2 to 4 +move 2 from 6 to 1 +move 5 from 1 to 9 +move 8 from 5 to 8 +move 2 from 1 to 6 +move 6 from 3 to 4 +move 1 from 5 to 3 +move 4 from 9 to 6 +move 1 from 1 to 4 +move 2 from 9 to 2 +move 5 from 6 to 1 +move 11 from 6 to 7 +move 1 from 2 to 8 +move 6 from 7 to 5 +move 10 from 8 to 4 +move 2 from 3 to 9 +move 3 from 3 to 5 +move 4 from 7 to 9 +move 2 from 1 to 3 +move 10 from 5 to 8 +move 6 from 6 to 1 +move 2 from 6 to 8 +move 2 from 9 to 5 +move 4 from 9 to 6 +move 7 from 4 to 8 +move 5 from 6 to 1 +move 4 from 8 to 2 +move 2 from 5 to 6 +move 5 from 4 to 5 +move 1 from 7 to 5 +move 2 from 3 to 6 +move 1 from 3 to 8 +move 4 from 6 to 1 +move 4 from 2 to 3 +move 5 from 5 to 1 +move 2 from 3 to 2 +move 2 from 3 to 2 +move 20 from 8 to 2 +move 5 from 4 to 8 +move 1 from 4 to 3 +move 8 from 2 to 1 +move 1 from 5 to 6 +move 5 from 2 to 3 +move 1 from 6 to 5 +move 5 from 3 to 2 +move 1 from 3 to 7 +move 6 from 8 to 5 +move 13 from 2 to 9 +move 7 from 9 to 8 +move 1 from 7 to 8 +move 5 from 8 to 3 +move 2 from 2 to 5 +move 2 from 8 to 4 +move 27 from 1 to 5 +move 1 from 2 to 3 +move 5 from 3 to 1 +move 22 from 5 to 7 +move 1 from 8 to 5 +move 1 from 3 to 2 +move 7 from 1 to 3 +move 2 from 3 to 7 +move 2 from 2 to 4 +move 5 from 9 to 1 +move 5 from 3 to 9 +move 3 from 1 to 5 +move 3 from 1 to 6 +move 3 from 6 to 3 +move 4 from 4 to 2 +move 8 from 5 to 3 +move 8 from 7 to 4 +move 14 from 7 to 4 +move 1 from 1 to 7 +move 6 from 9 to 6 +move 7 from 5 to 3 +move 14 from 3 to 6 +move 2 from 2 to 1 +move 4 from 3 to 7 +move 6 from 7 to 6 +move 1 from 7 to 6 +move 1 from 5 to 1 +move 2 from 1 to 5 +move 3 from 5 to 7 +move 8 from 6 to 5 +move 5 from 5 to 1 +move 1 from 7 to 3 +move 1 from 3 to 8 +move 22 from 4 to 7 +move 7 from 6 to 3 +move 4 from 3 to 2 +move 3 from 1 to 3 +move 17 from 7 to 6 +move 1 from 8 to 1 +move 2 from 2 to 4 +move 3 from 7 to 2 +move 2 from 2 to 9 +move 1 from 1 to 8 +move 2 from 3 to 1 +move 6 from 6 to 8 +move 2 from 9 to 2 +move 4 from 5 to 1 +move 5 from 8 to 9 +move 1 from 7 to 3 +move 4 from 3 to 4 +move 1 from 7 to 4 +move 4 from 9 to 7 +move 5 from 7 to 9 +move 1 from 7 to 3 +move 2 from 2 to 8 +move 5 from 4 to 2 +move 21 from 6 to 8 +move 2 from 3 to 8 +move 23 from 8 to 6 +move 1 from 2 to 6 +move 2 from 9 to 8 +move 22 from 6 to 7 +move 2 from 9 to 3 +move 2 from 3 to 7 +move 2 from 1 to 6 +move 1 from 2 to 5 +move 3 from 1 to 3 +move 6 from 7 to 4 +move 5 from 8 to 5 +move 1 from 3 to 8 +move 1 from 9 to 3 +move 6 from 4 to 8 +move 1 from 5 to 3 +move 6 from 2 to 8 +move 15 from 7 to 5 +move 1 from 7 to 1 +move 14 from 5 to 8 +move 1 from 4 to 9 +move 5 from 1 to 7 +move 3 from 6 to 2 +move 4 from 5 to 6 +move 1 from 4 to 8 +move 4 from 3 to 1 +move 2 from 9 to 2 +move 7 from 7 to 1 +move 7 from 2 to 7 +move 9 from 8 to 6 +move 7 from 7 to 1 +move 12 from 6 to 8 +move 25 from 8 to 6 +move 3 from 8 to 1 +move 28 from 6 to 2 +move 15 from 2 to 3 +move 1 from 5 to 4 +move 3 from 2 to 7 +move 6 from 2 to 9 diff --git a/data/day06.txt b/data/day06.txt new file mode 100644 index 0000000..443dbf0 --- /dev/null +++ b/data/day06.txt @@ -0,0 +1 @@ +plhlsssjsrscspsffmrffwvfvrvvmbbnjnrnrfnndlnlznlznlnccdbbhvbvgvmvzmzvmzmbbrcclsslzslzzsztzftzzhggnjgnjnhnmnqnqqfdfnnrwnwsnwwvgvqqgpptvtrvvfmmzjzmmjssmwsmmhzzvvwzwcwrcrllpbppdgdvvwqvvsnsrnsncnwntnggwqgqhqrqprqrddjvddqsqhshchfffzddswdsshhcnhnqqfjffvlvwvssdqqwrwvrvhrvrzzgwggcjcgclcwchhzvzmzrrjwjqwwvbwwrmmvmpmzpzgpgsghgrrtmmlfmmnzzmpzzvmvjjsqqshqshsqqgtqggpvvrtttwbbhnbnlbnlnhnthtjhjshhrmrjjlclpprmrnrsrwrbwrwwjnwnbwbhbmbggdbgghllcvlvddzbdbdvdwvdvjvqvcvczvcvclvvrggrngrrwcwbcczgghnhznhnttbcbvcvttrrpbrppndppvvvgvtgvvhfvhhttppjmjllznlnldnldlwlnwlnlttgzzcfcggwmgmqgmmshmhqqdfqfpfqppprzrhrnrhnrrtsrrgpgnpngnqnmmrtrvtrrfccszszffvlfvlvssvdvvpggvcvscvvpmpgpqpfqqhttrhhsbhbqhhzggzrgrqrfqffwllggrgqqjzqzzsgglvgllsgllptltblbggvrggctczzllvsvcscrrzjrzzjnnbvvtntpntnvtntcntcnnwsnnnvjnnsccsddcvvgzgwggbnbwnwbwmwttzzsgzzjpzztwztwwhhzggplgplggwwwphpmmhchsccmwmttvjtjftffzbfffjljbbqvvstsggbbqrbqrbrhbbrmbmppvrpphptpggqgddtmdtmdmbbbcdbbgssmzzthhtjjrgjrgrzzchzhttgddjnjrjmjllrcrqqsvsjjjhvvphhgjhgjhjccwmcmjcmjmhmzznmmcbcscddcsssnppsnpnmnqmmtztftqtjtqqgvgvjjfnjffqbqbfqqwfqfcfsfttvccnssjvvpfvpvttvpvccwhwfwlwlclljqqststllgqgzqqfpflpplpssnntstqqpnnsrnsrrsvrsvsrvsrrtztmtptpcpssgnnfvflffscsqszzsppfnftfptfpfnfbbwzbzfbbtggrzrnntztnznhnnlbnbrbdddjhjchhdshhnzhnnsrnrrqwrrdsdlsstdsslqsqdqvqzvqvwqqlmmwzmwzwztzlzczhqfrclvgvnlchrggsrjhntctdbpfdcffwjngdvdrjmgvwvptlvlhvhshqphmrdznqbtchcvrwfrpvwhzmrwlcjwnrsgrqcbsgpwjthstvqzlwjjmqbvhhdfdsmqnmnswmwjtpgjhdpgcnvmlcjwjzrjhmrqmqnrqrmgdnbdgznwhgzncmcbzpntcdflvrbfdzwgpnqjqmrcqpbrzwhwdgtgshhmrwvhnrwslvcswjvdgglfrdvmqdspppwmvfzvdbvpcnhmvgfqwnvjvvzrvttwvbjrbjlllmwtlcltvqmwshnqsdtjrptvqjvdjgzwgzzhcdbwjzhdgsptfrtmmqvhsnsnpgwbncbnnvwmmrrjgfccbzcpcjmqvqsbvjrstzblsrngphwndfdswjnnnfdgpcbslvbjglqqnbbtjljsmdgcslmwlvgwpsqthlmmqfgpgmcvrpvvtzcjdrwcjgrbwthblwpwpbzvjvhzsphmfhfwvsthlfnhhfcmpsnmgrvrntlzpdvqwtrghnslnfhcjwrsvrngqqtwvcsfhbjwmsnmsmgvdhnzjgljtchbtwlfppvbtdclbdjdmwzcntvgfjlcwdplnjwqnzqhnfgcnbrgftqpdmqzrrhglbzzvjcdnbtfnvmsrbjdzhbqmhnsmprgvjzzgvllhqnzgpstqzcnlgsrcwzlhwqvcjlwnnjslmdtwqcpbrntrmrmmtscjwwtzjhghtqvvpldzvhtmspzlnlfgrfhmsndbdgpgvphwwgqhrtlwztgqqsrwnrnqphqfsrtbztqbrgmfbtpjwhhrglhbzmmjptppnfdzlpbqfcbdwzdtqbrvfmtdzdjlnzvqfnzmttpqgzgmrqwmdtmdzrttffpdlgwdhnlrhnnztphvrbzcrlvcpswlngcjhdzqwwwpzdmhhwpnzwgjsdsdbdvpfsrwmwvsggpcqbchwjpgljnbtpvjzbbvgsbsbjmtwtbjtzzsfvrmfvnmcngvvdsvljvjbrlfgstjrhtjplttzhjfbmphvbqdsmwfwspqpcvmgzgjnqlphshlgdwcvtmpwcfgdcbqwpnshfgrfjvlrtqbffwwtbnwtvjlsdgwgfmhlrsmfrjzcwccdzfwwdwhwdsjbllhjsqmnqvngvdmbvbssfjtjfbtngrdwgldcrtpmvrbrmpvwwsfrlnbqsqzfnftpbhslqccnbqwgbdbfpblpmwbgjzmnptnhdjzqjhdrhqbtfhsrdqwlmwzqlsmmslgfzpvtgtsrlszvqrhrzclbqhzzwwfmhrrvsrnsjbdjsqqlsmgdmgbdtmvfjmsbwjqmqrvrhqbchpqrwvlvwpvhjlbdzfjvrwmchccrsrfvhzmpfjqwnrbvqmgwjcbndjdtfgnrzrqwgzhrdvghdrvgtplcrthgchmvwtdrchfwpdszzzhqpmrlzvfdnfnlwghmmwvsscbrdbchhgttsnbzdbqgddqfvcgvqwltnqtcwrmhtftnlwvlglsvvctccnntznsjnmmgqlzmplsdspnjtmzlbvrfzfclnhgjzmvntdwhspqwtpgndspnjqjqwrpwhjhpvjwfptpndnwvcjdwsvdtcrtwpsprgmrspgmcsdgtjbbgsgvcjhrcldlvgvqwqwthplzgwbzmszjfrlnznvgphnqzcwsztvvljlrlzrndbzccstprhntnlmshhclnrsmsvvvsbmpfdjsmspwcqtmlrrdmfzjjjhmsmdfqddzpgtbzbsnhhhpsfrdrdvpvpnjmvnhdrzrqggrpqdcmctvqfrtfmjjqjwgzzbrdfplhzjbnqlmjlcgvmsbpgdlfjmbgqtrvzzdgtlmbqthjrdtlstqtzqvfjvmmstsmtsbnjvstjjvrrjqcbjvhfpslpvjmdznrcnsvlpbpzmslqtpczmvhdwzrhwbwtfvrrmbszvrhwsjrclcscgngwvblbbrqprgshwzhlqgwmpfsmqsvpjbdccdmtnnhqfwvlgjlszmmmdmtmpzwhplzsjztrnwngbvspqqbmghwzgvfjdrblfmtwcvnczsrflmsjmrsvzldmttjwcmnvwcbjfvznhgntnqfbfchcqqshhjldgltqhdlqldlpfjnjvtbvbntzdjzstcqbzdnmsvcdgvjmmvtdfvdplqfndqqlzlspmjgdfbgsvwzqzsvvbbldltbtzwzpqrzfmfzgdbpqnwtrfcgwmlbpzrgscbjvfdwnjzjdfzltsbppnljzrgggplmttpmgwnhdlwfhwzsrcflnrqqzwsbqllwjqlrgwbhvcvqdvjvpbzgnfbbbtccvplzggplbrsbldllwmttwtvltsfljfbbprtvlfshhwdhdgvzfzjttvnphpnjnzsbvfwflfpqwnhvwjdsrtbwsjzqhgfldnssfbbzzqqrwtjvwjschmndgqzjtpsbfhwtmqbtfstrbghgtnldjqtshdnrwzvwddchhvdbsfjnqzfjdpvhvwwjspftgbtgwzdfgzzhpvjpdlrrdfnpftshthwzjzmzdghnfdqcbmjhfdgzrcgrzbrjtmhwbjhcpgjdsmnqzncdlwhqqzqblgdbbdsmrqgbdbmdczvvpnbbjdwrlmrwgnnbbzpcnsjgcmshgzwnjzwjlrdmvmhvjrzphgpczppqvwjthcdphprhhrggjdpzmgtpjjfvpczzrvsssfrrptnzlstrhmbhvzmwjnddshrrtgspbllvqlsptrtvtldsgnjjbwtfmtbjdvmgbptjlzhpttjmvpgnjphswhtdq diff --git a/data/day07.test b/data/day07.test new file mode 100644 index 0000000..09a921e --- /dev/null +++ b/data/day07.test @@ -0,0 +1,23 @@ +$ cd / +$ ls +dir a +14848514 b.txt +8504156 c.dat +dir d +$ cd a +$ ls +dir e +29116 f +2557 g +62596 h.lst +$ cd e +$ ls +584 i +$ cd .. +$ cd .. +$ cd d +$ ls +4060174 j +8033020 d.log +5626152 d.ext +7214296 k diff --git a/data/day07.txt b/data/day07.txt new file mode 100644 index 0000000..d62b62e --- /dev/null +++ b/data/day07.txt @@ -0,0 +1,980 @@ +$ cd / +$ ls +dir csjncqmr +dir fnfjhvsp +dir mhfrct +dir pgmgbfcl +dir qcf +dir wrsjr +$ cd csjncqmr +$ ls +8827 vdrdm.pfj +$ cd .. +$ cd fnfjhvsp +$ ls +dir csjncqmr +dir czpmg +162385 dcgph +7135 hff.cdt +$ cd csjncqmr +$ ls +121543 gzjdsn.wlc +dir ljq +$ cd ljq +$ ls +dir cwlrlvf +dir jpqjhhpg +$ cd cwlrlvf +$ ls +151219 dcgph +$ cd .. +$ cd jpqjhhpg +$ ls +188355 dcgph +38458 gfgl.hlg +$ cd .. +$ cd .. +$ cd .. +$ cd czpmg +$ ls +168232 dcgph +143031 gzjdsn.wlc +$ cd .. +$ cd .. +$ cd mhfrct +$ ls +dir clm +66710 dcgph +232576 mtfhpcnj +$ cd clm +$ ls +dir pgmgbfcl +$ cd pgmgbfcl +$ ls +110296 qbfhj.tmn +$ cd .. +$ cd .. +$ cd .. +$ cd pgmgbfcl +$ ls +163613 cgchl +dir nnlr +123977 rrwbnmlh.jtt +dir tjhzggs +dir wfl +252837 wpgrl +$ cd nnlr +$ ls +103051 flp +dir qrhlzd +dir rcgmhz +dir snwrlr +dir vgj +dir znbzt +$ cd qrhlzd +$ ls +dir crg +246915 dcgph +264791 fcphzfb.fmb +299291 flp +dir mjqsg +297202 pgmgbfcl +dir sbbzgbz +dir wnsnssbg +$ cd crg +$ ls +55556 flp +185529 jswdvn +$ cd .. +$ cd mjqsg +$ ls +dir fnfjhvsp +dir jfbzjz +dir rwg +$ cd fnfjhvsp +$ ls +24945 cctwbs +170960 csjncqmr +316168 ljffgvvz.zld +187325 pgmgbfcl.fzv +74133 qbfhj.tmn +dir tjhzggs +dir vjmgmdz +$ cd tjhzggs +$ ls +287777 csjncqmr.nbd +$ cd .. +$ cd vjmgmdz +$ ls +dir vgpb +$ cd vgpb +$ ls +202578 bbbg.hlr +$ cd .. +$ cd .. +$ cd .. +$ cd jfbzjz +$ ls +207736 tjhzggs.cql +$ cd .. +$ cd rwg +$ ls +184997 csjncqmr +4378 dcgph +55767 qnc.wvv +$ cd .. +$ cd .. +$ cd sbbzgbz +$ ls +321376 csjncqmr +317438 flp +9263 hrs +$ cd .. +$ cd wnsnssbg +$ ls +dir jdjv +$ cd jdjv +$ ls +153354 gzjdsn.wlc +$ cd .. +$ cd .. +$ cd .. +$ cd rcgmhz +$ ls +dir tjhzggs +$ cd tjhzggs +$ ls +299192 jfbzjz.ttg +$ cd .. +$ cd .. +$ cd snwrlr +$ ls +30314 csjncqmr.jvn +dir hcf +$ cd hcf +$ ls +81979 jfbzjz.pfz +179459 ngh +$ cd .. +$ cd .. +$ cd vgj +$ ls +278579 jbn.rgz +dir jzj +dir lnbhh +dir pgmgbfcl +dir qgvspcpm +$ cd jzj +$ ls +295808 hrs +220437 vqbcl +$ cd .. +$ cd lnbhh +$ ls +212203 nfmhd.hbq +233853 qgz.mcd +$ cd .. +$ cd pgmgbfcl +$ ls +dir mmbdpj +138462 mwcdrpm.spr +288430 pgmgbfcl.pwd +132880 rdmwtn.qjj +41775 rfqb.djh +dir rnd +69597 thnbf +$ cd mmbdpj +$ ls +158542 hrs +306559 tjhzggs +$ cd .. +$ cd rnd +$ ls +223745 fnfjhvsp.hgt +138236 gdmtnffs.cdm +dir gmzb +dir hvl +266178 mzwmjl.rqq +dir njpq +33906 qbfhj.tmn +dir tjhzggs +$ cd gmzb +$ ls +186579 nsbfn.lsd +$ cd .. +$ cd hvl +$ ls +312925 csjncqmr.sbc +75264 gqp +81003 gzjdsn.wlc +$ cd .. +$ cd njpq +$ ls +188139 lbnrr.pwd +213545 qgqddvwf.hfl +$ cd .. +$ cd tjhzggs +$ ls +dir dlwvc +191782 jfbzjz +dir tbldpln +$ cd dlwvc +$ ls +75927 jvhjtnft +260563 qbfhj.tmn +dir vlg +$ cd vlg +$ ls +187660 hgm +dir rhr +273019 tdgr.crr +$ cd rhr +$ ls +286129 wnn.jgn +$ cd .. +$ cd .. +$ cd .. +$ cd tbldpln +$ ls +173546 pdfrsq.pnb +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd qgvspcpm +$ ls +dir dhrbsl +286566 fldhvbq +209725 gzjdsn.wlc +148148 nspz.gwc +111003 tjhzggs +$ cd dhrbsl +$ ls +58390 gzjdsn.wlc +150545 hrs +$ cd .. +$ cd .. +$ cd .. +$ cd znbzt +$ ls +211651 gwhb.mfz +$ cd .. +$ cd .. +$ cd tjhzggs +$ ls +dir hgr +229076 jfbzjz.dfh +dir ptfcbwwv +51893 qbfhj.tmn +97712 qgtvfh.hvs +$ cd hgr +$ ls +dir hwvgjdq +dir vwvbt +$ cd hwvgjdq +$ ls +dir pgmgbfcl +$ cd pgmgbfcl +$ ls +dir qgs +$ cd qgs +$ ls +188108 hrs +$ cd .. +$ cd .. +$ cd .. +$ cd vwvbt +$ ls +169212 tfrm.gjb +$ cd .. +$ cd .. +$ cd ptfcbwwv +$ ls +67829 lpszzl +$ cd .. +$ cd .. +$ cd wfl +$ ls +dir hfcm +$ cd hfcm +$ ls +73872 flp +$ cd .. +$ cd .. +$ cd .. +$ cd qcf +$ ls +dir ctjw +177175 dwzmnpr +dir fqldn +dir hmjnnjjj +301788 hrs +dir lgmld +dir pgmgbfcl +76771 qzsbm.zdb +dir scbgn +234764 vhrlgcf +$ cd ctjw +$ ls +139505 mflt.hnr +$ cd .. +$ cd fqldn +$ ls +dir bgq +7260 flgrh.tmt +dir fnfjhvsp +dir fnr +dir gsnqjmw +10529 gzjdsn.wlc +22877 hrs +dir hzbrgrfq +dir snmbwrzn +dir tjhzggs +6773 tzhsjsc +$ cd bgq +$ ls +40780 gzjdsn.wlc +233301 mnzdbpc +dir mpdjgbgf +303076 qbfhj.tmn +dir qjs +189723 sbzn.dtj +dir vhnqcrd +$ cd mpdjgbgf +$ ls +227105 dcgph +298219 dprcwts.vdt +$ cd .. +$ cd qjs +$ ls +214072 pgmgbfcl +264897 qbfhj.tmn +$ cd .. +$ cd vhnqcrd +$ ls +178950 fnfjhvsp +180561 pgmgbfcl.mst +312980 pgmgbfcl.twp +$ cd .. +$ cd .. +$ cd fnfjhvsp +$ ls +141191 fnfjhvsp.bng +81709 pgmgbfcl.sfw +$ cd .. +$ cd fnr +$ ls +316638 flp +dir fnfjhvsp +dir fqdnn +267054 gdnln +dir hfcrzwvm +dir rdljd +319112 wpcmfbr.zgp +$ cd fnfjhvsp +$ ls +115581 hrs +dir jfbzjz +$ cd jfbzjz +$ ls +170398 qbfhj.tmn +$ cd .. +$ cd .. +$ cd fqdnn +$ ls +dir cfg +dir jbjltw +$ cd cfg +$ ls +dir qljztr +dir tnsw +dir zhnqp +$ cd qljztr +$ ls +64638 bnlsrfb +63440 csjncqmr +206111 gzjdsn.wlc +207890 hrs +265995 pgmgbfcl.zcw +$ cd .. +$ cd tnsw +$ ls +85166 lsflqzmc +$ cd .. +$ cd zhnqp +$ ls +217666 csjncqmr.cch +$ cd .. +$ cd .. +$ cd jbjltw +$ ls +88043 dcgph +238483 hrs +189734 jnvwjs +243936 pgmgbfcl.wsr +$ cd .. +$ cd .. +$ cd hfcrzwvm +$ ls +dir vwc +$ cd vwc +$ ls +82566 shc.qhj +$ cd .. +$ cd .. +$ cd rdljd +$ ls +68011 ptw.bgd +$ cd .. +$ cd .. +$ cd gsnqjmw +$ ls +236818 gzjdsn.wlc +$ cd .. +$ cd hzbrgrfq +$ ls +240924 dcgph +dir dcjsv +dir dsrzdjfm +dir fnfjhvsp +dir hnzm +dir mqb +94014 smpnth.bbm +$ cd dcjsv +$ ls +316708 cmddvb +dir fnfjhvsp +$ cd fnfjhvsp +$ ls +dir fnfjhvsp +$ cd fnfjhvsp +$ ls +dir jqlcvds +$ cd jqlcvds +$ ls +51018 dqfbq.ggm +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd dsrzdjfm +$ ls +262938 csjncqmr.dmm +125129 mwcnlvhv.szp +150590 qbfhj.tmn +dir rrrzpsn +196430 vbdgb +dir vsfbwfdl +$ cd rrrzpsn +$ ls +dir tjhzggs +281655 tjhzggs.btg +dir tsjzf +$ cd tjhzggs +$ ls +291402 gbl +dir hctmr +dir hqdmpwl +225075 hrs +dir jfbzjz +51032 tjhzggs.qzr +$ cd hctmr +$ ls +113430 qbfhj.tmn +$ cd .. +$ cd hqdmpwl +$ ls +67634 tjhzggs +$ cd .. +$ cd jfbzjz +$ ls +193552 nmvl.tzj +197076 pgmgbfcl +11047 tjhzggs +$ cd .. +$ cd .. +$ cd tsjzf +$ ls +36205 jwmdtdjv +$ cd .. +$ cd .. +$ cd vsfbwfdl +$ ls +288660 flp +185921 jfbzjz +dir mqmvtddt +124423 nfbfq.dln +dir wzbc +$ cd mqmvtddt +$ ls +85529 bhjp.vvj +$ cd .. +$ cd wzbc +$ ls +77316 flp +271730 pgmgbfcl.lcd +$ cd .. +$ cd .. +$ cd .. +$ cd fnfjhvsp +$ ls +47666 mpwtvwd.fwr +$ cd .. +$ cd hnzm +$ ls +157672 flp +294957 gzjdsn.wlc +297187 lbssg +24223 qbfhj.tmn +dir rdnqrgt +177449 tld.tsd +$ cd rdnqrgt +$ ls +dir nltjzrrr +217347 vrb.gcd +$ cd nltjzrrr +$ ls +dir zzd +$ cd zzd +$ ls +47464 flp +dir fnfjhvsp +$ cd fnfjhvsp +$ ls +89424 qtzfddz.btd +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd mqb +$ ls +105537 tjhzggs.wns +$ cd .. +$ cd .. +$ cd snmbwrzn +$ ls +dir mqt +dir nsdrn +dir rjn +$ cd mqt +$ ls +233842 pgmgbfcl +$ cd .. +$ cd nsdrn +$ ls +67018 dcgph +17296 flp +274166 gzjdsn.wlc +186308 jfbzjz +280195 lvbsrvwm.zlq +dir pjv +dir thlp +$ cd pjv +$ ls +123190 rfbj.gmq +$ cd .. +$ cd thlp +$ ls +141308 flp +188164 jfbzjz +299013 pgmgbfcl +171259 qbfhj.tmn +dir qsljb +$ cd qsljb +$ ls +291980 glcnlj.swh +$ cd .. +$ cd .. +$ cd .. +$ cd rjn +$ ls +181047 fqmhpg.hpl +$ cd .. +$ cd .. +$ cd tjhzggs +$ ls +dir csjncqmr +274202 fhfjvdjc.swt +dir fnfjhvsp +97050 frbpp.wch +dir gnbtgdr +dir jfbzjz +dir lpg +dir pgmgbfcl +dir twcdfdcv +dir wzd +dir zllcflrn +$ cd csjncqmr +$ ls +dir chpmwsfj +dir csjncqmr +57088 fnfjhvsp.jqg +52097 vgcm.dpv +$ cd chpmwsfj +$ ls +279480 tjhzggs.srw +$ cd .. +$ cd csjncqmr +$ ls +13716 dcgph +dir fqb +dir jfbzjz +dir msvlnt +88312 pgmgbfcl.qcf +$ cd fqb +$ ls +dir mmjfbvq +$ cd mmjfbvq +$ ls +79822 flp +$ cd .. +$ cd .. +$ cd jfbzjz +$ ls +302531 csjncqmr +164326 dcgph +8277 fnfjhvsp.rbv +dir jgsrgrtc +dir zwdgcd +$ cd jgsrgrtc +$ ls +60317 gzjdsn.wlc +$ cd .. +$ cd zwdgcd +$ ls +171967 fpls.fvd +$ cd .. +$ cd .. +$ cd msvlnt +$ ls +83178 cnhzh +11226 tjhzggs +$ cd .. +$ cd .. +$ cd .. +$ cd fnfjhvsp +$ ls +89882 dcgph +212817 qbfhj.tmn +257899 tjhzggs +$ cd .. +$ cd gnbtgdr +$ ls +dir flltghn +dir fnfjhvsp +dir jfbzjz +300698 ngcsnwb +292809 qtcqhdq +dir vbwjgf +280270 wbzcr.sgn +$ cd flltghn +$ ls +111452 rhgfv +$ cd .. +$ cd fnfjhvsp +$ ls +dir lbznfb +31273 nrtrqqc.cth +$ cd lbznfb +$ ls +175736 ljpr.cwm +$ cd .. +$ cd .. +$ cd jfbzjz +$ ls +237625 tjhzggs +$ cd .. +$ cd vbwjgf +$ ls +269242 jrrw.ljb +106705 pqnbrbt +$ cd .. +$ cd .. +$ cd jfbzjz +$ ls +dir dnn +$ cd dnn +$ ls +19045 dcgph +187257 tjhzggs.qzg +$ cd .. +$ cd .. +$ cd lpg +$ ls +101509 fnfjhvsp.nnt +221211 ldgjngjq +$ cd .. +$ cd pgmgbfcl +$ ls +dir bzbdphz +37920 flp +dir wpsm +$ cd bzbdphz +$ ls +252099 ffsfqfdw +312106 htft +298880 jfbvz.znw +135204 lrwccthr +dir zhbqf +108144 zsbbfhz.drr +$ cd zhbqf +$ ls +dir gtw +298022 svpgsrgj.ljz +$ cd gtw +$ ls +dir csjncqmr +dir rpzjg +$ cd csjncqmr +$ ls +278962 flp +272127 tjhzggs +$ cd .. +$ cd rpzjg +$ ls +92241 flp +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd wpsm +$ ls +15936 flp +241514 qbfhj.tmn +245049 rjgwzlq.qrw +$ cd .. +$ cd .. +$ cd twcdfdcv +$ ls +140758 bjm +78772 dcgph +114059 mqsgrc.qcb +$ cd .. +$ cd wzd +$ ls +dir fnfjhvsp +dir mcbnp +$ cd fnfjhvsp +$ ls +72702 csjncqmr.jfn +120586 dcgph +$ cd .. +$ cd mcbnp +$ ls +12494 fnfjhvsp.frc +182092 gsv +17859 pdbvmblc.vng +116984 pfbdf +113843 prshrmg.srm +$ cd .. +$ cd .. +$ cd zllcflrn +$ ls +30966 flp +245820 jfbzjz.rnd +$ cd .. +$ cd .. +$ cd .. +$ cd hmjnnjjj +$ ls +134366 dcgph +212399 dtsb +255795 zhbcjtr +$ cd .. +$ cd lgmld +$ ls +55248 pgmgbfcl +62265 pgmgbfcl.nbg +240733 zhmff +$ cd .. +$ cd pgmgbfcl +$ ls +232717 fnfjhvsp +219581 gtcjbwpz.lmz +47399 gzjdsn.wlc +22814 hjqf +296672 hrs +dir nrzf +dir wqgcmnpp +dir wwvmdjz +dir zlhv +$ cd nrzf +$ ls +18406 dcgph +dir mhm +$ cd mhm +$ ls +95168 pgmgbfcl.hqv +$ cd .. +$ cd .. +$ cd wqgcmnpp +$ ls +dir csjncqmr +189963 dvcd.tnh +dir gzqrt +dir njffft +dir qvqp +6981 tjhzggs +dir wgfnlfsd +$ cd csjncqmr +$ ls +307371 cdptrw.rfm +$ cd .. +$ cd gzqrt +$ ls +dir pwsqss +$ cd pwsqss +$ ls +173397 flp +$ cd .. +$ cd .. +$ cd njffft +$ ls +dir bzhzg +dir tjhzggs +$ cd bzhzg +$ ls +213821 pgmgbfcl +$ cd .. +$ cd tjhzggs +$ ls +dir szvfzgj +$ cd szvfzgj +$ ls +196306 tjhzggs.hjh +$ cd .. +$ cd .. +$ cd .. +$ cd qvqp +$ ls +dir pgmgbfcl +$ cd pgmgbfcl +$ ls +114456 flp +252954 pgmgbfcl +$ cd .. +$ cd .. +$ cd wgfnlfsd +$ ls +212011 gzjdsn.wlc +$ cd .. +$ cd .. +$ cd wwvmdjz +$ ls +70022 dcgph +dir hjgvstp +dir jhgb +276853 qbfhj.tmn +242756 qdqswjjd.wnn +dir tjhzggs +292963 wcgmgmz.shb +$ cd hjgvstp +$ ls +24056 tdjwdw +$ cd .. +$ cd jhgb +$ ls +90571 gzjdsn.wlc +132326 rrvfml.dms +$ cd .. +$ cd tjhzggs +$ ls +29139 dmrsz.qhc +$ cd .. +$ cd .. +$ cd zlhv +$ ls +315120 dcgph +290175 pgvlcvpb +$ cd .. +$ cd .. +$ cd scbgn +$ ls +258300 bcchv.qsn +$ cd .. +$ cd .. +$ cd wrsjr +$ ls +dir csjncqmr +dir jfbzjz +dir nmfmqb +dir svgtrz +dir zjvhmd +$ cd csjncqmr +$ ls +148619 qbfhj.tmn +$ cd .. +$ cd jfbzjz +$ ls +dir csjncqmr +dir flrhpzt +dir fnfjhvsp +dir gpwv +dir lwrtc +$ cd csjncqmr +$ ls +dir czmlfmf +137365 flp +dir hggbs +107369 mpgm.lbl +$ cd czmlfmf +$ ls +dir hnpjvq +$ cd hnpjvq +$ ls +41339 fnfjhvsp.wnv +$ cd .. +$ cd .. +$ cd hggbs +$ ls +273367 qbfhj.tmn +$ cd .. +$ cd .. +$ cd flrhpzt +$ ls +200923 fwb +62059 hrs +$ cd .. +$ cd fnfjhvsp +$ ls +dir gdnmpgn +256037 hrs +$ cd gdnmpgn +$ ls +64024 jmww.gbb +$ cd .. +$ cd .. +$ cd gpwv +$ ls +159155 hrs +$ cd .. +$ cd lwrtc +$ ls +150299 nzvqj.dsv +129702 pgmgbfcl.lrt +dir zvgb +$ cd zvgb +$ ls +304137 hrs +$ cd .. +$ cd .. +$ cd .. +$ cd nmfmqb +$ ls +139823 jfbzjz +299946 nqqscdn.wsw +$ cd .. +$ cd svgtrz +$ ls +dir jdlvtm +123801 phhrgrbs +$ cd jdlvtm +$ ls +267972 tbgcnf.pqz +$ cd .. +$ cd .. +$ cd zjvhmd +$ ls +287427 csjncqmr.tfj +297578 hhhp.jvt diff --git a/data/day08.test b/data/day08.test new file mode 100644 index 0000000..16d6fbd --- /dev/null +++ b/data/day08.test @@ -0,0 +1,5 @@ +30373 +25512 +65332 +33549 +35390 diff --git a/data/day08.txt b/data/day08.txt new file mode 100644 index 0000000..8c85240 --- /dev/null +++ b/data/day08.txt @@ -0,0 +1,99 @@ +113003322412033102023303501444545044215232525401341546163452453404402234201151432242402140110220101 +332001304022012142421445502213221330453061535265122314201352335233021055055200345412200440033322200 +011113132214324432134325045311145402450516101640412524056254134552334050434552541351100000142223210 +120100233011423423144030334144351644642605521663331053414601341464201040045104150001214204243212330 +032313022420343002352401031112122630544621450306410014210122655033613410314450242104133332033433110 +330133431221024552500405304311611205251454505525065601244143364343441153320511500334525320443331122 +232021314224321045040222145130205324423110304256225426345644345334310200416004113133521143332200422 +312322022143422250013255366221252062135020112327134227764002156152041134323314242255102200014240004 +212411010402324310541162616440606266620317315234166112525535542054554446314636025435501101142314410 +130420010020500305012262532345565125253527765422533261626735742433241362062404452514044512024131310 +241211034142224054050344306633445512263575724527746635663111434536510100261040501431453540340134211 +241313213114241230212646636605641533121654131662127125143714342377771455431346140255405303533314030 +200214302143123545226333105604234323144236661442633717414531213335635263423430225510502553055320124 +432210433113545424321340236152364457166745737761176472274142327714574465315263302246430530531052340 +044321111115013046066155407144655275272121513224325736736453741437462322257332111603344504052313220 +423214232334431334032453034121465736632235428586864276787383246667147623517713521254056250023050122 +341124205512002021001520535463145337475482376656634323542842654415315313467514115356311404235042224 +132001402100660310301501776141144746672773424257875288227677277663442356545463514004411150412531212 +001052001350350313612735275534436625275423778573334245773528222523563225127612470242660400232440014 +000112513501320042013743116251356437388536835723273464367352632733656224242323651012010230151310024 +432343513243516355144362617334462875826626872624526547773732534284688857151541627654520220114445210 +030155000415201011165562424113226826748747748853864385358746645352362468546644524342115335322112153 +521354124325146425431532157187775456325686557739354768338786565328828884835715454276200630310531024 +453541003326165663116714725533384334462564846638857736639973473868246353547315725644665433532024310 +550412430051564655211263423273445384473677893666497965987545884578247877687261326676604334421513240 +413054444206603631433161684337566624388758573363447988796769799695582635658423643315241325425634024 +215150330040102563666211553675525355868889739969438648979533595459347577832874756321426443250541325 +421424650534663421741533522275548697677937396576933765698789956783468276533784535453223333266121254 +422144151564541614312463257866683347483647399747895987469373443743399762878755625665635533442122100 +142126413036631514413457664863683937946499766465555784756389698779343558673226534437441452602242233 +305201320636671251145832252388563746733774564949748445664654449965453936743822654651524764154313443 +011300622102111771164477857675385967936859964787497949987577437799784855267278677674646432241223234 +340321113267666756754785648366853336456946997569954774746449465943647534953257556352535151305025463 +541411012547643576586448655984493857478575997945994447954587596973768677885376565465523461502535643 +444321100654632152854364424757747839747855469574958798776977549543479354379242483435267721134026240 +020626205154575316847673866764644374748789977457499575788744688854499953995222366237635424744520350 +335506510045711628565868794334457797677874456886875779795697459467453749364727248672726163736041204 +500111603536263112863778287468558998649869948858895979757648556554566675849574438477347434571054505 +122000100243546685578334388934875844674864976796788677978555975645687865954363424837536471770452415 +141414215752566148738527647673948945657599775586897776875597686768689334698832463748744764733053124 +100340653262173232623746876388947885855898958859977856795865855466954797947557362275815142426540331 +466303032723142355554844869739456445889568997967558595977567767954454556686589744843263767635404425 +004613266772514623473428884775998765955988667675865595697667595999549844548767382824562175546612214 +223062321176322437826876799485789855749797897795766857786556556466469876653886288833557467773301562 +413332261232125275243773533956777794896856665777776697967896558687464977634963578724434267752313063 +552404621241274462672869963657657685959857786696669988675856559577744587934439473355436162566631240 +435165353647675322378767844955594694568958979668688889986755769858696479453833942343873533447232052 +244432367557727222376845574654778567657966566799677789797957677969848457379553465846862364131450331 +500160365677454526747395979487899988575755756767767688698968968964795455975647975338665645777505164 +102431235675118652565457756594548744578555576979976998997755878856465958937486343448585657465615526 +246165542416756587676444776898888956766578897997878779867867799995588485976853457557557151277215635 +001643325345324464653748985776747945569696578767779897778688898756644945899654857626437342132540232 +012101664761176266736346897839595848575598988867686699987969655574844656549763626542283366457311330 +561504075335422826822483989945889874569866596668697889889787698578564685356683642368537236162426203 +352203514134651772748288733934776699589795768989986896977876655856647995457449532883535245357460413 +033642404423741338448747543456567587875878659898696769778857567974989696766857638532623516361132200 +616444206117715325587799743549596679896878996579778797758659755584898985549986338256726477267555103 +520455143625244274365846334377848464679657799659996799959789655886895549885388585227864441542440633 +301346217675555884462648646383444656479799855995796958569776779656497648598636775768426556776465212 +520404231326621664428744458384498945886755796967559979558788575647874897993564426835362551773515204 +316242511662326327222423774658467889697656957595795766869586965778777639684376585246752671616104436 +415146426112762185773325386754349955694758878879858887885879799994465943455896555866711732413133541 +355625411617227324663526785865944884474696755859788678978799585984575877863878686426651623174052622 +250022125746424524625262754995697689898769757895898887999798967686567449959582647242127737515510342 +525264040416627662865878845844435466984695749789657699584976867495646849545456285287242646554654353 +036123646424431555263267827839763498876769495677697448449595455554764947373454763645727333510646146 +204566364235641316654753765445963394466448895664985649465498769864394998376778764453573662441355520 +220335031661255773663868585338574847865979585777445874888879656858779783486746544464161776603563641 +222513656331342447187422756294679343838685457555849784967456454674489536467765228571211235451313300 +420041535613636672654268683685394696895377789594449696975655499485443388622338663537334646443120355 +525056224212611227113776876877874646779895859895448998785578796984395868862632743546145340000633644 +404314430546135313471247434875543567783736878545548779967377554684776373253726223752325712616213051 +353422360566111142127744587245868774578548754579967945935667489466386244448265471714226610251556141 +240135510612042471674334266253242658953336636546539684393847584358732442564537232411555541300234143 +555204024234655515726125842362866243634643845579964798949797638778425653264527614711662106606433551 +203524350135524444622315434263233285368993457879757738399643368354787234632745135155274525361620440 +340532455653452155645722264385685523579545388464998647475936784423755683487133452753535123313604354 +352152244221611331745526617386458872637865488449639856654753583624523335337272114515341203461045505 +312033003454166053225452625154365544367483828667456379835556776344278883841652574422331646601235245 +354330514213011046317425234714582372762675574834484437275552425744868747672133251365644033361512332 +044021444522010141412515121117476227878457643873272338756238823637528547351444752605411146631314215 +232413442230001100251223172352214643455635846823657522575345326788747411734266577565251164231145220 +131504320306315625216346311325345143883224276853882277427888248757813625336722630560555630113015013 +024451223151264563630623162617513241445834482436236846786748364751551471325535132540104323422105400 +124420553125506323053405346614111134556285246233525828237347884315614217572766434350535521515101401 +130200351112000250166105345316513263244676855323883356633222244252121772667652426014110503513555221 +400241412230012102424516231766252561312255446621244373337355416351623124213640652213520151043110444 +322440423504102454033133351036544434155137522762124773455775324625526553424524313460144053442544330 +324303335402501236440552111053234114555641277255456252443511634243752643304353256666504353255522122 +241434204225354100532033205000145461776516534477176114531271372735543451231303326454043352113013420 +334124213300015522546105345511323376357312632521613774424256342133105114520414061451141133554301031 +211304431150451251125020043053260563634374764226536222654742522421115640025331113215553523303422011 +123324243323523142132445503461621106650437431517676417742653314226115466013230223030345414021112341 +100121244242050431353422620202033056213213561562676642451361622463016135301034322504250003434240420 +202331344430130314251310046312513630614136423111235233115234253411664210435541154434125202004300041 +311142442400021052335032430131001522121243633355511015105456130306054020525345400331240114301233431 +303333210333101445104545232532514231420245342044224564606555504302423403203123103211431303412444103 +322112022033322224210512330414230625446520203533135512231066520423212314402311345154232414213413203 +210220340333424334214524143431005502542403323230305103516410534415015522312221415410344021130000212 diff --git a/data/day09.2.test b/data/day09.2.test new file mode 100644 index 0000000..60bd43b --- /dev/null +++ b/data/day09.2.test @@ -0,0 +1,8 @@ +R 5 +U 8 +L 8 +D 3 +R 17 +D 10 +L 25 +U 20 diff --git a/data/day09.test b/data/day09.test new file mode 100644 index 0000000..9874df2 --- /dev/null +++ b/data/day09.test @@ -0,0 +1,8 @@ +R 4 +U 4 +L 3 +D 1 +R 4 +D 1 +L 5 +R 2 diff --git a/data/day09.txt b/data/day09.txt new file mode 100644 index 0000000..30d42d1 --- /dev/null +++ b/data/day09.txt @@ -0,0 +1,2000 @@ +L 1 +U 1 +L 1 +D 2 +U 2 +L 2 +U 2 +L 2 +U 2 +L 1 +U 1 +D 1 +R 2 +U 1 +R 2 +D 1 +U 1 +L 1 +R 1 +L 1 +R 2 +D 1 +L 2 +U 2 +D 2 +L 1 +U 1 +L 2 +R 2 +L 1 +D 2 +U 2 +R 1 +U 2 +D 1 +L 1 +R 1 +U 2 +D 2 +U 2 +L 1 +U 2 +L 2 +R 2 +L 1 +D 1 +L 1 +U 2 +L 2 +U 2 +R 1 +U 1 +L 2 +R 1 +L 2 +D 2 +L 2 +D 2 +L 2 +R 2 +D 1 +U 2 +L 2 +D 2 +L 1 +U 1 +R 2 +D 1 +U 2 +L 1 +U 2 +D 2 +L 1 +D 1 +L 1 +U 2 +R 2 +L 2 +R 1 +D 2 +R 2 +D 2 +U 1 +D 2 +U 2 +L 2 +U 1 +D 2 +L 1 +D 2 +U 2 +D 2 +L 1 +U 2 +R 2 +L 2 +U 1 +D 2 +L 1 +R 1 +U 2 +D 2 +L 1 +R 1 +U 1 +L 2 +D 2 +R 1 +U 1 +L 2 +R 2 +U 1 +L 3 +D 2 +L 1 +U 3 +R 3 +U 1 +R 3 +D 3 +U 2 +D 2 +R 1 +U 2 +L 1 +R 3 +L 1 +U 1 +D 2 +R 1 +L 1 +R 2 +D 2 +L 3 +D 2 +U 2 +R 1 +D 1 +U 1 +R 3 +L 2 +R 1 +L 1 +R 1 +L 1 +R 2 +U 1 +L 2 +R 2 +U 3 +D 2 +L 3 +R 1 +L 1 +U 3 +D 1 +L 3 +U 2 +L 1 +D 3 +L 2 +R 3 +L 2 +D 1 +U 2 +R 3 +L 3 +U 2 +R 2 +D 3 +U 2 +D 2 +U 1 +L 1 +R 1 +U 3 +R 1 +D 2 +L 3 +U 2 +D 1 +R 1 +D 3 +R 1 +L 1 +U 3 +D 1 +L 3 +R 1 +U 2 +L 2 +D 1 +R 2 +L 3 +U 3 +L 1 +U 1 +L 1 +U 3 +L 2 +U 1 +D 2 +U 2 +R 3 +U 1 +D 2 +U 1 +D 2 +U 3 +L 1 +R 2 +L 2 +U 3 +L 2 +R 3 +U 1 +R 3 +D 3 +L 2 +U 2 +R 1 +U 1 +L 3 +R 1 +L 1 +R 1 +L 1 +D 3 +R 2 +U 1 +D 3 +L 3 +U 3 +L 1 +D 2 +L 3 +D 3 +R 4 +U 2 +R 2 +U 3 +L 2 +R 3 +U 1 +L 1 +D 1 +U 1 +D 4 +U 4 +D 2 +U 2 +D 3 +L 4 +D 2 +R 1 +U 1 +D 3 +R 3 +D 3 +U 3 +D 1 +R 3 +D 1 +U 3 +D 4 +R 3 +L 2 +R 1 +L 3 +D 1 +R 4 +U 4 +L 1 +U 4 +R 4 +U 3 +R 4 +D 4 +L 3 +R 1 +D 3 +U 2 +R 4 +U 1 +D 4 +U 2 +R 2 +L 4 +D 4 +U 2 +D 1 +R 4 +U 2 +D 1 +U 3 +D 2 +L 2 +R 3 +L 1 +R 2 +U 4 +L 3 +U 1 +R 4 +U 2 +R 3 +L 2 +U 4 +R 1 +D 1 +U 4 +R 1 +D 3 +R 1 +L 1 +D 3 +L 4 +R 2 +D 4 +R 2 +D 1 +R 1 +L 4 +D 3 +U 1 +D 4 +L 4 +D 2 +R 2 +U 1 +L 1 +D 1 +U 3 +D 4 +U 3 +R 5 +D 2 +L 3 +U 4 +R 1 +U 5 +R 3 +L 5 +R 2 +U 4 +L 3 +U 3 +L 4 +D 4 +U 3 +L 1 +U 2 +L 5 +R 2 +U 5 +R 5 +L 4 +D 2 +R 4 +U 1 +L 5 +U 4 +L 3 +R 5 +D 5 +L 5 +U 2 +D 1 +L 3 +R 5 +D 1 +L 4 +R 1 +U 4 +L 3 +U 3 +R 2 +U 3 +R 4 +L 2 +R 3 +U 4 +L 3 +U 5 +D 3 +L 2 +R 1 +L 1 +U 4 +R 5 +D 3 +U 2 +L 5 +R 4 +U 1 +L 5 +D 5 +U 5 +D 5 +U 3 +L 3 +R 3 +L 1 +U 2 +D 4 +R 4 +L 1 +D 3 +R 5 +D 3 +R 4 +D 5 +L 4 +D 2 +U 1 +L 5 +U 4 +L 4 +R 1 +D 2 +L 5 +R 2 +U 4 +R 5 +L 1 +D 3 +L 4 +U 3 +L 3 +U 1 +D 1 +R 1 +D 1 +U 3 +D 1 +L 5 +D 2 +R 1 +D 1 +L 5 +U 2 +L 4 +D 5 +U 1 +R 5 +U 6 +D 3 +U 1 +R 6 +D 6 +L 3 +U 4 +D 2 +U 3 +L 2 +U 2 +L 4 +D 5 +U 3 +D 1 +R 6 +L 6 +R 5 +U 1 +R 1 +L 1 +U 1 +R 4 +U 2 +D 5 +L 6 +D 6 +U 5 +L 2 +D 3 +R 2 +U 6 +L 6 +D 1 +L 3 +U 6 +L 2 +U 4 +R 4 +D 5 +R 3 +D 5 +R 3 +D 4 +R 3 +D 3 +U 5 +D 2 +U 6 +R 1 +L 2 +R 5 +L 2 +U 2 +D 6 +R 5 +U 2 +D 1 +L 1 +D 3 +U 5 +D 2 +R 4 +D 6 +L 4 +R 1 +U 4 +L 6 +D 6 +L 4 +D 1 +L 4 +R 1 +D 1 +U 3 +L 6 +D 2 +U 5 +R 3 +U 2 +R 5 +L 3 +U 5 +L 4 +U 1 +R 5 +D 3 +L 6 +U 1 +L 6 +U 1 +L 5 +D 5 +L 4 +D 5 +U 3 +R 3 +D 3 +L 2 +R 2 +D 4 +U 5 +L 1 +U 6 +D 6 +U 1 +D 3 +L 4 +R 6 +D 4 +L 3 +R 5 +U 1 +L 1 +R 3 +L 2 +D 4 +L 4 +D 6 +L 2 +D 5 +L 1 +R 4 +U 3 +L 1 +D 7 +U 5 +D 2 +R 6 +L 1 +U 3 +L 2 +R 1 +U 6 +L 3 +D 2 +R 4 +D 2 +U 2 +L 5 +U 7 +D 7 +U 3 +L 5 +R 5 +U 6 +D 1 +L 6 +U 7 +D 5 +U 6 +R 4 +U 5 +D 1 +L 5 +U 5 +R 1 +U 3 +L 4 +D 4 +L 5 +U 1 +R 5 +U 3 +L 3 +R 1 +U 6 +L 3 +D 3 +R 4 +L 1 +R 6 +D 4 +L 1 +R 6 +L 4 +U 4 +R 4 +L 1 +R 6 +L 4 +D 3 +R 4 +L 7 +D 1 +R 6 +D 5 +L 2 +U 2 +D 5 +U 3 +R 2 +D 3 +R 6 +L 5 +R 4 +L 1 +D 7 +U 7 +R 3 +D 3 +R 2 +U 3 +R 1 +D 5 +U 5 +R 4 +L 6 +R 6 +U 4 +R 2 +L 3 +U 5 +R 2 +L 5 +D 6 +L 3 +U 6 +R 7 +U 5 +R 1 +L 6 +D 2 +R 1 +D 1 +R 2 +D 3 +U 2 +D 1 +U 1 +D 6 +R 2 +U 5 +L 5 +D 2 +R 7 +D 7 +U 8 +D 3 +L 1 +U 6 +R 8 +D 6 +U 5 +R 2 +L 5 +R 7 +D 8 +U 4 +R 8 +D 8 +R 4 +L 4 +U 2 +R 6 +U 4 +R 7 +D 6 +L 8 +R 8 +L 7 +D 2 +L 3 +D 3 +R 7 +D 8 +U 4 +R 8 +U 8 +L 2 +D 2 +L 6 +U 2 +L 8 +R 3 +L 1 +D 6 +U 4 +R 3 +U 4 +D 1 +U 5 +D 5 +U 2 +L 8 +U 3 +R 6 +L 1 +R 2 +U 3 +D 2 +L 5 +U 2 +L 8 +U 4 +L 1 +R 7 +D 6 +L 5 +D 7 +R 7 +U 8 +R 3 +U 1 +D 5 +L 8 +D 6 +L 1 +R 8 +L 6 +U 7 +R 5 +L 7 +R 6 +D 3 +R 7 +D 6 +U 5 +R 6 +D 2 +U 8 +L 4 +D 1 +R 5 +D 8 +L 7 +U 4 +R 6 +L 5 +U 1 +D 3 +L 7 +R 2 +U 9 +L 3 +U 7 +R 6 +L 1 +U 2 +R 8 +U 4 +R 3 +L 7 +U 3 +L 1 +D 2 +R 1 +U 2 +L 9 +R 3 +D 1 +L 7 +U 2 +D 1 +L 5 +R 9 +U 1 +D 1 +U 4 +R 9 +U 7 +L 5 +R 7 +L 7 +R 6 +D 6 +R 3 +D 4 +R 9 +U 3 +R 6 +L 8 +U 4 +L 5 +R 2 +L 1 +R 9 +L 2 +U 8 +D 5 +R 7 +D 7 +L 9 +D 6 +U 2 +R 6 +L 5 +D 5 +U 7 +R 6 +L 6 +U 1 +R 9 +U 8 +D 6 +R 9 +D 7 +R 8 +D 7 +R 4 +D 9 +L 2 +R 7 +L 3 +D 7 +U 3 +L 7 +D 4 +R 4 +L 5 +R 7 +U 6 +L 5 +D 9 +U 8 +L 1 +D 8 +U 1 +L 2 +U 6 +L 3 +D 6 +R 3 +L 1 +U 3 +D 5 +U 9 +R 3 +U 7 +L 5 +D 3 +L 8 +U 9 +L 7 +U 4 +R 7 +L 3 +R 7 +L 4 +D 4 +L 5 +R 2 +L 2 +U 2 +D 1 +R 2 +D 5 +R 10 +U 5 +D 6 +R 4 +L 8 +U 8 +R 6 +L 1 +U 4 +L 5 +D 8 +R 7 +L 4 +D 4 +U 6 +L 6 +U 3 +R 10 +D 7 +U 6 +D 3 +R 8 +L 2 +U 5 +L 2 +D 8 +R 3 +L 6 +U 2 +D 1 +U 7 +R 3 +U 7 +L 7 +R 8 +D 3 +R 9 +U 5 +R 6 +D 3 +L 4 +R 5 +U 4 +L 7 +U 5 +R 7 +D 2 +R 4 +D 4 +L 6 +D 9 +R 2 +L 3 +U 10 +R 2 +D 5 +U 8 +L 3 +R 6 +L 5 +U 5 +L 5 +D 5 +L 3 +D 4 +U 8 +R 2 +L 9 +D 8 +U 9 +L 7 +U 5 +D 3 +L 9 +R 2 +U 6 +D 5 +U 4 +D 3 +L 9 +D 7 +U 8 +R 6 +L 5 +D 2 +U 5 +R 2 +D 9 +U 9 +D 9 +L 7 +D 5 +R 1 +U 9 +L 6 +U 5 +L 7 +D 8 +U 7 +L 9 +D 3 +R 9 +U 2 +D 8 +L 2 +D 9 +R 8 +U 6 +D 10 +R 7 +D 3 +U 5 +R 8 +D 10 +R 3 +L 2 +R 5 +U 5 +D 11 +L 5 +D 4 +R 8 +L 7 +R 4 +L 6 +U 6 +L 5 +U 9 +R 10 +D 1 +L 2 +U 9 +L 2 +U 4 +R 1 +L 11 +D 8 +R 9 +D 5 +R 11 +L 10 +R 2 +U 7 +D 9 +U 4 +L 10 +U 8 +D 2 +L 4 +U 11 +R 5 +U 8 +L 7 +D 5 +L 10 +R 8 +L 11 +U 10 +L 5 +U 6 +L 8 +U 9 +L 1 +U 2 +D 10 +U 6 +R 4 +U 7 +L 8 +D 5 +U 1 +D 2 +L 2 +U 5 +L 2 +U 11 +D 10 +L 8 +U 2 +L 8 +R 6 +U 5 +R 7 +L 1 +D 10 +L 10 +U 4 +R 8 +D 2 +R 4 +U 7 +L 8 +D 8 +U 2 +L 5 +U 3 +D 4 +L 7 +R 8 +D 11 +U 1 +D 5 +R 10 +D 2 +U 11 +R 1 +D 3 +L 3 +R 11 +L 9 +D 11 +L 10 +U 1 +R 9 +U 9 +L 8 +U 5 +D 11 +U 9 +R 7 +D 8 +R 4 +U 5 +D 11 +L 8 +D 3 +R 7 +L 2 +D 3 +R 7 +L 3 +U 3 +D 1 +U 6 +L 7 +U 8 +D 4 +L 12 +D 5 +U 4 +D 5 +U 2 +R 9 +L 6 +R 2 +D 3 +U 1 +R 11 +U 3 +R 4 +D 10 +R 3 +L 8 +U 11 +L 2 +U 6 +R 12 +D 7 +L 2 +D 7 +L 12 +D 9 +R 11 +D 6 +R 4 +L 4 +D 6 +R 11 +L 9 +D 3 +R 2 +L 12 +D 6 +R 7 +L 7 +D 5 +L 6 +R 2 +U 1 +D 6 +R 6 +L 12 +R 8 +U 9 +L 2 +U 7 +R 9 +D 9 +U 4 +D 3 +R 10 +L 1 +D 10 +R 9 +U 5 +L 2 +D 7 +R 10 +U 12 +D 11 +U 11 +L 8 +R 5 +L 11 +U 3 +D 8 +U 11 +D 2 +R 2 +D 2 +U 3 +D 8 +U 2 +D 11 +L 1 +D 11 +U 11 +L 7 +D 6 +U 5 +D 7 +R 12 +U 3 +D 5 +R 8 +D 4 +L 2 +U 11 +R 12 +D 1 +R 13 +D 12 +R 3 +D 7 +R 1 +U 4 +L 9 +U 3 +D 12 +L 4 +D 6 +L 9 +D 8 +R 5 +L 4 +R 3 +D 1 +U 8 +R 8 +D 7 +L 8 +R 8 +U 6 +R 5 +L 8 +U 4 +D 11 +R 3 +U 12 +D 8 +L 13 +U 3 +L 5 +U 2 +L 9 +R 7 +U 11 +D 10 +R 6 +L 2 +D 6 +R 9 +U 13 +L 13 +D 5 +U 11 +L 10 +U 9 +L 8 +D 7 +R 4 +L 7 +D 13 +U 9 +D 9 +U 12 +R 9 +U 1 +D 7 +L 2 +D 6 +R 1 +U 4 +R 6 +U 9 +L 8 +U 10 +L 2 +U 5 +R 4 +D 9 +L 12 +U 8 +L 2 +D 9 +U 4 +R 1 +D 5 +R 11 +U 10 +D 12 +R 2 +U 6 +R 4 +U 5 +R 5 +L 12 +R 10 +D 9 +L 11 +D 10 +R 2 +U 4 +R 5 +L 4 +U 10 +D 10 +U 2 +L 4 +R 7 +D 12 +U 8 +L 8 +D 12 +R 7 +L 13 +D 12 +R 11 +U 13 +L 11 +U 5 +D 11 +U 2 +D 14 +U 7 +R 1 +D 10 +R 10 +D 13 +R 3 +D 13 +U 2 +L 13 +U 9 +D 13 +L 7 +D 3 +L 4 +R 1 +D 11 +U 1 +D 7 +L 1 +U 1 +R 6 +D 14 +L 11 +U 13 +D 10 +L 3 +R 11 +L 3 +D 10 +L 11 +U 4 +L 13 +U 13 +D 12 +R 5 +D 1 +U 14 +D 3 +U 4 +D 5 +L 3 +D 2 +R 3 +U 8 +D 5 +U 13 +R 11 +L 10 +R 13 +L 6 +U 10 +R 2 +U 9 +D 12 +L 7 +D 8 +U 4 +D 7 +L 5 +U 10 +D 10 +R 6 +L 14 +D 11 +U 13 +D 13 +U 10 +L 1 +U 2 +L 14 +U 2 +R 2 +D 12 +R 2 +L 12 +U 1 +D 13 +R 12 +L 9 +U 5 +D 11 +L 7 +R 3 +U 2 +L 4 +U 8 +L 10 +D 13 +L 2 +U 7 +L 8 +R 1 +U 3 +L 14 +U 11 +L 3 +U 11 +L 7 +R 13 +U 13 +L 4 +U 12 +R 2 +L 8 +D 10 +L 7 +U 10 +R 2 +L 4 +D 14 +R 11 +D 4 +L 4 +R 6 +L 3 +R 5 +U 5 +L 9 +R 9 +L 3 +R 14 +U 10 +D 8 +U 5 +L 9 +R 15 +L 1 +R 4 +U 9 +R 9 +D 10 +L 7 +D 15 +U 12 +L 4 +U 10 +D 14 +R 11 +D 5 +U 14 +L 8 +R 2 +U 13 +D 5 +L 2 +U 15 +R 11 +L 1 +U 5 +D 4 +R 4 +D 10 +U 13 +L 12 +R 2 +U 4 +L 13 +R 4 +U 4 +R 14 +D 10 +R 11 +D 7 +U 12 +L 4 +U 11 +D 6 +R 1 +D 5 +L 12 +R 7 +L 3 +U 11 +R 15 +D 1 +R 2 +L 6 +U 7 +L 5 +R 4 +D 3 +R 13 +L 12 +R 15 +L 15 +U 14 +D 8 +U 1 +D 14 +U 14 +L 2 +D 1 +R 4 +L 14 +R 11 +U 11 +L 10 +D 10 +R 13 +U 11 +L 7 +R 4 +U 14 +L 2 +D 15 +R 11 +D 11 +L 13 +R 13 +D 2 +R 4 +U 5 +L 14 +D 9 +R 11 +D 4 +U 6 +D 13 +R 11 +D 6 +L 14 +D 13 +L 7 +U 7 +L 8 +D 7 +L 15 +D 7 +R 11 +U 6 +L 10 +U 4 +R 12 +L 2 +D 10 +L 14 +R 15 +D 1 +U 15 +L 11 +D 5 +L 11 +D 6 +U 7 +L 14 +R 8 +U 1 +R 4 +D 2 +R 3 +L 6 +U 8 +L 15 +U 16 +L 9 +R 16 +U 6 +L 7 +U 3 +R 13 +L 6 +U 14 +L 13 +R 2 +U 10 +R 4 +U 6 +D 7 +R 16 +U 16 +L 14 +D 6 +U 1 +D 16 +L 10 +D 7 +L 16 +D 12 +R 13 +U 15 +R 2 +U 15 +D 2 +L 14 +R 13 +L 1 +U 10 +D 10 +L 2 +D 6 +L 14 +D 15 +U 1 +D 10 +L 10 +D 5 +L 10 +R 14 +U 1 +R 7 +L 3 +R 9 +U 10 +D 2 +R 5 +D 9 +U 15 +D 4 +U 16 +D 14 +R 9 +D 13 +R 16 +D 14 +L 12 +R 16 +D 2 +L 7 +D 4 +U 5 +L 10 +R 11 +L 2 +R 1 +U 4 +R 2 +L 12 +D 7 +U 12 +L 2 +U 7 +L 12 +U 1 +R 3 +U 9 +D 1 +U 13 +R 17 +U 12 +R 3 +D 10 +R 6 +L 14 +U 5 +D 3 +U 4 +D 11 +U 7 +L 15 +U 14 +L 1 +U 10 +R 1 +L 9 +U 12 +R 15 +D 11 +R 3 +L 15 +U 7 +R 12 +U 7 +D 10 +R 17 +D 13 +L 7 +U 9 +R 14 +L 16 +R 3 +U 5 +L 10 +D 16 +L 7 +U 11 +R 7 +L 8 +D 4 +L 6 +D 6 +U 17 +D 6 +R 14 +D 4 +R 17 +U 4 +L 17 +D 5 +R 16 +U 10 +R 11 +D 7 +R 14 +D 14 +L 2 +R 11 +L 16 +D 14 +R 4 +L 7 +D 15 +R 13 +U 8 +L 12 +R 4 +U 16 +D 2 +U 10 +D 2 +U 1 +L 5 +U 4 +L 17 +R 11 +D 9 +L 2 +U 12 +R 3 +D 3 +L 10 +R 2 +D 2 +L 4 +R 14 +U 3 +R 16 +L 11 +U 1 +L 15 +R 9 +U 7 +L 12 +U 10 +L 2 +U 3 +R 8 +L 13 +R 4 +D 3 +U 10 +D 12 +R 7 +U 12 +R 9 +L 18 +D 4 +U 16 +R 7 +U 13 +D 10 +R 13 +U 12 +R 8 +D 16 +R 4 +L 3 +D 13 +U 11 +D 7 +L 3 +R 10 +L 16 +D 4 +L 15 +U 13 +R 15 +L 6 +R 14 +D 8 +R 16 +D 10 +U 10 +L 12 +D 17 +R 10 +L 4 +R 4 +U 8 +R 1 +U 13 +D 17 +L 4 +D 3 +U 3 +L 8 +D 3 +U 12 +D 2 +U 11 +L 15 +R 11 +L 14 +U 5 +D 6 +L 17 +U 18 +R 1 +U 2 +R 15 +U 8 +L 9 +U 16 +L 7 +D 9 +L 8 +U 4 +D 3 +L 6 +U 10 +L 14 +R 17 +L 16 +U 15 +R 5 +D 2 +U 8 +L 8 +U 11 +D 6 +L 14 +U 2 +D 3 +R 10 +U 2 +D 16 +U 2 +D 1 +L 12 +R 4 +L 13 +D 15 +U 6 +R 11 +U 5 +L 7 +D 15 +R 2 +D 9 +R 16 +U 1 +L 12 +U 6 +D 3 +U 3 +L 6 +U 11 +R 4 +L 11 +R 12 +U 14 +L 13 +D 13 +L 5 +U 19 +D 11 +L 14 +U 12 +D 1 +R 15 +L 17 +U 6 +R 3 +U 11 +D 11 +U 14 +R 3 +L 10 +D 11 +L 8 +U 18 +L 7 +R 6 +U 4 +D 7 +L 4 +R 12 +U 2 +R 17 +U 2 +L 9 +R 18 +U 13 +L 14 +D 16 +U 3 +D 8 +U 17 +D 15 +L 13 +R 6 +D 13 +U 17 +L 19 +U 3 +L 2 +D 14 +R 13 +D 13 +L 7 +R 12 +D 7 +U 8 +D 4 +U 13 +D 11 +U 2 +D 6 +L 1 +D 19 +L 9 +D 5 +R 11 +U 19 +L 11 +D 3 +R 3 +U 6 +D 18 +U 17 +D 12 +R 13 +U 18 +R 14 +L 10 +R 15 +L 1 +U 14 +L 19 +D 1 +U 13 +L 4 +R 6 +D 10 +R 6 +D 6 +L 15 +D 8 +L 8 +U 3 +D 14 +U 5 +L 4 +U 14 +R 3 +U 16 +R 5 +L 18 +R 16 +D 13 +U 9 +R 14 +L 2 +D 12 +R 5 +U 17 +R 9 +L 11 +D 8 +L 8 +D 8 +U 6 +R 16 +L 5 +D 14 diff --git a/data/day10.test b/data/day10.test new file mode 100644 index 0000000..37ee8ee --- /dev/null +++ b/data/day10.test @@ -0,0 +1,146 @@ +addx 15 +addx -11 +addx 6 +addx -3 +addx 5 +addx -1 +addx -8 +addx 13 +addx 4 +noop +addx -1 +addx 5 +addx -1 +addx 5 +addx -1 +addx 5 +addx -1 +addx 5 +addx -1 +addx -35 +addx 1 +addx 24 +addx -19 +addx 1 +addx 16 +addx -11 +noop +noop +addx 21 +addx -15 +noop +noop +addx -3 +addx 9 +addx 1 +addx -3 +addx 8 +addx 1 +addx 5 +noop +noop +noop +noop +noop +addx -36 +noop +addx 1 +addx 7 +noop +noop +noop +addx 2 +addx 6 +noop +noop +noop +noop +noop +addx 1 +noop +noop +addx 7 +addx 1 +noop +addx -13 +addx 13 +addx 7 +noop +addx 1 +addx -33 +noop +noop +noop +addx 2 +noop +noop +noop +addx 8 +noop +addx -1 +addx 2 +addx 1 +noop +addx 17 +addx -9 +addx 1 +addx 1 +addx -3 +addx 11 +noop +noop +addx 1 +noop +addx 1 +noop +noop +addx -13 +addx -19 +addx 1 +addx 3 +addx 26 +addx -30 +addx 12 +addx -1 +addx 3 +addx 1 +noop +noop +noop +addx -9 +addx 18 +addx 1 +addx 2 +noop +noop +addx 9 +noop +noop +noop +addx -1 +addx 2 +addx -37 +addx 1 +addx 3 +noop +addx 15 +addx -21 +addx 22 +addx -6 +addx 1 +noop +addx 2 +addx 1 +noop +addx -10 +noop +noop +addx 20 +addx 1 +addx 2 +addx 2 +addx -6 +addx -11 +noop +noop +noop diff --git a/data/day10.txt b/data/day10.txt new file mode 100644 index 0000000..259d25b --- /dev/null +++ b/data/day10.txt @@ -0,0 +1,147 @@ +noop +noop +noop +addx 6 +addx -1 +addx 5 +noop +noop +noop +addx 5 +addx 11 +addx -10 +addx 4 +noop +addx 5 +noop +noop +noop +addx 1 +noop +addx 4 +addx 5 +noop +noop +noop +addx -35 +addx -2 +addx 5 +addx 2 +addx 3 +addx -2 +addx 2 +addx 5 +addx 2 +addx 3 +addx -2 +addx 2 +addx 5 +addx 2 +addx 3 +addx -28 +addx 28 +addx 5 +addx 2 +addx -9 +addx 10 +addx -38 +noop +addx 3 +addx 2 +addx 7 +noop +noop +addx -9 +addx 10 +addx 4 +addx 2 +addx 3 +noop +noop +addx -2 +addx 7 +noop +noop +noop +addx 3 +addx 5 +addx 2 +noop +noop +noop +addx -35 +noop +noop +noop +addx 5 +addx 2 +noop +addx 3 +noop +noop +noop +addx 5 +addx 3 +addx -2 +addx 2 +addx 5 +addx 2 +addx -25 +noop +addx 30 +noop +addx 1 +noop +addx 2 +noop +addx 3 +addx -38 +noop +addx 7 +addx -2 +addx 5 +addx 2 +addx -8 +addx 13 +addx -2 +noop +addx 3 +addx 2 +addx 5 +addx 2 +addx -15 +noop +addx 20 +addx 3 +noop +addx 2 +addx -4 +addx 5 +addx -38 +addx 8 +noop +noop +noop +noop +noop +noop +addx 2 +addx 17 +addx -10 +addx 3 +noop +addx 2 +addx 1 +addx -16 +addx 19 +addx 2 +noop +addx 2 +addx 5 +addx 2 +noop +noop +noop +noop +noop +noop diff --git a/package.yaml b/package.yaml index 6e64b41..11b602c 100644 --- a/package.yaml +++ b/package.yaml @@ -21,6 +21,8 @@ description: Please see the README on GitHub at = 4.7 && < 5 +- ghc +# - modular-arithmetic ghc-options: - -Wall @@ -34,7 +36,7 @@ ghc-options: - -Wredundant-constraints # library: - # source-dirs: src +# source-dirs: src executables: AOC22-exe: diff --git a/src/AOCUtil.hs b/src/AOCUtil.hs index 4cd40f9..30a3428 100644 --- a/src/AOCUtil.hs +++ b/src/AOCUtil.hs @@ -1,44 +1,40 @@ module AOCUtil where -import Data.List -import Data.Ord + +import Data.List +import Data.Ord interactF :: String -> (String -> String) -> IO () interactF file fun = (putStrLn . fun) =<< readFile file - splitOn :: Eq a => a -> [a] -> [[a]] splitOn p s = case dropWhile (p ==) s of [] -> [] s' -> w : splitOn p s'' where (w, s'') = break (== p) s' - impl :: Bool -> Bool -> Bool impl a b = not a || b unDigits :: [Int] -> Int -unDigits [] = 0 +unDigits [] = 0 unDigits [i] = i -unDigits is = unDigits (init is) * 10 + last is +unDigits is = unDigits (init is) * 10 + last is middle :: [a] -> a middle [] = error "called AOCUtil.middle on empty list." middle ls = ls !! (length ls `div` 2) - -- mapFst :: (a->c) -> (a,b) -> (c,b) -- mapFst f (a, b) = (f a, b) -- mapSnd :: (b->c) -> (a,b) -> (a,c) -- mapSnd f (a, b) = (a, f b) - readBin :: String -> Int readBin [] = 0 readBin ls = readBin (init ls) * 2 + toBin (last ls) - where - toBin '0' = 0 - toBin '1' = 1 - + where + toBin '0' = 0 + toBin '1' = 1 first2 :: [a] -> (a, a) first2 (a : b : _) = (a, b) @@ -67,25 +63,34 @@ mapT3 f (a1, a2, a3) = (f a1, f a2, f a3) applyT :: (a -> b, a -> c) -> a -> (b, c) applyT (f1, f2) a = (f1 a, f2 a) - mostCommon :: Ord a => [a] -> a mostCommon = head . head . sortOn (Down . length) . group . sort without :: Int -> [a] -> [a] -without _ [] = [] +without _ [] = [] without 0 (a : as) = as without i (a : as) = a : without (i - 1) as clamp :: Ord a => (a, a) -> a -> a clamp (l, u) v = min u $ max l v - rotateR :: Int -> [a] -> [a] rotateR 0 ls = ls -rotateR i ls | i < 0 = rotateL (-i) ls - | otherwise = rotateR (i - 1) (last ls : init ls) +rotateR i ls + | i < 0 = rotateL (-i) ls + | otherwise = rotateR (i - 1) (last ls : init ls) rotateL :: Int -> [a] -> [a] rotateL 0 ls = ls -rotateL i ls | i < 0 = rotateR (-i) ls - | otherwise = rotateL (i - 1) (tail ls ++ [head ls]) +rotateL i ls + | i < 0 = rotateR (-i) ls + | otherwise = rotateL (i - 1) (tail ls ++ [head ls]) + +readChar :: Char -> Int +readChar c = fromEnum c - fromEnum '0' + +addT :: Num a => (a, a) -> (a, a) -> (a, a) +addT (a1, a2) (b1, b2) = (a1 + b1, a2 + b2) + +manhattan :: Num a => (a, a) -> (a, a) -> a +manhattan (a1, a2) (b1, b2) = abs (a1 - b1) + abs (a2 - b2) diff --git a/src/Days/Day03.hs b/src/Days/Day03.hs new file mode 100644 index 0000000..9aed977 --- /dev/null +++ b/src/Days/Day03.hs @@ -0,0 +1,34 @@ +module Days.Day03 where + +import AOCUtil +import Data.Char +import GHC.Utils.Misc + +runA :: IO () +runA = interactF "data/day03.txt" (show . solve . lines) + +runB :: IO () +runB = interactF "data/day03.txt" (show . solveB . lines) + +solve :: [String] -> Int +solve = sum . map (getPrio . findDup . splitBackpack) + +solveB :: [String] -> Int +solveB = sum . map (getPrio . findBadge) . chunkList 3 + +splitBackpack :: String -> (String, String) +splitBackpack s = (take l s, drop l s) + where + l = length s `div` 2 + +findDup :: (String, String) -> Char +findDup (ls, ls2) = head . filter (`elem` ls) $ ls2 + +getPrio :: Char -> Int +getPrio c + | isLower c = fromEnum c - fromEnum 'a' + 1 + | isUpper c = fromEnum c - fromEnum 'A' + 27 + | otherwise = undefined + +findBadge :: [String] -> Char +findBadge [a, b, c] = head . filter (`elem` a) . filter (`elem` b) $ c diff --git a/src/Days/Day04.hs b/src/Days/Day04.hs new file mode 100644 index 0000000..bea40df --- /dev/null +++ b/src/Days/Day04.hs @@ -0,0 +1,31 @@ +module Days.Day04 where + +import AOCUtil + +runA :: IO () +runA = interactF "data/day04.txt" (show . solve . lines) + +runB :: IO () +runB = interactF "data/day04.txt" (show . solveB . lines) + +type Section = (Int, Int) + +type Pair = (Section, Section) + +solve :: [String] -> Int +solve = length . filter sectionInclude . map readPair + +readPair :: String -> Pair +readPair = first2 . map readSection . splitOn ',' + +readSection :: String -> Section +readSection = first2 . map read . splitOn '-' + +sectionInclude :: Pair -> Bool +sectionInclude ((a, b), (c, d)) = (a <= c && d <= b) || (c <= a && b <= d) + +solveB :: [String] -> Int +solveB = length . filter sectionOverlap . map readPair + +sectionOverlap :: Pair -> Bool +sectionOverlap ((a, b), (c, d)) = not (b < c || d < a) diff --git a/src/Days/Day05.hs b/src/Days/Day05.hs new file mode 100644 index 0000000..654b6bf --- /dev/null +++ b/src/Days/Day05.hs @@ -0,0 +1,60 @@ +module Days.Day05 where + +import AOCUtil +import Data.Char +import Data.List +import GHC.Utils.Misc + +runA :: IO () +runA = interactF "data/day05.txt" (solve) + +runB :: IO () +runB = interactF "data/day05.txt" (solveB) + +solve :: String -> String +solve = show . map head . uncurry (flip processAll) . readInput + +solveB :: String -> String +solveB = show . map head . uncurry (flip processAllB) . readInput + +type Stack = [Char] -- prop/push front + +type Instruction = (Int, Int, Int) -- from, to, amount + +readInput :: String -> ([Stack], [Instruction]) +readInput s = (readStacks a, readInstructions b) + where + (a, b) = first2 . map unlines . splitOn "" . lines $ s + +readStacks :: String -> [Stack] +readStacks = map (reverse . filter (/= ' ') . head . tail) . chunkList 4 . map reverse . transpose . init . lines + +readInstructions :: String -> [Instruction] +readInstructions = map readI . lines + +readI :: String -> Instruction +readI = first3 . map read . filter (isDigit . head) . words + +processAll :: [Instruction] -> [Stack] -> [Stack] +processAll [] = id +processAll (i : is) = processAll is . process i + +processAllB :: [Instruction] -> [Stack] -> [Stack] +processAllB [] = id +processAllB (i : is) = processAllB is . processB i + +process :: Instruction -> [Stack] -> [Stack] +process (a, b, c) stack = map update . zip [1 ..] $ stack + where + update (i, s) + | i == b = drop a s + | i == c = (reverse . take a . (!!) stack $ (b - 1)) ++ s + | otherwise = s + +processB :: Instruction -> [Stack] -> [Stack] +processB (a, b, c) stack = map update . zip [1 ..] $ stack + where + update (i, s) + | i == b = drop a s + | i == c = (take a . (!!) stack $ (b - 1)) ++ s + | otherwise = s diff --git a/src/Days/Day06.hs b/src/Days/Day06.hs new file mode 100644 index 0000000..5df5d1d --- /dev/null +++ b/src/Days/Day06.hs @@ -0,0 +1,21 @@ +module Days.Day06 where + +import AOCUtil +import Data.Char +import Data.List +import GHC.Utils.Misc + +runA :: IO () +runA = interactF "data/day06.txt" (show . solve) + +runB :: IO () +runB = interactF "data/day06.txt" (show . solveB) + +solve :: String -> Int +solve = fst . head . filter (noDups 4) . zip [4 ..] . filter ((== 4) . length) . map (take 4) . tails + +solveB :: String -> Int +solveB = fst . head . filter (noDups 14) . zip [14 ..] . filter ((== 14) . length) . map (take 14) . tails + +noDups :: Int -> (Int, [Char]) -> Bool +noDups l (i, ls) = (== l) . length . nub . sort $ ls diff --git a/src/Days/Day07.hs b/src/Days/Day07.hs new file mode 100644 index 0000000..dfac461 --- /dev/null +++ b/src/Days/Day07.hs @@ -0,0 +1,44 @@ +module Days.Day07 where + +import AOCUtil +import Data.Char +import Data.List +import GHC.Utils.Misc + +runA :: IO () +runA = interactF "data/day07.txt" (solve) + +runB :: IO () +runB = interactF "data/day07.txt" (solveB) + +solve :: String -> String +solve s = show . sum . filter (< 100000) . map (getDirectorySize fl) . getDirectories $ fl + where + fl = generateFileList [] . lines $ s + +solveB :: String -> String +solveB s = show . head . sort . filter (>= toFree fl) . map (getDirectorySize fl) . getDirectories $ fl + where + fl = generateFileList [] . lines $ s + +type File = ([String], Int) -- Path (Reversed) including Filename, Size + +generateFileList :: [String] -> [String] -> [File] -- current dir (reversed), list of commands +generateFileList _ [] = [] +generateFileList dir (c : cs) + | isPrefixOf "$ cd .." c = generateFileList (tail dir) cs + | isPrefixOf "$ cd" c = generateFileList ((last $ words c) : dir) cs + -- \| isPrefixOf "$ ls" c = generateFileList dir cs + | isDigit $ head c = (((last . words $ c) : dir), read . last . init . words $ c) : (generateFileList dir cs) + | otherwise = generateFileList dir cs + +type Dir = [String] + +getDirectories :: [File] -> [Dir] +getDirectories = nub . sort . concatMap (tails . tail . fst) + +getDirectorySize :: [File] -> Dir -> Int +getDirectorySize fs d = sum . map snd . filter (isSuffixOf d . fst) $ fs + +toFree :: [File] -> Int +toFree = (flip (-) 40000000) . (flip getDirectorySize) ["/"] diff --git a/src/Days/Day08.hs b/src/Days/Day08.hs new file mode 100644 index 0000000..da003b8 --- /dev/null +++ b/src/Days/Day08.hs @@ -0,0 +1,54 @@ +module Days.Day08 where + +import AOCUtil +import Data.Char +import Data.List +import GHC.Utils.Misc + +runA :: IO () +runA = interactF "data/day08.txt" (solve) + +runB :: IO () +runB = interactF "data/day08.txt" (solveB) + +solve :: String -> String +solve s = show . length . filter (isVisible for) $ [(x, y) | x <- [0 .. fwidth for - 1], y <- [0 .. fheight for - 1]] + where + for = map (map readChar) . lines $ s + +solveB :: String -> String +solveB s = show . maximum . map (scenicScore for) $ [(x, y) | x <- [0 .. fwidth for - 1], y <- [0 .. fheight for - 1]] + where + for = map (map readChar) . lines $ s + +type Forrest = [[Int]] + +isVisible :: Forrest -> (Int, Int) -> Bool +isVisible f (x, y) = isLookt h left || isLookt h (tail right2) || isLookt h top || isLookt h (tail bot2) + where + row = f !! y + col = transpose f !! x + h = f !! y !! x + (left, right2) = splitAt x row + (top, bot2) = splitAt y col + +scenicScore :: Forrest -> (Int, Int) -> Int +scenicScore f (x, y) = viewDist h (reverse left) * viewDist h (tail right2) * viewDist h (reverse top) * viewDist h (tail bot2) + where + row = f !! y + col = transpose f !! x + h = f !! y !! x + (left, right2) = splitAt x row + (top, bot2) = splitAt y col + +viewDist :: Int -> [Int] -> Int +viewDist i ls = min (length ls) . (+ 1) . length . takeWhile (< i) $ ls + +isLookt :: Int -> [Int] -> Bool +isLookt m = all (< m) + +fwidth :: Forrest -> Int +fwidth = length . head + +fheight :: Forrest -> Int +fheight = length diff --git a/src/Days/Day09.hs b/src/Days/Day09.hs new file mode 100644 index 0000000..131d620 --- /dev/null +++ b/src/Days/Day09.hs @@ -0,0 +1,85 @@ +module Days.Day09 where + +import AOCUtil +import Data.Char +import Data.List +import GHC.Utils.Misc + +runA :: IO () +runA = interactF "data/day09.test" (solve) + +runB :: IO () +runB = interactF "data/day09.txt" (solveB) + +solve :: String -> String +solve = show . length . nub . sort . map snd . processInstruction [((0, 0), (0, 0))] . parseInput + +solveB :: String -> String +solveB = show . length . nub . sort . map last . process2 [longRope] . parseInput + +type Pos = (Int, Int) + +type Rope = (Pos, Pos) + +type LongRope = [Pos] + +longRope :: LongRope +longRope = replicate 10 (0, 0) + +data Dir = DUp | DDown | DLeft | DRight +-- ^ y +-- | +-- | +-- +----> x + +move :: Dir -> Pos -> Pos +move DUp (x, y) = (x, y + 1) +move DDown (x, y) = (x, y - 1) +move DLeft (x, y) = (x - 1, y) +move DRight (x, y) = (x + 1, y) + +parseInput :: String -> [Dir] +parseInput = concatMap (parseCommand . words) . lines + +parseCommand :: [String] -> [Dir] +parseCommand ["R", i] = replicate (read i) DRight +parseCommand ["L", i] = replicate (read i) DLeft +parseCommand ["U", i] = replicate (read i) DUp +parseCommand ["D", i] = replicate (read i) DDown + +processInstruction :: [Rope] -> [Dir] -> [Rope] +processInstruction [] _ = error "Specify starting position" +processInstruction r [] = r +processInstruction r@((h, t) : _) (d : ds) = processInstruction ((h2, adjust3 h2 t) : r) ds + where + h2 = move d h + +process2 :: [LongRope] -> [Dir] -> [LongRope] +process2 [] _ = error "Specify starting rope" +process2 r [] = r +process2 r@(rope : _) (d : ds) = process2 (moveRope rope d : r) ds + +adjust3 :: Pos -> Pos -> Pos -- head, tain -> new tail +adjust3 (hx, hy) (tx, ty) = if max (abs $ hx - tx) (abs $ hy - ty) > 1 then (tx + signum (hx - tx), ty + signum (hy - ty)) else (tx, ty) + +moveRope :: LongRope -> Dir -> LongRope -- moves head +moveRope (h : rs) d = fixRope (move d h : rs) + +fixRope :: LongRope -> LongRope -- moves tail +fixRope [a] = [a] +fixRope (h : t : ts) = (h : fixRope (adjust3 h t : ts)) + +-- adjust :: Dir -> Rope -> Rope -- Dir, Head, Tail -> Tail +-- adjust DRight (h@(hx, hy), t@(tx, ty)) = (move DRight h, if tx < hx then h else t) +-- adjust DLeft (h@(hx, hy), t@(tx, ty)) = (move DLeft h, if tx > hx then h else t) +-- adjust DDown (h@(hx, hy), t@(tx, ty)) = (move DDown h, if ty > hy then h else t) +-- adjust DUp (h@(hx, hy), t@(tx, ty)) = (move DUp h, if ty < hy then h else t) + +-- adjust2 :: Pos -> Pos -> Pos -- head, tain -> new tail +-- adjust2 h2 t = if dist <= 1 then t else t2 +-- where +-- dist = max (abs $ fst h2 - fst t) (abs $ snd h2 - snd t) +-- t2 = head . sortOn (edist t) . map (addT h2) $ [(0, 1), (0, -1), (1, 0), (-1, 0)] + +-- edist :: Num a => (a, a) -> (a, a) -> a +-- edist (a1, a2) (b1, b2) = (a1 - b1) ^ 2 + (a2 - b2) ^ 2 diff --git a/src/Days/Day10.hs b/src/Days/Day10.hs new file mode 100644 index 0000000..9926285 --- /dev/null +++ b/src/Days/Day10.hs @@ -0,0 +1,45 @@ +module Days.Day10 where + +import AOCUtil +import Data.Char +import Data.List +import GHC.Utils.Misc + +runA :: IO () +runA = interactF "data/day10.txt" (solve) + +runB :: IO () +runB = interactF "data/day10.txt" (solveB) + +solve :: String -> String +solve = show . sum . map score . zip [1 ..] . scanl applyInstruction 1 . cycleCorrection . map parseInstruction . lines + +solveB :: String -> String +solveB = unlines . chunkList 40 . map getPixel . zip [0 ..] . scanl applyInstruction 1 . cycleCorrection . map parseInstruction . lines + +data Instruction = Noop | Add Int + +parseInstruction :: String -> Instruction +parseInstruction s + | isPrefixOf "noop" s = Noop + | isPrefixOf "addx" s = Add . read . last . words $ s + | otherwise = error "bad instruction" + +cycleCorrection :: [Instruction] -> [Instruction] +cycleCorrection = concatMap duplicateI + +duplicateI :: Instruction -> [Instruction] +duplicateI Noop = [Noop] +duplicateI (Add x) = [Noop, Add x] + +applyInstruction :: Int -> Instruction -> Int +applyInstruction i Noop = i +applyInstruction i (Add x) = i + x + +score :: (Int, Int) -> Int +score (i, v) + | i `elem` [20, 60, 100, 140, 180, 220] = i * v + | otherwise = 0 + +getPixel :: (Int, Int) -> Char +getPixel (i, v) = if abs ((i `mod` 40) - v) <= 1 then '#' else '.' diff --git a/src/Days/Day11.hs b/src/Days/Day11.hs new file mode 100644 index 0000000..db95295 --- /dev/null +++ b/src/Days/Day11.hs @@ -0,0 +1,69 @@ +module Days.Day11 where + +import AOCUtil +import Data.Bool +import Data.Char +import Data.List +import Data.Modular +import GHC.Utils.Misc + +runA :: IO () +runA = interactF "data/day10.txt" solve + +runB :: IO () +runB = interactF "data/day10.txt" solveB + +solve :: String -> String +solve _ = "change 'handleItems' for A part " -- show . uncurry (*) . first2 . reverse . sort . map insp . runRounds 20 $ initialMonkeys + +solveB :: String -> String +solveB _ = show . uncurry (*) . first2 . reverse . sort . map insp . runRounds 10000 $ initialMonkeys + +factor :: Int +factor = 2 * 7 * 3 * 11 * 17 * 5 * 13 * 19 + +type Item = Int + +data Monkey = Monkey {items :: [Item], op :: Item -> Item, target :: Item -> Int, insp :: Int} + +instance Show Monkey where + show (Monkey it _ _ is) = show it ++ "@" ++ show is + +initialMonkeys :: [Monkey] +initialMonkeys = + [ Monkey {items = [54, 53], op = (* 3), target = bool 6 2 . (== 0) . (`mod` 2), insp = 0}, + Monkey {items = [95, 88, 75, 81, 91, 67, 65, 84], op = (* 11), target = bool 4 3 . (== 0) . (`mod` 7), insp = 0}, + Monkey {items = [76, 81, 50, 93, 96, 81, 83], op = (+ 6), target = bool 1 5 . (== 0) . (`mod` 3), insp = 0}, + Monkey {items = [83, 85, 85, 63], op = (+ 4), target = bool 4 7 . (== 0) . (`mod` 11), insp = 0}, + Monkey {items = [85, 52, 64], op = (+ 8), target = bool 7 0 . (== 0) . (`mod` 17), insp = 0}, + Monkey {items = [57], op = (+ 2), target = bool 3 1 . (== 0) . (`mod` 5), insp = 0}, + Monkey {items = [60, 95, 76, 66, 91], op = (^ 2), target = bool 5 2 . (== 0) . (`mod` 13), insp = 0}, + Monkey {items = [65, 84, 76, 72, 79, 65], op = (+ 5), target = bool 0 6 . (== 0) . (`mod` 19), insp = 0} + ] + +runRounds :: Int -> [Monkey] -> [Monkey] +runRounds n = nTimes n monkeyRound + +monkeyRound :: [Monkey] -> [Monkey] +monkeyRound ms = foldl monkeyCycle ms [0 .. n - 1] + where + n = length ms + +monkeyCycle :: [Monkey] -> Int -> [Monkey] +monkeyCycle ms i = clearMonkey i . foldl (.) id (map addItem toAdd) $ ms + where + activeMonkey = ms !! i + toAdd = handleItems activeMonkey + +handleItems :: Monkey -> [(Int, Item)] +handleItems (Monkey [] _ _ _) = [] -- Target Monkey, Item worry level +handleItems (Monkey (i : is) op target insp) = (target newWorry, newWorry) : handleItems (Monkey is op target insp) + where + -- newWorry = (`div` 3) . op $ i -- for A + newWorry = (`mod` factor) . op $ i -- for B + +addItem :: (Int, Item) -> [Monkey] -> [Monkey] -- Index Item +addItem (idx, item) = zipWith (\i m -> if idx == i then m {items = items m ++ [item]} else m) [0 ..] + +clearMonkey :: Int -> [Monkey] -> [Monkey] +clearMonkey idx = zipWith (\i m -> if idx == i then m {items = [], insp = insp m + length (items m)} else m) [0 ..] diff --git a/src/Main b/src/Main new file mode 100644 index 0000000..c60ffac Binary files /dev/null and b/src/Main differ diff --git a/src/Main.exe b/src/Main.exe new file mode 100644 index 0000000..ae6717c Binary files /dev/null and b/src/Main.exe differ diff --git a/src/Main.hs b/src/Main.hs index eb19646..a7cf5b2 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -1,8 +1,6 @@ module Main where -import Days.Day01 +import Days.Day11 main :: IO () -main = Days.Day01.runA - - +main = Days.Day11.runB diff --git a/stack.yaml b/stack.yaml index 53f016b..c48ec9d 100644 --- a/stack.yaml +++ b/stack.yaml @@ -40,7 +40,8 @@ packages: # - git: https://github.com/commercialhaskell/stack.git # commit: e7b331f14bcffb8367cd58fbfc8b40ec7642100a # -# extra-deps: [] +extra-deps: + - modular-arithmetic-2.0.0.2@sha256:7fa5ecf2a716f826f2090f838da1fd21e38fb20b55e46d1c2083944662383e86,1653 # Override default flag values for local packages and extra-deps # flags: {} diff --git a/stack.yaml.lock b/stack.yaml.lock index 74c2087..af6c201 100644 --- a/stack.yaml.lock +++ b/stack.yaml.lock @@ -3,5 +3,12 @@ # For more information, please see the documentation at: # https://docs.haskellstack.org/en/stable/lock_files -packages: [] +packages: +- completed: + hackage: modular-arithmetic-2.0.0.2@sha256:7fa5ecf2a716f826f2090f838da1fd21e38fb20b55e46d1c2083944662383e86,1653 + pantry-tree: + sha256: 337ec2899350d0a2f65fe9a1b64b0fc499465230ef124e9a0f3b4a4bd9aec14f + size: 383 + original: + hackage: modular-arithmetic-2.0.0.2@sha256:7fa5ecf2a716f826f2090f838da1fd21e38fb20b55e46d1c2083944662383e86,1653 snapshots: []