This commit is contained in:
2022-12-12 18:08:06 +01:00
parent 5a872f3063
commit bc2bed0bfd
31 changed files with 5731 additions and 26 deletions

View File

@@ -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

300
data/day03.txt Normal file
View File

@@ -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

6
data/day04.test Normal file
View File

@@ -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

1000
data/day04.txt Normal file

File diff suppressed because it is too large Load Diff

515
data/day05.txt Normal file
View File

@@ -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

1
data/day06.txt Normal file
View File

@@ -0,0 +1 @@
plhlsssjsrscspsffmrffwvfvrvvmbbnjnrnrfnndlnlznlznlnccdbbhvbvgvmvzmzvmzmbbrcclsslzslzzsztzftzzhggnjgnjnhnmnqnqqfdfnnrwnwsnwwvgvqqgpptvtrvvfmmzjzmmjssmwsmmhzzvvwzwcwrcrllpbppdgdvvwqvvsnsrnsncnwntnggwqgqhqrqprqrddjvddqsqhshchfffzddswdsshhcnhnqqfjffvlvwvssdqqwrwvrvhrvrzzgwggcjcgclcwchhzvzmzrrjwjqwwvbwwrmmvmpmzpzgpgsghgrrtmmlfmmnzzmpzzvmvjjsqqshqshsqqgtqggpvvrtttwbbhnbnlbnlnhnthtjhjshhrmrjjlclpprmrnrsrwrbwrwwjnwnbwbhbmbggdbgghllcvlvddzbdbdvdwvdvjvqvcvczvcvclvvrggrngrrwcwbcczgghnhznhnttbcbvcvttrrpbrppndppvvvgvtgvvhfvhhttppjmjllznlnldnldlwlnwlnlttgzzcfcggwmgmqgmmshmhqqdfqfpfqppprzrhrnrhnrrtsrrgpgnpngnqnmmrtrvtrrfccszszffvlfvlvssvdvvpggvcvscvvpmpgpqpfqqhttrhhsbhbqhhzggzrgrqrfqffwllggrgqqjzqzzsgglvgllsgllptltblbggvrggctczzllvsvcscrrzjrzzjnnbvvtntpntnvtntcntcnnwsnnnvjnnsccsddcvvgzgwggbnbwnwbwmwttzzsgzzjpzztwztwwhhzggplgplggwwwphpmmhchsccmwmttvjtjftffzbfffjljbbqvvstsggbbqrbqrbrhbbrmbmppvrpphptpggqgddtmdtmdmbbbcdbbgssmzzthhtjjrgjrgrzzchzhttgddjnjrjmjllrcrqqsvsjjjhvvphhgjhgjhjccwmcmjcmjmhmzznmmcbcscddcsssnppsnpnmnqmmtztftqtjtqqgvgvjjfnjffqbqbfqqwfqfcfsfttvccnssjvvpfvpvttvpvccwhwfwlwlclljqqststllgqgzqqfpflpplpssnntstqqpnnsrnsrrsvrsvsrvsrrtztmtptpcpssgnnfvflffscsqszzsppfnftfptfpfnfbbwzbzfbbtggrzrnntztnznhnnlbnbrbdddjhjchhdshhnzhnnsrnrrqwrrdsdlsstdsslqsqdqvqzvqvwqqlmmwzmwzwztzlzczhqfrclvgvnlchrggsrjhntctdbpfdcffwjngdvdrjmgvwvptlvlhvhshqphmrdznqbtchcvrwfrpvwhzmrwlcjwnrsgrqcbsgpwjthstvqzlwjjmqbvhhdfdsmqnmnswmwjtpgjhdpgcnvmlcjwjzrjhmrqmqnrqrmgdnbdgznwhgzncmcbzpntcdflvrbfdzwgpnqjqmrcqpbrzwhwdgtgshhmrwvhnrwslvcswjvdgglfrdvmqdspppwmvfzvdbvpcnhmvgfqwnvjvvzrvttwvbjrbjlllmwtlcltvqmwshnqsdtjrptvqjvdjgzwgzzhcdbwjzhdgsptfrtmmqvhsnsnpgwbncbnnvwmmrrjgfccbzcpcjmqvqsbvjrstzblsrngphwndfdswjnnnfdgpcbslvbjglqqnbbtjljsmdgcslmwlvgwpsqthlmmqfgpgmcvrpvvtzcjdrwcjgrbwthblwpwpbzvjvhzsphmfhfwvsthlfnhhfcmpsnmgrvrntlzpdvqwtrghnslnfhcjwrsvrngqqtwvcsfhbjwmsnmsmgvdhnzjgljtchbtwlfppvbtdclbdjdmwzcntvgfjlcwdplnjwqnzqhnfgcnbrgftqpdmqzrrhglbzzvjcdnbtfnvmsrbjdzhbqmhnsmprgvjzzgvllhqnzgpstqzcnlgsrcwzlhwqvcjlwnnjslmdtwqcpbrntrmrmmtscjwwtzjhghtqvvpldzvhtmspzlnlfgrfhmsndbdgpgvphwwgqhrtlwztgqqsrwnrnqphqfsrtbztqbrgmfbtpjwhhrglhbzmmjptppnfdzlpbqfcbdwzdtqbrvfmtdzdjlnzvqfnzmttpqgzgmrqwmdtmdzrttffpdlgwdhnlrhnnztphvrbzcrlvcpswlngcjhdzqwwwpzdmhhwpnzwgjsdsdbdvpfsrwmwvsggpcqbchwjpgljnbtpvjzbbvgsbsbjmtwtbjtzzsfvrmfvnmcngvvdsvljvjbrlfgstjrhtjplttzhjfbmphvbqdsmwfwspqpcvmgzgjnqlphshlgdwcvtmpwcfgdcbqwpnshfgrfjvlrtqbffwwtbnwtvjlsdgwgfmhlrsmfrjzcwccdzfwwdwhwdsjbllhjsqmnqvngvdmbvbssfjtjfbtngrdwgldcrtpmvrbrmpvwwsfrlnbqsqzfnftpbhslqccnbqwgbdbfpblpmwbgjzmnptnhdjzqjhdrhqbtfhsrdqwlmwzqlsmmslgfzpvtgtsrlszvqrhrzclbqhzzwwfmhrrvsrnsjbdjsqqlsmgdmgbdtmvfjmsbwjqmqrvrhqbchpqrwvlvwpvhjlbdzfjvrwmchccrsrfvhzmpfjqwnrbvqmgwjcbndjdtfgnrzrqwgzhrdvghdrvgtplcrthgchmvwtdrchfwpdszzzhqpmrlzvfdnfnlwghmmwvsscbrdbchhgttsnbzdbqgddqfvcgvqwltnqtcwrmhtftnlwvlglsvvctccnntznsjnmmgqlzmplsdspnjtmzlbvrfzfclnhgjzmvntdwhspqwtpgndspnjqjqwrpwhjhpvjwfptpndnwvcjdwsvdtcrtwpsprgmrspgmcsdgtjbbgsgvcjhrcldlvgvqwqwthplzgwbzmszjfrlnznvgphnqzcwsztvvljlrlzrndbzccstprhntnlmshhclnrsmsvvvsbmpfdjsmspwcqtmlrrdmfzjjjhmsmdfqddzpgtbzbsnhhhpsfrdrdvpvpnjmvnhdrzrqggrpqdcmctvqfrtfmjjqjwgzzbrdfplhzjbnqlmjlcgvmsbpgdlfjmbgqtrvzzdgtlmbqthjrdtlstqtzqvfjvmmstsmtsbnjvstjjvrrjqcbjvhfpslpvjmdznrcnsvlpbpzmslqtpczmvhdwzrhwbwtfvrrmbszvrhwsjrclcscgngwvblbbrqprgshwzhlqgwmpfsmqsvpjbdccdmtnnhqfwvlgjlszmmmdmtmpzwhplzsjztrnwngbvspqqbmghwzgvfjdrblfmtwcvnczsrflmsjmrsvzldmttjwcmnvwcbjfvznhgntnqfbfchcqqshhjldgltqhdlqldlpfjnjvtbvbntzdjzstcqbzdnmsvcdgvjmmvtdfvdplqfndqqlzlspmjgdfbgsvwzqzsvvbbldltbtzwzpqrzfmfzgdbpqnwtrfcgwmlbpzrgscbjvfdwnjzjdfzltsbppnljzrgggplmttpmgwnhdlwfhwzsrcflnrqqzwsbqllwjqlrgwbhvcvqdvjvpbzgnfbbbtccvplzggplbrsbldllwmttwtvltsfljfbbprtvlfshhwdhdgvzfzjttvnphpnjnzsbvfwflfpqwnhvwjdsrtbwsjzqhgfldnssfbbzzqqrwtjvwjschmndgqzjtpsbfhwtmqbtfstrbghgtnldjqtshdnrwzvwddchhvdbsfjnqzfjdpvhvwwjspftgbtgwzdfgzzhpvjpdlrrdfnpftshthwzjzmzdghnfdqcbmjhfdgzrcgrzbrjtmhwbjhcpgjdsmnqzncdlwhqqzqblgdbbdsmrqgbdbmdczvvpnbbjdwrlmrwgnnbbzpcnsjgcmshgzwnjzwjlrdmvmhvjrzphgpczppqvwjthcdphprhhrggjdpzmgtpjjfvpczzrvsssfrrptnzlstrhmbhvzmwjnddshrrtgspbllvqlsptrtvtldsgnjjbwtfmtbjdvmgbptjlzhpttjmvpgnjphswhtdq

