Day 3
This commit is contained in:
@@ -31,6 +31,10 @@ library
|
|||||||
Day2.Part1
|
Day2.Part1
|
||||||
Day2.Part2
|
Day2.Part2
|
||||||
Day2.Shared
|
Day2.Shared
|
||||||
|
Day3
|
||||||
|
Day3.Part1
|
||||||
|
Day3.Part2
|
||||||
|
Day3.Shared
|
||||||
Lib
|
Lib
|
||||||
other-modules:
|
other-modules:
|
||||||
Paths_aoc2022
|
Paths_aoc2022
|
||||||
@@ -40,7 +44,10 @@ library
|
|||||||
build-depends:
|
build-depends:
|
||||||
QuickCheck
|
QuickCheck
|
||||||
, base >=4.7 && <5
|
, base >=4.7 && <5
|
||||||
|
, containers
|
||||||
|
, heredoc
|
||||||
, hspec
|
, hspec
|
||||||
|
, lens
|
||||||
, split
|
, split
|
||||||
, text
|
, text
|
||||||
default-language: Haskell2010
|
default-language: Haskell2010
|
||||||
@@ -56,7 +63,10 @@ executable aoc2022-exe
|
|||||||
QuickCheck
|
QuickCheck
|
||||||
, aoc2022
|
, aoc2022
|
||||||
, base >=4.7 && <5
|
, base >=4.7 && <5
|
||||||
|
, containers
|
||||||
|
, heredoc
|
||||||
, hspec
|
, hspec
|
||||||
|
, lens
|
||||||
, split
|
, split
|
||||||
, text
|
, text
|
||||||
default-language: Haskell2010
|
default-language: Haskell2010
|
||||||
@@ -67,6 +77,7 @@ test-suite aoc2022-test
|
|||||||
other-modules:
|
other-modules:
|
||||||
Day1Spec
|
Day1Spec
|
||||||
Day2Spec
|
Day2Spec
|
||||||
|
Day3Spec
|
||||||
Paths_aoc2022
|
Paths_aoc2022
|
||||||
hs-source-dirs:
|
hs-source-dirs:
|
||||||
test
|
test
|
||||||
@@ -75,7 +86,10 @@ test-suite aoc2022-test
|
|||||||
QuickCheck
|
QuickCheck
|
||||||
, aoc2022
|
, aoc2022
|
||||||
, base >=4.7 && <5
|
, base >=4.7 && <5
|
||||||
|
, containers
|
||||||
|
, heredoc
|
||||||
, hspec
|
, hspec
|
||||||
|
, lens
|
||||||
, split
|
, split
|
||||||
, text
|
, text
|
||||||
default-language: Haskell2010
|
default-language: Haskell2010
|
||||||
|
|||||||
@@ -25,6 +25,10 @@ dependencies:
|
|||||||
- QuickCheck
|
- QuickCheck
|
||||||
- text
|
- text
|
||||||
- split
|
- split
|
||||||
|
- heredoc
|
||||||
|
- containers
|
||||||
|
- split
|
||||||
|
- lens
|
||||||
|
|
||||||
ghc-options:
|
ghc-options:
|
||||||
- -Wall
|
- -Wall
|
||||||
|
|||||||
300
ressources/day03-input
Normal file
300
ressources/day03-input
Normal file
@@ -0,0 +1,300 @@
|
|||||||
|
GwrhJPDJCZFRcwfZWV
|
||||||
|
LjnQlqNpjjmpmQlLlqNfZRvQcTWcTSTTZcSQcZ
|
||||||
|
nNqjdspspngnmjmslqmjjjCDGrHPHMGddGCMCGPPPJWC
|
||||||
|
GwmVZmPWWFFmBbVbZVwmbPsTCnlgQgnQfhlffffZnlQh
|
||||||
|
DqVDSqqSMzLLDDNSHHLdqSdSllCQjsTlClhlflnTlhjgfgfM
|
||||||
|
VHJztNLHGtcbvvPG
|
||||||
|
bjrPrNCtNrjdcCPpptfpTVspDtfTtB
|
||||||
|
JGQJMJQMmmmZMnnLpLBTpHCD
|
||||||
|
WJJqWRgWlCJZhZRCQZwdPScdrPNbvzPzwvqz
|
||||||
|
QNSQNBWQNLjZBNNhLhSNRsTcsrTTVzcwZZZsfrrbwb
|
||||||
|
tCFtHpppppMldpvpqnMFmMVGrbPcrwbzswrzcccfvTfw
|
||||||
|
pdmCpgqCdmHHdJVWgSRNJDRVVj
|
||||||
|
sNrFnvNSzrjQtQjQTj
|
||||||
|
lcPmcJDLdPDbJPVLljdGGBBThBQTGwTtBw
|
||||||
|
PDLqmJmpJQfFqfqsCM
|
||||||
|
BnhctqdnqnRcBnslCJJCMrJrsG
|
||||||
|
wNDMZpbQwMpCvCGVjlss
|
||||||
|
WfzNwZFbwZzZmFZbLzNwzzzzcdqgRMTTPdHPTTPMRdcWgRPt
|
||||||
|
grsrVSFSSdFSDFVFjZZWwpWpZWZplgZZ
|
||||||
|
mcBPPPBLBfNdLlvvWljWJC
|
||||||
|
dMcmcRdbRzdVhFthSsTShM
|
||||||
|
bzvJZMTzTZSHLCCdDzmDcc
|
||||||
|
hqBqWPFssvshWvvssNqtsHftmfpHfdcdDGHmcpfctL
|
||||||
|
WvBQgNNNhghTJbJQlJTZlT
|
||||||
|
chcdwNwdbCbQctCjnnQGHsQspMHMjG
|
||||||
|
nSSSJqJZzJgWWRfZDJSnqvTTsVvvHVPpHVfpjHMTjP
|
||||||
|
BZRDRmmrDWSrZWWzWSRNhdnCFwChclFtwbNdtr
|
||||||
|
lNgmssCtqLwqCCtfsCLHPFhhhmMhVzBDbVzMDMVz
|
||||||
|
ZnRlQTlJzFQFQFVV
|
||||||
|
npZJvRRGZSnWvSvrSLglsClfpfcLgNgpHf
|
||||||
|
tVtqcVqFVtZhcfFtqlgSpmpDSDNPzSzZmNpw
|
||||||
|
LRGTHqbrHdnGHrTCSSwNDzMDwPMzNwbp
|
||||||
|
TqWGJrGHCHnTWnhsWcFthFjtfQch
|
||||||
|
qNnTbwtctvffFcqfrHjMrFjVHRjSjZDZ
|
||||||
|
dLLzWWPmCmCzGdsLgBLGGBDRMVMHRlrrrZDDZsNMrNNS
|
||||||
|
PJQWggCzWNWJzGWfchvfTbJvfnnwtf
|
||||||
|
ghzdgzzdQsdqzzhMNqQzvhgQnRRBWTjWWGTRGWwGTZhwGnBT
|
||||||
|
fsrfJHbFfDFLVLVFHrWCWrBRZZTGCCjwWZ
|
||||||
|
HLLllcDPbLPQdPspMNgvMt
|
||||||
|
fNDJqdPNbtHpCbwpCCCp
|
||||||
|
RTMRLrzGrMRMRPWnnvSmgCHFCCFmmT
|
||||||
|
WQsWQjzGWMsGQzWclQtVBJfBftNdtqVPfP
|
||||||
|
gbTCVVmDVFdsgmgrrcfwlwfTfPlcRR
|
||||||
|
qhQZqQvnQhLQhJnvfPcSwSwlfjGcqjqj
|
||||||
|
tLNZLZZJJZthpzhMZDCdFmFsmWWmtDDgsw
|
||||||
|
bqCvLvLppzPzPPvPbFztFtttBNGdGsRggSgGSHDdggHSzNgH
|
||||||
|
rMQpWfMfrcTjWJhwWHHsSBsRBdSTTNBgSR
|
||||||
|
VwfmWjwMWwccrWcWpQQFnFtlCqmltFnFLbbZmn
|
||||||
|
cWqsMWJMzqJJMHsJcqsJqTqjSbLBdfdSbtzLbbLfbSfShfhd
|
||||||
|
gplGvQmRrCrgZSZtSGZZjhbj
|
||||||
|
CQmmmmNQRPvjgRClCvmmcVHPqMFMFsWJVqFFcnTJ
|
||||||
|
QHHqvGwjjWNqvGTQGvTFcGwJRJbszcPtDbJVbtPzVbDptp
|
||||||
|
MLdrgmSgZZdhdfbLVRpszlRDstRL
|
||||||
|
gdSgMCSfdMnrghCWGRQvHwvNHjnjvv
|
||||||
|
RDBZwvZBrMlsvnlb
|
||||||
|
WdFQqdjWWcHHPrwSPnnSWnSS
|
||||||
|
mLdqgqHmcjHHjqLHjLppmhfBfgtDtBJZJfVtBZwGZB
|
||||||
|
CCWRJQnZlHtHtNZRFDcBhrcvhDrJVVDv
|
||||||
|
dPPSqLzfsqGLSTzfLzLGdLMVVgvBcmgMVwmmDFrVgmBBBr
|
||||||
|
SFjdTGzqpjdRbNRNnjtnQR
|
||||||
|
hjNcwBDDwDFcjdFfjtFhtcRsGGgTsGRRRTsGGqZGRq
|
||||||
|
gbmrLnbzLmvQJnQVVpqZTqzWSCRpqRTsSR
|
||||||
|
MQMvVMbPQQHrQMnMPldtwNNfgHtlwBhdwj
|
||||||
|
zwzwpzMfzrBMWfCCZrwzrMJDGGGnNmGNZvgNZsDDsGsG
|
||||||
|
FbFqSbcSbSHqTjmgGFnJglllsDJm
|
||||||
|
TbhVdVjqdtqTjVHqjPdthPBBWpCnRfwRPRCfBCCnWR
|
||||||
|
hlpmbfJJpCSChmJMmrSjTjcSdjTtQQTtTtjF
|
||||||
|
gqrgsqLzgnBgZGzHBnnsQNNQtjjcNNjjtNFQNcNH
|
||||||
|
LVRzgGGzzzPCVrJMbPJb
|
||||||
|
VHrmqFnVdvlzzNrr
|
||||||
|
PMtwBJPBcPwfbwBJndplLvLdLlgMMzLL
|
||||||
|
bBZnTwbtnScfQJPJwPTjqGZFsVFjDHHGhhHhVj
|
||||||
|
cftqScHJrfVfrrRZ
|
||||||
|
DTTsDvvlBbTGrWBwwsWDBbWdVpZjjZjpVPPGhRRVjVZNRPNN
|
||||||
|
lsWdWDbrTLBsbdrmdwbMJtmHMQJccFHFnJFqFt
|
||||||
|
SWNPTPVSWChCSmQQhpppJdFJLpDpgLJmLd
|
||||||
|
NGGtNtGfHtDpdJdqLB
|
||||||
|
NcsNGNjHZsZGnzZfnGhQnhPClrVlQPhTVVhl
|
||||||
|
QDdgMBsNhhMgcWbZdzmWLzFzWH
|
||||||
|
fRqRJJqGCvrJGjCRRrSJlfPtHzzPmfFbtPtLZZLnmt
|
||||||
|
VjvwwjlwVGGqJSSqJFccshpgNhQNQTsVgBgT
|
||||||
|
wvDLDwCbFgSTfTSJJgfB
|
||||||
|
qsRhmhqchmVhPdfTHJSzpCtJpfPf
|
||||||
|
hmdhrWrddmhlqCRcwQjDLMQnMFDZnlLl
|
||||||
|
trMWtlwwMplMZMCZWltDpzBLBnflVLBbHzbBSGlVlL
|
||||||
|
ghhqJTfmjQjfqqznznnHnBRzBLmn
|
||||||
|
sQhPQsjjQcQcTsPqZWwwZcFfWrWcrZww
|
||||||
|
MRVpVCZZTHWVMCHvgNvVvbQSqgQSlg
|
||||||
|
NFmnrNDDfnjFnndfssmcStvjvQQlvzvllqvwQllj
|
||||||
|
GGPNmBrFNdcfcGrsGcdmDFhJHMMhHLZJMhpLHCMMMMPJ
|
||||||
|
DSvDGdGFlGGnDZFdVSZvfPqwnfhpnrqpPNpLPrrh
|
||||||
|
sWcTjtHCsTmsCNfgMPjpfPhqhP
|
||||||
|
BtHzBzChzBBvFSDJvVzFJJ
|
||||||
|
sfsNrsFFBTfjwwtNNWHPVCVWtSCDDCDmmS
|
||||||
|
zMdhMMZnSccMmmWVWmCPlC
|
||||||
|
cLSScJZQbcvLhZvnzBwfTjrpNwNrBFffpb
|
||||||
|
TBrCBgrTngVQBVbhrCtgJJrGssGsMGRGcjMcNjfN
|
||||||
|
LZdSLvHMFdzFRWsLjcGRWWNJ
|
||||||
|
pHpzlqPqFPvdBthgMbVPDhgh
|
||||||
|
SZlnZZvBvvMrcBnllBMZSvhGMtQwFMGztthfwQtMwwPf
|
||||||
|
HLqsDgNsDLDDDjggHDHszthzFbQGTghPGQPbTfFT
|
||||||
|
dmLqDqCmFNjJsjHdssFNHDVWZccnRllnVZvRSBZrZlCc
|
||||||
|
SccnnSGGftShfHSHHhnvbMjvVlCjzbVzzbMMTbCB
|
||||||
|
gRpppNNQLWqZgPZwNWwwBMBbDlZCTzVTjHMMbBjV
|
||||||
|
dqNQPQRqrqpPcGtchhdfhHSF
|
||||||
|
mfDzgnNMMszBtJCpHlrjnFppCdHj
|
||||||
|
LLRThGGZcbClBQpdWFGl
|
||||||
|
bSqVTbBbMVMsNmNM
|
||||||
|
BTTbbLVpfchmjbsj
|
||||||
|
JSQJHDMHqdNZTZlhFFhCFFrNhNcsrr
|
||||||
|
tMwJQlwMMlQwDDJtWGLGPpWLLGnTPn
|
||||||
|
LcVQQCPPLqTzqQTcllTzhnHHfFJRcGHcFfwRGHwJjJ
|
||||||
|
stdWDDBtVgbpWgZbsNgDNdWFGMnnwHfjHFpfwwMGMMGRjJ
|
||||||
|
ZWSDtgNdWNBdgsdsNDDsdbDlTzCVSTCqQmSqTQSvhqLVQq
|
||||||
|
dZbgdZbNtmqttFJtHHzcczMcFszHnsvH
|
||||||
|
wwpQplQQwqVVjqwPjCGCSMCMcHSHvvzHMzvcsrMc
|
||||||
|
pfjlQRpPRRLQWtmLNdWdmqqJ
|
||||||
|
CPTPPmbjmVjVGCvzbjjPrGsnnMpttdtGdncdMccDRd
|
||||||
|
lhlHzQSHwzhJLwgWgpMDMMsDdcDQMDMMns
|
||||||
|
BHZghLWwSFBJJBFvzmbfjNZvZmCvmb
|
||||||
|
PBGcvvcRwpwNcZcNPpPNcTHGdMtrCWrCCtCLWMtWgbVdMV
|
||||||
|
fmsJjnqmmfsjQJnjFzSFSqsqgWrtMttZgMWVMbbVMdbSrLtr
|
||||||
|
qQjjZFmfjZhZmwcvPhNpTNBTwN
|
||||||
|
HHlVVmmsbbqMsJmVzGSBMSrQQrRrGvvnDn
|
||||||
|
PZcphZPPZPhjcpdWgPZhRPfcDSrtDBSGNvtggrQtnvQNGNDn
|
||||||
|
dcWwFjpcPhRcCpjwdCPLzHblJbLbzmsmbTwzqH
|
||||||
|
hRfzTTfRrTGzhGWTrRrbfcQZQSttWtwddJtvdJJvWSHq
|
||||||
|
npjnDjFlpDnFFNMjljCnFMQtHHtqNHNQJwwZZqstNwJJ
|
||||||
|
DCjpLjjpVLDMDpVLDLQbbhzBhVrcVgVGQQcz
|
||||||
|
LncLBLjCSNrNrNpCLQBBBGwqQwzlzmggvqRqgllmzwtv
|
||||||
|
fMZPHhhHfthMdbRgHJzmVqlvwlwg
|
||||||
|
hfsPbZFPPDsfGLcBtSFNBSjL
|
||||||
|
MlZmszBMJBHrMBMbShwSFpbZSZfwwb
|
||||||
|
TCLCcPNGTgTPNGWtCtcWtPcSsRfRjRwjFbfpNFDjwsFspw
|
||||||
|
nVtqqsWsdHzJHqmM
|
||||||
|
RCrhSmWrmrvmrvhMvRNrRCzCJcQQbPtsMZVGJJtsZssPcQcZ
|
||||||
|
jLFBGqLFpqBLgZVbPbsLJQcbsV
|
||||||
|
HjDljGFwrRHRRTrS
|
||||||
|
GZZhnrwZBwNjRPRCbCbn
|
||||||
|
fJtJJpsVfpgNTbVNFTRP
|
||||||
|
JJcpLJfLdcWLdplwRdQMBvSqwRhvrG
|
||||||
|
wmZDPlRlCDwglgsHtsBvdBHLFLSddr
|
||||||
|
VbVMnMftfVjQWFFHdMBdBFMFHr
|
||||||
|
zfjtnGqqnjGqfjPcDPlZPlRDzccw
|
||||||
|
BRjhfhvRgnTMlFDDJfZzZFFQDZ
|
||||||
|
qLdqcNttwwcwwSPSpqLNmrwmrZsGzzDFZGZFzVssrzJGnsQG
|
||||||
|
wSNdHScScdmwHSpdNcmmtLMvChRHbvBMTBnCBBvhvlCh
|
||||||
|
JgWTPfFPgCPPlCntQSGghHvQnSdQ
|
||||||
|
BzvMZvLVQpdQpSZh
|
||||||
|
RwVVjRDVcRDNDTlJPqTv
|
||||||
|
SGHSrBBRPhPPHQcTccQTRRQjTN
|
||||||
|
vvWvspCbzWVWVrWdjj
|
||||||
|
wZpDzCDgDbCZJZzJGlrlqPqnqPllmH
|
||||||
|
FCncCrDWMLCbjMCcFpLdzZfmZzwwWzdzNRZdWB
|
||||||
|
sqsgTqHSqllNldMwlZzJ
|
||||||
|
MtHPTgQhvhhqcrDrrDpjLCQc
|
||||||
|
pPPvmPWSClqqPvqCmSwqmgGBWDjhGLHfjhDLJGjBBhNj
|
||||||
|
zrbdcdMndcRdTrsMcbTRdzRFVHjLjDjNLNHsfDhNGjhJNhDj
|
||||||
|
RdFFcnTdZcTrRRdFFbZtwQCPQglvPlwJwQPZSqqP
|
||||||
|
wlmbvwmvQvWQsvmbsSsQbswlRCNPfCTcTRVCffPtTSCPNRVP
|
||||||
|
FhJJJFgFqJGBtDpJhTTcVcVhdcCdCdTV
|
||||||
|
GDFtgLFnqqDGqGZsQvsllrjbLjbrvw
|
||||||
|
lnFSnJvmgvLlfnJpgnsjnjgfDQWqCJqZdDtDCtCtCdDrtDDQ
|
||||||
|
VTBBMPFcNNtMZDMW
|
||||||
|
VTGbzGGhTbTGHwVPvvFnfpvjgHnfjppp
|
||||||
|
JJwHqvlvDjljDwJFlZjZDwHNNsMqhNpphNpmNVzpsnsnRV
|
||||||
|
mTLgrLLcLSTTTdmPPfrrrnssNhRNWhgngzMWzgzVnM
|
||||||
|
SmTfdSBbBJbtjJvljl
|
||||||
|
bPNLwTCLLQQqtJsf
|
||||||
|
zdnnZVlWWGGRWGWdgdSStQMqJSMRptftbsMf
|
||||||
|
FWbvgvZZZZgnTmwrrhrFPCrP
|
||||||
|
HcGzzszFGllHWHbZspHbHGsHTwwrTrLLCNjSZwNjNjjCCNLj
|
||||||
|
PBJMJQJDDDnDggRhMdRSLmjTmTwwVjVQSvvwvC
|
||||||
|
RqfdhgDPDJDqJJnBdfzWWHcstslcbtStfHzl
|
||||||
|
zvRRlCqrdNdZcZpjBpVwjsmjsm
|
||||||
|
fgbTDqbhGfDnLDnLLqLhFmsHpTPHjHppppBwpwws
|
||||||
|
nhnnnDDngDtDbfSbDnGhhgRlNvQdQqNvQvtcQQNJRNJN
|
||||||
|
cZbCcbbScCbcmPGjPfSBQQSq
|
||||||
|
lnMnnVsMVvmzzGMDzPDf
|
||||||
|
LhrTsTTglrnsrrWWVvlwTnNtcpZRCmhtbCZFdttZbRCp
|
||||||
|
NWrFPZVWNVrvvrhtnNdddtpldmjm
|
||||||
|
DcBQBDsJbCwQnbtdzmjjjljbpjbz
|
||||||
|
qCDcGsDJGCcBDBcswJnBJQDfWfqgvZSvgZPfrVSWvPvZZZ
|
||||||
|
vcsdHdGtHtMHMFtVsddsWCcbppZwjScLpWhbjRWR
|
||||||
|
NTwrnzJrgTPrDwnlphRpjSpWbJJLLZWj
|
||||||
|
TlDPfPnzzlzTBzzvQFFBHMtVtqBqqw
|
||||||
|
NHnqqfZvZBNHHvgfrSlJrJCSllJRVrCn
|
||||||
|
TDTdhLMWjFcddMJPSSPJRmlCPz
|
||||||
|
bljWFdLLTDLtdFtLlwZvqfbgwwHfwqHNvw
|
||||||
|
BRRjhRQndRNVqBjRVhFLccjpwMmLmjHmgFHH
|
||||||
|
fZJfJvzPPWtWWlltZzZPpcgFMsFFwwFdpHdgwtdw
|
||||||
|
PCrdrzzfWCPdvSlqTqNSDnnQVVQQGT
|
||||||
|
DjbfBMDSfBljBsLSjSZbzrGtPtMCPtVPvvqrzqzG
|
||||||
|
mWdJWcppcNTdpppjzjRRVrPRpq
|
||||||
|
QncmnHwmdTmwQcmjNTfgfhlBShshhsffnfbB
|
||||||
|
WGDsMJsrjHCWtDMGDDVQqSvZqfSJzSnvnvvv
|
||||||
|
LgLFLFBFLVVzfBzMqZ
|
||||||
|
lgmFcwLhNcwdwwMLwhmcRDjNpCWRsWRspGGssHCp
|
||||||
|
PnPzNccnjFfvCvhbSBVcWqdhSVhV
|
||||||
|
psGMDQJDDDJgQNDHHJbwqwBsVqqZVWBBhBdd
|
||||||
|
DlDJDQGptpgpGDfTRnrTrFPnNTlf
|
||||||
|
MSSSMLLmFHcDScSq
|
||||||
|
ppZnCsbjPZpnnJcbRDmzHJqRRD
|
||||||
|
pmNmnGnQNnClZGMVMdBGrMgVWg
|
||||||
|
lsTTGcQzBcljCcQzGcGjGptttpmvSJtmggtwwswwtS
|
||||||
|
qZRnrhMbRVdhZRhhdnnVRPbmwSNwNNHtmJBvwpvtwNSvSb
|
||||||
|
VnMrqrrdqhZrnrBLLlzzlQjQjLfTcGfFDF
|
||||||
|
dJJTlHvhZqZlQTJnSgQDzgsSbScsSBzc
|
||||||
|
RRNtGjCCpRPPpRtjfrttRzmbscLsLZLgcsbmLzSGLB
|
||||||
|
wfNttfNrtWwPNNFfRtpfrdJMTTTZTMZTTVTlVwTlvM
|
||||||
|
PQTGLmdNTgPmGgNNdCPLQlrMqBrDzMCMFqDqFqjVCBCD
|
||||||
|
hhRwwvpSFmzDrmFh
|
||||||
|
vwwZfSfsmvtSspnZLLLdLGWPTGTQtTWG
|
||||||
|
pMcWzWFvWhFpPMWzvvhpdprHTZTQrHrQdZTJdfTgQTnJ
|
||||||
|
CGbjBbNjjDmRHJDgrTVVZg
|
||||||
|
NNttGlGqNLsbtlhMFMFcMLwMvvZz
|
||||||
|
CGSCBNCQBtBCQttBwCGtGtQrqrLrJqZHLHbqHvLDHLrq
|
||||||
|
nVVhPMfVdfVPbfqLLqgDDqPvgZsv
|
||||||
|
cpVncbfnhFcBltTplpmTBC
|
||||||
|
MrdcdStbMnddtRBdqMnFmbqGCwqCVHVsNHwPfGVPqsCsCs
|
||||||
|
DBLllzWWQQzlZVVVCsGWHfsH
|
||||||
|
JQphjTgBjlLgjjpTpLgvTjQnnnSJJRRFmdbRRSdMRtmdMc
|
||||||
|
QbRZMSWMblwLsgpwZzqZ
|
||||||
|
BFncBrfcdNrrnVrNjsFzFTJpJLGJsGqLTp
|
||||||
|
VjhDDBdrfdhQMllzHmPQMh
|
||||||
|
LdVVjFVFbpVGRQGllG
|
||||||
|
cNMcJNHzJWJtCWHNJHcHczWpGmmhMQmBBqrlRhBmpGpGBQ
|
||||||
|
JZzTTtCZtHCJnNnNwPfbFpnfdDdLdnvP
|
||||||
|
TpMlrWTTddjmlmDmgQgRtw
|
||||||
|
MNNVMSsVSNSnNVMFLDqwtGgRRtGbgFRwtR
|
||||||
|
CCLSCPSCZZHVCfZscBJJhPphpdpprdhjJM
|
||||||
|
gSMSHJHsMMpzRgHzsRMPPSzsPhtZtZdqdDqQDhdCdZmQldht
|
||||||
|
FCcCnrGcNTfvvtqqfvlflQ
|
||||||
|
TrTrWNWwrTJLMzJCzWLL
|
||||||
|
TpTzwMrfbrpFpMbFrrrzbPSdZmtSZRTlTZRlmdCVlCtJ
|
||||||
|
vqvWgqDJQJsQCVtZgdZdRRGd
|
||||||
|
vsvLJLchWBcqnvczwjLfzPjfrjzPrz
|
||||||
|
zqzbqCFZgmzzmNmf
|
||||||
|
vpRWSbRVbVWddVpwvwdRSwnSNgLHsnfNgMmgMLMmnrns
|
||||||
|
DwWVpJRlpdbpRDWdGJGcGlhFtPPCqCCBFqZPQttlqFBq
|
||||||
|
wQRlwtBJBDwttJdGvLfBvHLLfTLz
|
||||||
|
MMmNZcMrcMFnRHzfjjvvHfvc
|
||||||
|
FggpbFnhrNNrrMrMbMbnhQVJVhstJwqWCVCRsQJQ
|
||||||
|
DQbCGblQlpQFQlHjCbjwDQQMggNmJmgnnpRBngfZmNgJMf
|
||||||
|
zvhWccWVdWBchdssPrrWZZZfmsmmmgsnZZJRsRTf
|
||||||
|
zBdtqPccWPHFCqCCqljq
|
||||||
|
ttrbRMmgtHgfmHSfBpLfnBBZBppB
|
||||||
|
CVTJDCCNPwCPDwcqzmddQZdTQdnLBQThWp
|
||||||
|
zwFDjwDJJPzjzVNcVJwCcbRHGmbbMrFHgHvrsgbblG
|
||||||
|
gZjjwHqHCzrMZVVR
|
||||||
|
hhzcdTzPrVhVCGMb
|
||||||
|
fPcmLPNffsccJDdNDjBnpwzmHqgWjHwwvg
|
||||||
|
SJQFSvQBlzbSCgdPPddPPPSN
|
||||||
|
pcrjcWLwwcHcgPNgTPLMNTCB
|
||||||
|
pRsjsWRnrpHRmrBrHrjlbJFvvzQFnzQblQDDbJ
|
||||||
|
VjQVMQPVMfVPPbGPHHbGJD
|
||||||
|
pcqSttltsbDGddsCJG
|
||||||
|
TSchqLtTLFhgQbMMQMrr
|
||||||
|
trqzMRwNTtDzLPJQgWmjmjrf
|
||||||
|
lbBQdpZbsmhGmZhmmG
|
||||||
|
llVbpCplvvHBBHpnRDcDRRqnRRQnFRzT
|
||||||
|
SLSSFFmzLShsVSSHnLnrJdbnRdZZbrRw
|
||||||
|
qCfWBftpNWNNlqvTpwrRbGGCnwGmgRJGZn
|
||||||
|
NcTBNpvWvBWpMftNffpqWlTpmzPDQPSzFVMsFQVhHsjHszss
|
||||||
|
VtJtNBRBGDpdpNbC
|
||||||
|
QgLncnttvFcwwhLvFjSGsSbmmQCSDdpCmpdG
|
||||||
|
vLgjLhhrctMvLFFjLtMTLMgfPZqBZPZzJBBfWZZPRZZTRV
|
||||||
|
mJzDJJpJBvfsGMQnBM
|
||||||
|
CwPWCLRRWwRqwPqhPsrZrnrlhhQrMTrvZl
|
||||||
|
dCdLLSPRLSqWqVSLqLjgJDzDmtbngFVtJtzz
|
||||||
|
mtgWtMWrqjzQTTjghwwfczlNJdlcJnlc
|
||||||
|
FvRsDPPFGRBFvvslwDnTlcTTdwndlh
|
||||||
|
SGBZRBTsFGBRvLpvSCmgQWQjgggMrQjmmSmW
|
||||||
|
GcsRrQhrVVjhRcWlnDFGGmvntDWZ
|
||||||
|
TPbSgJJgBSCbCTbLHMCMTTZdFHvtZlWZDZFzmzZHZmmF
|
||||||
|
gBCMCSpbPMMPjcjqQQpqQprv
|
||||||
|
nZJcnZwvwzvTTTVtpDFnHH
|
||||||
|
DQPBqGGGdMdTRHRBpNgFNR
|
||||||
|
dCGPfhPWQdWWWCWShWPqrChWLLwLswjcvSJbvbLjJLbzJbJD
|
||||||
|
QrBQtdtrQBrdtFHPrdQBDvGhLGnPnCWnmpDmLpmD
|
||||||
|
NjlRJRlNzJJVbSSRVZwwJcmpWDGCWnbchnLCCmnWCG
|
||||||
|
llSJzsZzMMlsSZjSjZwJNQqtHHdBFsqdfTHhqFftQB
|
||||||
|
zdTJFHTdDBzrNdMnhNnNdM
|
||||||
|
ZlLZZcLtVtcWtGjtzLjLZjCrnVNrnRbrQQbQSRVrRnSNqS
|
||||||
|
lZtGtCvjZPCGCctPpsDDBzTHFmPmFszD
|
||||||
|
mQSMvdMQtQdZhQrPWCPqPQrN
|
||||||
|
RwjwnZGzJFTZgzggzJDDwJnCPPhNNqPrLhrGNcWcWNPqCq
|
||||||
|
ZTzDfnwFzTngTwJvfSlMtMMlmsHmHt
|
||||||
|
lZlmFRVZWmgQWhRsRpJsCJpJct
|
||||||
|
PTbPTGTGwwGrbdfjNNZJvcCsCZtvpTsh
|
||||||
|
bGdBBqGrdBPjDMzzVFZgqQzFFL
|
||||||
|
szvsmLvppPPtzGLGWpVdTSHTNgjHQRmHTgSH
|
||||||
|
FnBMBNZwZNcnDZMcnZlZgwgdQTTHjVJjHHVRQHJj
|
||||||
|
DnZrFCMZMNffrLPbLsfW
|
||||||
|
rJvmnBgnrCrGRSGNQR
|
||||||
|
hthjNfhwctwpjTLtVLjTGSpldSCGSPdlPSRzSqSz
|
||||||
|
TVcTfHNFcwtjMhTvgbHZsBbWmmZbnH
|
||||||
|
WsQgstQmvQJnssWsWPzhRzhBjZBSBRZSnj
|
||||||
|
qwCNqFwDrrlDrFPvRhTSPPzLRz
|
||||||
|
bppqwppCddlvfbDNVgmMmtMfVVmfmVWW
|
||||||
@@ -8,7 +8,7 @@ import Day2.Part2
|
|||||||
day2 :: IO ()
|
day2 :: IO ()
|
||||||
day2 = do
|
day2 = do
|
||||||
input <- readFile "ressources/day02-input"
|
input <- readFile "ressources/day02-input"
|
||||||
putStrLn "Day1"
|
putStrLn "Day2"
|
||||||
let score1 = day2_1 input
|
let score1 = day2_1 input
|
||||||
putStrLn ("Score of all games: " ++ show score1)
|
putStrLn ("Score of all games: " ++ show score1)
|
||||||
let score2 = day2_2 input
|
let score2 = day2_2 input
|
||||||
|
|||||||
14
src/Day3.hs
Normal file
14
src/Day3.hs
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
module Day3 (day3) where
|
||||||
|
|
||||||
|
import Day3.Part1 (rearrangementPriority)
|
||||||
|
import Day3.Part2 (sumOfBadgePriorities)
|
||||||
|
|
||||||
|
day3 :: IO ()
|
||||||
|
day3 = do
|
||||||
|
input <- readFile "ressources/day03-input"
|
||||||
|
putStrLn "Day3"
|
||||||
|
let score1 = rearrangementPriority input
|
||||||
|
putStrLn ("Sum of rearrangement priorities " ++ show score1)
|
||||||
|
let score2 = sumOfBadgePriorities input
|
||||||
|
putStrLn ("Sum of badge priorities " ++ show score2)
|
||||||
|
return ()
|
||||||
30
src/Day3/Part1.hs
Normal file
30
src/Day3/Part1.hs
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
module Day3.Part1 (
|
||||||
|
splitContents,
|
||||||
|
itemsInBoth,
|
||||||
|
itemPriority,
|
||||||
|
priority,
|
||||||
|
rearrangementPriority,
|
||||||
|
)
|
||||||
|
where
|
||||||
|
|
||||||
|
import qualified Data.Set as Set
|
||||||
|
import Day3.Shared
|
||||||
|
|
||||||
|
|
||||||
|
splitContents :: Contents -> (Contents, Contents)
|
||||||
|
splitContents c = splitAt middle c
|
||||||
|
where
|
||||||
|
middle = length c `div` 2
|
||||||
|
|
||||||
|
itemsInBoth :: Contents -> Contents
|
||||||
|
itemsInBoth cs = Set.toList $ leftSet `Set.intersection` rightSet
|
||||||
|
where
|
||||||
|
(left, right) = splitContents cs
|
||||||
|
leftSet = Set.fromList left
|
||||||
|
rightSet = Set.fromList right
|
||||||
|
|
||||||
|
rearrangementPriority :: String -> Int
|
||||||
|
rearrangementPriority input = sum priorities
|
||||||
|
where
|
||||||
|
contents = lines input
|
||||||
|
priorities = map (priority . itemsInBoth) contents
|
||||||
32
src/Day3/Part2.hs
Normal file
32
src/Day3/Part2.hs
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
module Day3.Part2 (
|
||||||
|
splitIntoGroups,
|
||||||
|
badgeOfGroup,
|
||||||
|
sumOfBadgePriorities,
|
||||||
|
)
|
||||||
|
where
|
||||||
|
|
||||||
|
import Day3.Shared
|
||||||
|
import Data.List.Split
|
||||||
|
import qualified Data.Set as Set
|
||||||
|
import Control.Lens
|
||||||
|
|
||||||
|
type Group = (Contents, Contents, Contents)
|
||||||
|
type Badge = Char
|
||||||
|
|
||||||
|
splitIntoGroups :: String -> [Group]
|
||||||
|
splitIntoGroups = map asTriple . chunksOf 3 . lines
|
||||||
|
|
||||||
|
asTriple :: [Contents] -> Group
|
||||||
|
asTriple ls = (head ls, ls !! 1, ls !! 2)
|
||||||
|
|
||||||
|
badgeOfGroup :: Group -> Badge
|
||||||
|
badgeOfGroup g = inAll
|
||||||
|
where
|
||||||
|
(a, b, c) = over each Set.fromList g
|
||||||
|
inAll = head . Set.elems $ a `Set.intersection` b `Set.intersection` c
|
||||||
|
|
||||||
|
sumOfBadgePriorities :: String -> Int
|
||||||
|
sumOfBadgePriorities input = maybeSum $ map itemPriority badges
|
||||||
|
where
|
||||||
|
badges = map badgeOfGroup $ splitIntoGroups input
|
||||||
|
|
||||||
31
src/Day3/Shared.hs
Normal file
31
src/Day3/Shared.hs
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
module Day3.Shared (
|
||||||
|
Contents,
|
||||||
|
Item,
|
||||||
|
itemPriority,
|
||||||
|
priority,
|
||||||
|
maybeSum
|
||||||
|
)
|
||||||
|
where
|
||||||
|
import qualified Data.Map as Map
|
||||||
|
|
||||||
|
type Contents = String
|
||||||
|
type Item = Char
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
itemPriority :: Item -> Maybe Int
|
||||||
|
itemPriority = flip Map.lookup itemMap
|
||||||
|
where
|
||||||
|
itemMap = Map.fromList $ (['a' .. 'z'] ++ ['A' .. 'Z']) `zip` [1 .. 52]
|
||||||
|
|
||||||
|
addMaybe :: Int -> Maybe Int -> Int
|
||||||
|
addMaybe acc Nothing = acc
|
||||||
|
addMaybe acc (Just y) = acc + y
|
||||||
|
|
||||||
|
maybeSum :: [Maybe Int] -> Int
|
||||||
|
maybeSum = foldl addMaybe 0
|
||||||
|
|
||||||
|
priority :: Contents -> Int
|
||||||
|
priority cs = maybeSum prioList
|
||||||
|
where
|
||||||
|
prioList = map itemPriority cs
|
||||||
@@ -2,8 +2,8 @@ module Lib
|
|||||||
( someFunc
|
( someFunc
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import Day2
|
import Day3
|
||||||
|
|
||||||
someFunc :: IO ()
|
someFunc :: IO ()
|
||||||
someFunc = day2
|
someFunc = day3
|
||||||
|
|
||||||
|
|||||||
51
test/Day3Spec.hs
Normal file
51
test/Day3Spec.hs
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
{-# LANGUAGE QuasiQuotes #-}
|
||||||
|
module Day3Spec (spec) where
|
||||||
|
|
||||||
|
import Test.Hspec
|
||||||
|
import Text.Heredoc
|
||||||
|
import Day3.Part1
|
||||||
|
import Day3.Part2
|
||||||
|
|
||||||
|
inputPart1 :: String
|
||||||
|
inputPart1 = [str|vJrwpWtwJgWrhcsFMMfFFhFp
|
||||||
|
|jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL
|
||||||
|
|PmmdzqPrVvPwwTWBwg
|
||||||
|
|wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn
|
||||||
|
|ttgJtRGJQctTZtZT
|
||||||
|
|CrZsJsPPZsGzwwsLwLmpwMDw
|
||||||
|
|]
|
||||||
|
|
||||||
|
inputPart2 :: String
|
||||||
|
inputPart2 = [str|vJrwpWtwJgWrhcsFMMfFFhFp
|
||||||
|
|jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL
|
||||||
|
|PmmdzqPrVvPwwTWBwg
|
||||||
|
|wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn
|
||||||
|
|ttgJtRGJQctTZtZT
|
||||||
|
|CrZsJsPPZsGzwwsLwLmpwMDw
|
||||||
|
|]
|
||||||
|
|
||||||
|
spec :: Spec
|
||||||
|
spec =
|
||||||
|
describe "Day2" $ do
|
||||||
|
describe "Part1" $ do
|
||||||
|
it "can determine Rucksack compartment contents" $ do
|
||||||
|
splitContents simpleContents `shouldBe` ("abc", "dec")
|
||||||
|
it "can find items that are in both compartments" $ do
|
||||||
|
itemsInBoth simpleContents `shouldBe` "c"
|
||||||
|
it "determines item priority" $ do
|
||||||
|
itemPriority 'a' `shouldBe` Just 1
|
||||||
|
it "determines priority of contents" $ do
|
||||||
|
priority "abc" `shouldBe` 1 + 2 + 3
|
||||||
|
it "determines rearangement priority" $ do
|
||||||
|
rearrangementPriority inputPart1 `shouldBe` 157
|
||||||
|
describe "Part2" $ do
|
||||||
|
it "can split into groups" $ do
|
||||||
|
length groups `shouldBe` 2
|
||||||
|
it "can determine the badge of each group" $ do
|
||||||
|
map badgeOfGroup groups `shouldBe` "rZ"
|
||||||
|
it "determine the sum of badge priorities" $ do
|
||||||
|
sumOfBadgePriorities inputPart2 `shouldBe` 70
|
||||||
|
where
|
||||||
|
simpleContents = "abcdec"
|
||||||
|
groups = splitIntoGroups inputPart2
|
||||||
|
|
||||||
Reference in New Issue
Block a user