23
data/day07.test Normal file
View File

@@ -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

980
data/day07.txt Normal file
View File

@@ -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

5
data/day08.test Normal file
View File

@@ -0,0 +1,5 @@
30373
25512
65332
33549
35390

99
data/day08.txt Normal file
View File

@@ -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

8
data/day09.2.test Normal file
View File

@@ -0,0 +1,8 @@
R 5
U 8
L 8
D 3
R 17
D 10
L 25
U 20

8
data/day09.test Normal file
View File

@@ -0,0 +1,8 @@
R 4
U 4
L 3
D 1
R 4
D 1
L 5
R 2

2000
data/day09.txt Normal file

File diff suppressed because it is too large Load Diff

146
data/day10.test Normal file
View File

@@ -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

147
data/day10.txt Normal file
View File

@@ -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

View File

@@ -21,6 +21,8 @@ description: Please see the README on GitHub at <https://github.com/gith
dependencies:
- base >= 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:

View File

@@ -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)

34
src/Days/Day03.hs Normal file
View File

@@ -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

31
src/Days/Day04.hs Normal file
View File

@@ -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)

60
src/Days/Day05.hs Normal file
View File

@@ -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

21
src/Days/Day06.hs Normal file
View File

@@ -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

44
src/Days/Day07.hs Normal file
View File

@@ -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) ["/"]

54
src/Days/Day08.hs Normal file
View File

@@ -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

85
src/Days/Day09.hs Normal file
View File

@@ -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

45
src/Days/Day10.hs Normal file
View File

@@ -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 '.'

69
src/Days/Day11.hs Normal file
View File

@@ -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 ..]

BIN
src/Main Normal file

Binary file not shown.

BIN
src/Main.exe Normal file

Binary file not shown.

View File

@@ -1,8 +1,6 @@
module Main where
import Days.Day01
import Days.Day11
main :: IO ()
main = Days.Day01.runA
main = Days.Day11.runB

View File

@@ -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: {}

View File

@@ -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: []