Compare commits
2 Commits
Author | SHA1 | Date | |
---|---|---|---|
2f85311df3 | |||
6807ab3133 |
|
@ -13,13 +13,18 @@ build-type: Simple
|
|||
library
|
||||
exposed-modules:
|
||||
AoC.Day1
|
||||
AoC.Day2
|
||||
AoC.Day3
|
||||
other-modules:
|
||||
Paths_adventofcode
|
||||
hs-source-dirs:
|
||||
src
|
||||
ghc-options: -Wall
|
||||
build-depends:
|
||||
base ==4.*
|
||||
attoparsec
|
||||
, base ==4.*
|
||||
, extra
|
||||
, split
|
||||
, text
|
||||
default-language: Haskell2010
|
||||
|
||||
|
@ -32,6 +37,9 @@ executable adventofcode
|
|||
ghc-options: -Wall
|
||||
build-depends:
|
||||
adventofcode
|
||||
, attoparsec
|
||||
, base ==4.*
|
||||
, extra
|
||||
, split
|
||||
, text
|
||||
default-language: Haskell2010
|
||||
|
|
|
@ -1,8 +1,27 @@
|
|||
{-# LANGUAGE OverloadedStrings #-}
|
||||
|
||||
import AoC.Day1 as Day1
|
||||
import AoC.Day2 as Day2
|
||||
import AoC.Day3 as Day3
|
||||
|
||||
import qualified Data.Text.IO as T (readFile)
|
||||
|
||||
main :: IO ()
|
||||
main = do
|
||||
putStrLn "Hello World!"
|
||||
input <- readFile "./input/day1.txt"
|
||||
putStrLn $ show $ Day1.solveA input
|
||||
putStrLn $ show $ Day1.solveB input
|
||||
input1 <- readFile "./input/day1.txt"
|
||||
putStrLn $ show $ Day1.solveA input1
|
||||
putStrLn $ show $ Day1.solveB input1
|
||||
|
||||
input2 <- T.readFile "./input/day2.txt"
|
||||
putStrLn $ show $ Day2.solveA "A Y\nB X\nC Z"
|
||||
putStrLn $ show $ Day2.solveA input2
|
||||
putStrLn $ show $ Day2.solveB "A Y\nB X\nC Z"
|
||||
putStrLn $ show $ Day2.solveB input2
|
||||
|
||||
input3 <- T.readFile "./input/day3.txt"
|
||||
let demoInput3 = "vJrwpWtwJgWrhcsFMMfFFhFp\njqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL\nPmmdzqPrVvPwwTWBwg\nwMqvLMZHhHMvwLHjbvcjnnSBnvTQFn\nttgJtRGJQctTZtZT\nCrZsJsPPZsGzwwsLwLmpwMDw"
|
||||
putStrLn $ show $ Day3.solveA demoInput3
|
||||
putStrLn $ show $ Day3.solveA input3
|
||||
putStrLn $ show $ Day3.solveB demoInput3
|
||||
putStrLn $ show $ Day3.solveB input3
|
||||
|
|
|
@ -32,6 +32,7 @@
|
|||
packages = h: [h.adventofcode];
|
||||
withHoogle = true;
|
||||
buildInputs = with pkgs; [
|
||||
haskell-language-server
|
||||
cabal-install
|
||||
entr
|
||||
ghcid
|
||||
|
@ -40,7 +41,7 @@
|
|||
stylish-haskell
|
||||
];
|
||||
shellHook = ''
|
||||
hpack
|
||||
${pkgs.hpack}/bin/hpack
|
||||
'';
|
||||
};
|
||||
}
|
||||
|
|
2500
input/day2.txt
Normal file
2500
input/day2.txt
Normal file
File diff suppressed because it is too large
Load Diff
300
input/day3.txt
Normal file
300
input/day3.txt
Normal file
|
@ -0,0 +1,300 @@
|
|||
qFdBBvtHHfvRlfvsqldvqjPpQmnQmjnjjjTRTLGRNG
|
||||
ZCWhhCsJCzSJzSbzgsmPTGNNPPNGjgLTLjgn
|
||||
WJZsbJMwJcszJcScwhVltFwBFBlqddvFdHDfqq
|
||||
crtTsGTtqFThGQGCrsjTwdNJwpRdnJJwffRClpSf
|
||||
PWVBPVHLvHHVgvZWBzmPpnfRSJJRQnSRflRPSNSl
|
||||
gmzBzDgzmZQWLDLLgVmDrqGhsscrqDMGhcqtqcFr
|
||||
HsbcdVrsbVbcLfPqqQsqqtPj
|
||||
mMBFzZRnmFMRBDnDFBGZDGdDqLjtdQtPtgfPfttgtqgq
|
||||
BZvZZdJMBFdJhSvhbhchcHll
|
||||
GNRSqRfcNTpfGCcqjfzBpDQPWBzgDpQsPWzW
|
||||
rrSdnVHlbMdLdBDzgtBtBmQt
|
||||
rbFwwnLFLFwlMLrFwFhMVLrGNSTfZTRhfTqjGJRRZTCNcf
|
||||
QWTnQCnWNNWmTnSPQwmqDbcscbpcjPjVPbrjpq
|
||||
vJhzZNlNNgdzgzJdlGzHHcHDpjsHqrvbVrbvrD
|
||||
RzRdRlhLgtCwCWSLnN
|
||||
SFTJFTTwTVVSJBnSTdvNNfWbZCZWNZCNNhBv
|
||||
srLrcHDcsjtLcLLcrLctjlcvbDNhmWCvNhZWGZZhNvhZmb
|
||||
rclgtMPrrSgVTgJCng
|
||||
DbrhDzcDffbzNbZvZWSSqSTNSVWv
|
||||
gCPltPmCPglFnPFwtGPhGPwTCTdZZWZVRvWqdRqVVdTdvR
|
||||
hLBhlmlstcffBzrpfj
|
||||
wFLLmhMfwZLDwmMNRhZwRLDvJgldbJHPdQvcQHHJQPgH
|
||||
bjrVrTSSJdQHcVll
|
||||
CGCSsCCBpspBrqbSttpbqWmWZRmfFRZhZMNNLFqFLm
|
||||
zWGjjBHGjzzTWMjhtDDWtPPlJZPJpvqQrmZTqQQpmr
|
||||
RFbVLcBVLRcRVcCsCCqvpCZqmplqQJmPrlvQ
|
||||
FLNRRSSRgScSVLLLNdFdwjHjnftBtGMgMjzHgzjWjj
|
||||
znVSqnqbqzSbzTHqDDZmlcFcnhDMnDmn
|
||||
LtjsvdvLJdjfFwRRCCMlChwCpMcclCcZ
|
||||
LgvjjfjFQVgNTgWq
|
||||
SJRJRFFCMSsGRMMwtZJRCVTgqgTVgTBCVpjTjmmWlB
|
||||
ccvnnpnDVqTcBVTV
|
||||
vPHprdHdpnzHSMsSrMRZJGws
|
||||
GddGrcGNHnGvnCHddvCSWqTSWsTwTWShbHlhhb
|
||||
gDPzLRVZgQfpRRFQDDVFDfzhSzsTBqqqnqbhnWTSSlST
|
||||
QVFfFgRQQgLtgffZRfpFPfntjrcrjCmtCdMMmjMdJJJNtm
|
||||
jjmNcpGCNmDqqsBfnZnGGGRLsZ
|
||||
lrmlVWlQQtWllgtbQVrWBnZsJgsRLfZLhZBBBffL
|
||||
rWMVQtrFlbFlSSMHVSdHHNHdcdDcddzppzzm
|
||||
bTpjpjcVTLmphbLppJwqzqwJLqqzzzgRLJ
|
||||
sdHNbrvNHrqPvZZZPRww
|
||||
bNQCrCNtNsSlhffhVhpVWFCW
|
||||
lpNnpMMZZDbNbnBjcrbjvScFmbGj
|
||||
wqhdqVqdscrjdLsv
|
||||
HQftVqWCfhwqtCCjWwfqzzVPZRJQgMlggZMMMZTNMNTnNRTN
|
||||
fvvGbFtVmtTwgtMT
|
||||
WcCcClzPCCcczJJScPWWZzBDmwbhBBHSghgDDMTHMDBD
|
||||
nWPljWzZWnbcbRsNFjFFdFdVjFsj
|
||||
NQrcLNmQGRfGLHHLZgbbnpjZJJJndbgnlv
|
||||
DWtThDWtzzhltWTwjbdpvjbgqjgg
|
||||
VtSPFWtBPBFSFBWCStshWBmlRfHfMRcfQLQLLlmCrCcN
|
||||
pbmwqJnqSJVwwDPCjZZzrZfD
|
||||
QtssBTvNdNvNtQvQGpGhdjPjDjczZDfjhgPPDcgjgr
|
||||
GltptQpMGNNpRWlWFVFHJFHLWH
|
||||
ZLLsDGGVhZcQQLhrLshrVFwHnWqJnWMnJJJnqfWfGn
|
||||
jMlPdTlPlgCgFpngFWFnJfpw
|
||||
TlTNbdSSTSTmTjPMTCdBPjBMrLDczsZcNrDhRNDRQRLLRVVz
|
||||
HDLpBqDVVTvwGDDNRT
|
||||
PlVWjfhsPMMmWtlFNTrhrrvCCCTNNbvw
|
||||
lsglfgVJmsfMjJfSqSzdZnLgqcnLnp
|
||||
pfCDJWBpfDffpJLgQJzzVzNrgNgNgNhNzmVr
|
||||
ZnnGZbGTPZnsnRFdTlbrwdrNzrrmmWwmwVwttH
|
||||
GbPGRvTnZljWnpqSMMCjqJQSCf
|
||||
ZgnFgwggznFrfrwfHhNMMr
|
||||
pctLCLRhPHBLMLWfBL
|
||||
JJcdJcQCCJmQJppmlgndnFslsVnsvghZ
|
||||
WpMgTppWGSWWJmJDpJcJJhqm
|
||||
zZzjZNHvNjPvNsbZLbRLzsPcqhVJSVttdwhwmdRhtdJRVd
|
||||
sLbvvCZCPSSSbbPfNlQQTQGBllCTnMnWQn
|
||||
fwbwswddwSbBfDBggMBPDPhHcPWDmhHhmWnWPC
|
||||
FQFlzLCzQTlrTTzvltFqFrmhPHjnhhnnchcJWcRRmRRq
|
||||
lpLzlFZzCltrTNlTztQLZfSMGBNdSBVwbBNVSMSbVs
|
||||
FMmgbTFdgLSgFQdjrRPrQBPDdj
|
||||
ZqqWRvsfGrrPvvPC
|
||||
wZzwnqccRwRNNpRSMztSMMFbgzLTFS
|
||||
qTwBPfTfqQDMDrssHdvtRHccHMjR
|
||||
gWSZGWzGFhnFFgnhNsRHtRdsVjZcRjHs
|
||||
jgplhpJJFgnDrrwfqprwDP
|
||||
CWhMSRfWhVVnRSZnVVdsLQqQMzGqLBvGMQqczv
|
||||
PHbpNwrjJplttvcclLlQzzDszc
|
||||
NrJbJrFNNJNPrmwrtbjtNmCfSWfWhSZZfSWCsfShfFVR
|
||||
VLhRPLGLRPRSStRRLwfGqfmDwbmqbqqDlD
|
||||
rBSFvppnzTbwDwlDcFWm
|
||||
MJrnJTMvMsrTsPtshRNPZdSLhL
|
||||
BZBrRCrnCQBBnZfGqhGGMMRcthMhMG
|
||||
TLjsCdDCPTvNssjdsPsDgsgqGcPHczchtHczWzPWzzlWhG
|
||||
gsTpsdNbvNNjNSpsNDTsmCnSVQFmSFwZnQBnmnQQ
|
||||
llbsNsWrmbrGbWCNtBjcCFBzQFZBCFjF
|
||||
LdSpwgdqSgzwJdRdLMRHLjQQjHjFHctjHBDTZj
|
||||
gSppgpSJMhpzwrhblfbhhlWlnW
|
||||
DwhTvvsJZWsBnDzPpBLbFp
|
||||
GHtNGRGNdzbMBBtmBt
|
||||
NljlCSVSHdjGSQRGlCQSCswqfWzhZfTcfzcJvshJ
|
||||
lmsGNFsDGqCbFQBbffjjwpzptw
|
||||
hRQdvdrvrvSngWnvnHrTMfzfzRtftzwVTwwpzB
|
||||
HnSSWrvLJvWJGFDsmFLPDFcQ
|
||||
bwwpGphpLghpTvpWphvJlFLJqqltjSjVlSStSR
|
||||
cmszZdDdBZzcNcDCDcNsmNMcqVjMJStFRJltVPVrlVPjVJll
|
||||
HcdmcCzzzQcHNcsCdpnGnhwGgnRggHvbbR
|
||||
CfMBbwBGbMbDCFrDvhFFDT
|
||||
mjzRjjRdSmjPnzFZgnnrTT
|
||||
cmSsVcHjLHTwMfLBpBpBwM
|
||||
whqqfZzgHvhSzzVNVDbpDbmbVbNpJD
|
||||
GcQFntGTCCcCTMCTGBlJsJsDDWpRbWBsJpNS
|
||||
FnPcrGFFdddMnCnTqgqgqPHfLjLqgSzz
|
||||
zMSzzjssFdGnszRtNftqqwFHbbZw
|
||||
RRPLVrgrwHqBqgwt
|
||||
rPWmLCTCQlCQQmmrWLrQShJshhzdhhJjcSjlzRds
|
||||
lvgvCDfPqLHppqpCCDJncbntttbBtBBVHjwtrB
|
||||
TdddszSQsWcngjzVbcVZ
|
||||
hRWsTRTGQhNRGhRTFSWmlpgfqlvLmplPqvvGgv
|
||||
LbWFLQdWWPwWSjSHPHRfppHHDRpggR
|
||||
zmqqNNzlzmnzzNCmVCmtBzpfGsfpBgDgspprcfcfsrRB
|
||||
qNNVNJtNmmmNzznVJzvCTDZWhvZZjZFbWQQhFhbZSw
|
||||
DjdHqJVVhHVZjhDHPWtDtZLFBRBFmSRTFSbwmRRTffTTJf
|
||||
NNznnGlgMQsnQzNclzpfSRSMRmfPMmFRwBwB
|
||||
vzrcGcNcPPvHvHPt
|
||||
wLCcmZwWTNtZNdMSMGSCnJGGMB
|
||||
RFbHsPhVvFPRjlshhrnQnGjQGSdSqJfqnQBM
|
||||
HhzVlFHhPwzScmSTgL
|
||||
TNlBhDNvNBFpJgpPPpDQ
|
||||
jjfCdCZZqsCZsbdqPgFGGMRzSFMqQMRS
|
||||
jnWPtWssCtWcmZbbtstvnrrvhVBhTNNhBHlBlL
|
||||
DZwNWPDzPVWbJngrQjrNnrQcMg
|
||||
GRRfttLBhhvTvmLmFcFcgFFSnjWrnsrG
|
||||
TLthBWtTRLHqhlLLfmhBqVPDJVdPwzJCPPZHwdDdVd
|
||||
GGVhrVSMQwQqfVssVvnWFgvgWn
|
||||
jtlcRBBtQRmpWsjzFCvzWnvF
|
||||
QPcRbpppDmNDtPPblZMfhZdDwdMrqSSGrq
|
||||
ZRrdtBdQvQsWnnfWFZsF
|
||||
bJLcMzNDLbMgwfnGMWFv
|
||||
lpvhmzNDmDmlNbzbmrVVPrHRCPHQBVCP
|
||||
rZllQrsRWrlQswccMVbGbVbTdcQQ
|
||||
NtJCntLSHCjznfLTcGGGqWMdWM
|
||||
jCtzzSFthhSSSjPJrFDlvWrlDZRpwpRZ
|
||||
mQmbLjbrLQjLmTtwwWBTTvWjtt
|
||||
BHSqdHclHHNFlppNqWPwfwDvTfDPPtCw
|
||||
ddSGMGHcdcMhMZnBbmbZmgGJJg
|
||||
lvvBzvDnlzjfPnfjnQPlldRbVbRqbqqCgsqqVpQQgVqc
|
||||
NNFtGNMtTNFmJNGNZtZMwVRTTcsCpVTbbgCbgRhscp
|
||||
FGNGZMtNLWmmJWGFWJGLSNtPrPnBfDzzvjnDBzpnvDBLnv
|
||||
fwvQRFQvQqwpwNJrwN
|
||||
BstDnBjhjBhnshSptpJzWqNppbfr
|
||||
CsDjCdZcBCDcjnfDHfhnfggZMGlgQVmgMTRmgVGMMl
|
||||
MwlBVqVlsgnmzwJsvjhWZhGPvjvRRWzG
|
||||
QNQpQpftHdHHCHGfSpCrQNdSrDRDhchhjvjcPrRRWrPvhZjv
|
||||
LtLSCTSGfHGdGwswnqsggssTqV
|
||||
qDDCHjzjznTvWshZQWfnZZ
|
||||
PFFmmNMMtNMVFtczcFPJNrLhZwQZQsSvvSvWvGQQJQssss
|
||||
tFzrrPPNNFlzVrpRTpblRDqjTpDC
|
||||
DWDrrBdpmdpBrCgDthdtfcHsqJsCqscqwfsjzHcq
|
||||
TNLNFNSTQNQTSnlMcczVJjVzsqLDDfJJ
|
||||
TFPZQRvvlMSPPtRWDtmDRWrBGr
|
||||
LWGVZdrvWdpLGWRsjPMsHmdHdHldlj
|
||||
zJzznChzzzCSfTgMhCPDmlDCbmlsmjDDQj
|
||||
nSTTJhJtnShNtzwhgNrGRRWZZRvMWMtVrqGp
|
||||
PbPmtNmBbPlqBvqlDJBT
|
||||
LpGVDzVpVZqqSTvq
|
||||
pMnWGLRLRppnGpGndrGPtgDCjMPmbPgCQmPPNN
|
||||
sqcZcbZZpcZspcCCRMmznWGWdLWhwDRGTTWggT
|
||||
NjFSJgVHrvfVtrGzWdSznDwLSTLn
|
||||
jFrBNVVjBFNvHrFHBlBFFpMslPgPcpMPmcQPPZCgpP
|
||||
frddqsThtsTfTbPcvhsrbsRLpRBNRpmDpGmRGcRNLpGp
|
||||
QWJHCJwWzlHZQZHQCJJRzRqnLDGRGpnGBRnNDN
|
||||
CVwHCClJjQgWCZVZQgMwSdthjrqvrSPPhdbqtPhs
|
||||
TvdphBBhhhCgdLNNJJJLWz
|
||||
fVcsqRVrPcnJWgDnJN
|
||||
JlqsRJtssZwqwVtPwltRPsHHbFTwTFbpjHhQjTQbvpTF
|
||||
cQSnPDDQJGNzwnNpZb
|
||||
RHDrssVRDHRgsRFHRlrVwzzpNGZlfZdppZdwGNZb
|
||||
sHCHtDgtCjVVLFChqPMhBCMcSTqB
|
||||
hdbQbqcCCQcqFbCbVdcWCQQlRMBtGlRHBtBMpHhpHThZMR
|
||||
LLsSLLfgJPrgPnssnmlZtlZpHGHVGfZVtZpl
|
||||
PvmvgmvvnzmrSsSLJDqDNzqFDQdDwzWWbV
|
||||
HNNjnLbpLGHvWJDhdWWPpWDW
|
||||
lVcSNgcSVclhRlPZPRCDCR
|
||||
cqmSQrwwrrVSrtQFqVNmFwjQnvjHzBbLLGjfjzHTzvnH
|
||||
QmvWVppPHQQvbbvmSHSpPzfzwnWMTZFFzwFMCzLnwT
|
||||
jGBljlNNjgDtGDrNjjtjqqDRnMzRLnFzCFnMfRfMzCnttF
|
||||
jqNrrGdJcdgLjqDqBrDQbbmhdQQmmpPbphmbVv
|
||||
ZHQCggVHHRDWvbfjGptVtLvL
|
||||
nnFwnwrDDMShnhFrFLLLpjvPlPGGtLGb
|
||||
dcNSMhrrTDCBCsWgCTQW
|
||||
HqDDLGtDdCnhfDnwnV
|
||||
PmlJsJTPlbdBTzTnzhnnCCWWzV
|
||||
lSPjMScggsScgjSMMbqHLFGrRLGHRZZtdrcG
|
||||
ZVVtNNppdZSdLtCPqnHhqJJFtb
|
||||
zgwwQBfwmGgSrDfgrrGBggzHCnbJbqbCJFnqhHBhnHHCqJ
|
||||
rvrzfmlRrgDgmrzfggvwzvdjjcccLjMjVcVcsVLjVSZR
|
||||
dppcLRHpphchhNhSddjzHzWQWQLtrMsrWQCWCsMZssCZ
|
||||
JGfBfJJfBqvGVlVbDBwDBDBfZnrQsMQtssMttssDsQMWZncn
|
||||
qPVwlgPBmjpPhcmS
|
||||
zGPnzBgPzPnPlHZlDDHnZBNCvrtcjcjmMcFzNcNFmFdc
|
||||
qQpfsLTTSspqTfJdmdCtMjdtjvJcmr
|
||||
bfQqqSrswLLrfpLTqprfTnDVDVBBbgHPDHnhDPgDbV
|
||||
JssTnsdFztZLdNJnNtTsLNZGqlbGFBqrGMHqHBcFBqMFMH
|
||||
CCgSfgPSvSfhpShSRppCdfrlqGHGGcHmclmqbbqbqlPc
|
||||
wvVSVjQSSQhRVvfQChvZZsdtJstjLNLZDJnLss
|
||||
CmfNNNZNqDrnDjMhZM
|
||||
gdczzGtdFcddtWQgGGMnVhnjJwnrJFDPTwMP
|
||||
dlvcdzdHtzQSLRSfmhLSqv
|
||||
ZpFFLcHFZZRRmJVZgD
|
||||
PzhrtQntzcrjCRJtbtRgBsBRVR
|
||||
zdzWfCzhQzlhWfWhlvpFNlpSqcMSHHMv
|
||||
NrrMgMhNQhNjQrtqtPtwVtZpggPw
|
||||
TfRLndnLFCRFTFbbRDHwpVqqBBwsHwZsfH
|
||||
TJFRdLlRThrlcvZcvQ
|
||||
scrwRVjbQvQBzsBC
|
||||
gMfVqNnVmnCBQDTvdn
|
||||
SMqhWqVlmWSmqMVRSJjjpcFrcLpJrR
|
||||
HtSQHQntHsHMrtHnGfHQVVzLvSBSVvVVSFNJzzVN
|
||||
cmPRmpqlpPmcgTlTpjJNjjVDvDRFNVVBFD
|
||||
hlmCpmqmpgqpZTlcdQHFQfbHHZttwMQwtr
|
||||
VpWgbgfwCjbftwVPPpGQFQhzTBQTBGPzqFTS
|
||||
dbRbDcRrsnsRrLZmLRDZldDZqTNTGqqFFzGGhSTNTFTzNmNT
|
||||
MlLdHlDDHrHclMMrCwgHCCwWwCbCCjjg
|
||||
GGNLhfDMVcVrcGsT
|
||||
jSJQFjHbwPFSvQSHwZFvHSHrqCCrrTsqBwNBrcBNsVTsqq
|
||||
QjZSjZJZPvNRZJQPnSZbJZRWLfnmgDlmhdhWgWLdMdfmhM
|
||||
CgGnzPNggCJtNTgTZTPZzZZvvcDcDDdqDFcJssJDHDqvHq
|
||||
jhhrrLVlmLRRnRflfVbFHHHqdVsDqcvbHVDb
|
||||
jWfWwrlmRRnQmPzZNGZPBNCQTB
|
||||
NzDDhwNmhvtrGmNCvWRVbcRRVTcHHcVFTbwV
|
||||
LgsPlLsQgQdJsLdldtpgFFTMbnFqTcMbHqFcPncq
|
||||
dgsJsLLLggljrhtGNNtSjvGm
|
||||
ptzSrZtzhsmmtPrhLFRFnjnnLMsnfLRL
|
||||
HvwVDHwWWgGDGdHgqVDWDMnRnTjFNTNjfLJvRRRRRR
|
||||
DwDgWgQbDDDHwBBBWdwQGVHhlhlZZSSmztfcppSBhzZcZp
|
||||
CWmWRzlMJqWDWqCJbqDlCBBVLMQHVMGrfMVtQZrsLL
|
||||
SnhPdFFPNZsBBdHtVQ
|
||||
SSPcFFgnwnSpwvcSjwzCqRzTmJbpJCRBmbbD
|
||||
wQbqGWWSqwrbGWWWGjbNMJPfgfnnDmPnPNLfjN
|
||||
tJFztRZCvVRCztZFZRVgmMhmgNLfRfnmDPNPhm
|
||||
BFCVZzpVFlHCdbQqcTcGlJbbSG
|
||||
tttfLPZZQZTlZPHHPWgMVvBnjmvjnjgGBQ
|
||||
FzcNDDDrNzprrrshprhFJtVGVnjtjGvnhvVnnjnjGM
|
||||
RDqJNszDPfdqPtlT
|
||||
QCJdMjCQbdBjSbTHDsbWDDwHTP
|
||||
zlvlmqzqGfgdNzLldrHwwPGpWDrPGZWprr
|
||||
gfVfRczVqcRzmdcSQMjQSQCSjQCQ
|
||||
RhhCGhRBShjjRfpwppFTfFHZHZZD
|
||||
qzdqzlnPPctPdmtPdTZbwQvvwqvHHvZpwZ
|
||||
nVTVTcsWmWSRhhRVrGVB
|
||||
GmshRMnzqRGsPNwMwcrrpcVV
|
||||
CDCbFCLvCgfDSFLslgDpwpLtTwwcPtNNtTTprt
|
||||
JvSFbSbbFllJlgDvlJbgdRhRdqzBGnzshZnRRRnHBZ
|
||||
ShJhtcsvvvQbnnsccVTLVTppWqddpVnLWp
|
||||
NdzPrPZgPMNNrmzpTzpTCjWfzCpzVL
|
||||
dZgHmZRPPZRlZmrPDtDRccvbtQQbJbRS
|
||||
wqjLjwhznhBLqLWGfvSlvcmlrJsqrtJTJJ
|
||||
PwbpFPQDRCDrDJTrTmvs
|
||||
gbZVFbZHgwHbCdpCRMnffNLhWnnzMdzLLW
|
||||
RVVGSNTTRlNqHblBNB
|
||||
JfwJMvLLZwLsMJwWMJfwLHBqzFlvzpBQcqzblFbBqblq
|
||||
wMCZJsgJCCCnsMHrgLLjSPSVTgShtRjTPhRRmt
|
||||
lmQSSWdMHHLWgWqD
|
||||
ZZtVGGGJrJvGVCwfgHNLccmNFFcqtc
|
||||
vrCGPhvrTPdRBnsRTmmp
|
||||
dDMDDjzCQjwCCcDgjSLLLsLNlmpplN
|
||||
FqrHFTFRLCLVFBmS
|
||||
JhHJhHRThrfPZPvhnTZZbWdwdwDDWtDzJDtbMtCW
|
||||
ghwDzJRDwHmPthncSPncLLsPcvnv
|
||||
MWCrNTCHrMVjQQMQcSdnpTLnFFdTcnTc
|
||||
qbWMfWfNrWVQWfbjVBbqMfwDtqzmhmRRzGhtHhHhRwZh
|
||||
fmSmnjTjrlzGlTzJdH
|
||||
BrhRRQMrgQvgFFhQQbwpFvGGdZqZJqpJqHVpJGJLHdLJ
|
||||
ggbDwQMsvsMQrFMFcWSPSCPmSsPfnnmP
|
||||
cmNVbMrrrjcHDRcvfW
|
||||
wQGdFfSThFsLhhHWvDCWDCJRCCjd
|
||||
LtpStGhqrrpnfnpp
|
||||
bvcccTqbgvpGndJtgdsgNd
|
||||
wDQwQhtQhQRmSmjsJndJdBBJBJnlLS
|
||||
hwhmRrzFVjtwzDmrVFrvPCcCMVPPvfqpCCTVVb
|
||||
jRrRNPNRWjPRWPRQNjQjThTCzBBzDCFBGzgDFGGQ
|
||||
dnppLwmwCnvtlqltvtnTGBThGhdFZhgzDzGccD
|
||||
MvnqpLlMqCqCHMjWPPHMSHSs
|
||||
NNpNNvpvBdtTrMFFMhSSwzjzchzwhzwL
|
||||
VVndHqflQZZZgHSLLhjzRSmZRhcR
|
||||
glGgnqbQlngnWCGJpJprtrtFrdPPGs
|
||||
WqwRjzGtRzZZRRGjWBJzjwmfMTHGGssTTDsrLmmmQLMD
|
||||
SNdvSdFlSNNhSPFFcPFclbQQslHmfHTDsTQMLgDTmHQQ
|
||||
CNcCFvpdnWpjWwJf
|
||||
PVPnVHcnRncGZqbVzHVPnnLbSMjwrzWMjSwDtWwWtwWhwDWz
|
||||
pTfsQCshCllpglWWSjBMSQSrMrjM
|
||||
hvpvppggCpJTvTmshgfsmZRRHqbcLPHZmPLRnmPZ
|
||||
LQbhVZZmZhZjBdbGmgHqnHTmvqgnnWHr
|
||||
SzCfDFFNRfsSFFMFfvprvpWzqzgqTwHTvp
|
||||
CDNDFJgMDSQhjVdPJLQG
|
||||
plpdLdpjjrrHJJjLrrHLFdbzzCcvzgFgcwggzPMFvvcMhM
|
||||
GRtSBQNsQlMPRzRlzw
|
||||
ZSTtsmBlmjLLpnpH
|
||||
hglGNVSdNSghzSgCBhDFLBMBtFMMFtHtbtLL
|
||||
frQZccRcqGFmFHrJ
|
||||
nvfGZwvTwGTfQwvfTwfgnCSlpdnzgzslppCsCV
|
||||
snTSPbQnTTnQgbmsTJsLfZwjffhpLnGRjpGfjL
|
||||
dcNWcNHHlNtWHHlCtltWNFNMLZwjpGfpmrZfrFprrRGpwZfp
|
||||
HmdNWCmDMVvQPDgqJs
|
||||
GGFtSngQLfnSnQffgPnRgFRGRwmRJvwbBbJDwjvTbjrwhJvJ
|
||||
WHClslcNNWcqNWlCZdcHsVrThBwBjbhDTDBhrvDZJTwm
|
||||
NWVqqcHHNpsNcNVdVlhCMlHQQMQQzLfzQPttFGPMLSLgtF
|
|
@ -5,11 +5,16 @@ ghc-options: -Wall
|
|||
dependencies:
|
||||
- base == 4.*
|
||||
- text
|
||||
- attoparsec
|
||||
- split
|
||||
- extra
|
||||
|
||||
library:
|
||||
source-dirs: src
|
||||
exposed-modules:
|
||||
- AoC.Day1
|
||||
- AoC.Day2
|
||||
- AoC.Day3
|
||||
|
||||
executable:
|
||||
source-dirs: executable
|
||||
|
|
|
@ -1,10 +1,13 @@
|
|||
|
||||
module AoC.Day1 where
|
||||
|
||||
import Data.List (groupBy,null,sort)
|
||||
import Data.List (groupBy,sort)
|
||||
|
||||
parseInput :: String -> [[Int]]
|
||||
parseInput = map (map read) . map tail . groupBy (\l r -> (not $ null r)) . lines
|
||||
parseInput = map (map read) . map tail . groupBy (\_l r -> (not $ null r)) . lines
|
||||
|
||||
solveA :: String -> Int
|
||||
solveA = maximum . map sum . parseInput
|
||||
|
||||
solveB :: String -> Int
|
||||
solveB = sum . take 3 . reverse . sort . map sum . parseInput
|
||||
|
|
144
src/AoC/Day2.hs
Normal file
144
src/AoC/Day2.hs
Normal file
|
@ -0,0 +1,144 @@
|
|||
module AoC.Day2 where
|
||||
|
||||
import Control.Applicative ((<|>))
|
||||
import Data.Attoparsec.Text
|
||||
import Data.Monoid
|
||||
import Data.Text (Text)
|
||||
import qualified Data.Text as T
|
||||
|
||||
type Game = [Turn]
|
||||
|
||||
data Turn = Turn Move Move
|
||||
deriving Show
|
||||
|
||||
data Move = Rock | Paper | Scissors
|
||||
deriving (Show, Eq, Enum)
|
||||
|
||||
instance Ord Move where
|
||||
Paper `compare` Rock = GT
|
||||
Rock `compare` Paper = LT
|
||||
|
||||
Paper `compare` Scissors = LT
|
||||
Scissors `compare` Paper = GT
|
||||
|
||||
Rock `compare` Scissors = GT
|
||||
Scissors `compare` Rock = LT
|
||||
|
||||
Paper `compare` Paper = EQ
|
||||
Rock `compare` Rock = EQ
|
||||
Scissors `compare` Scissors = EQ
|
||||
|
||||
toMove :: Char -> Move
|
||||
toMove 'A' = Rock
|
||||
toMove 'B' = Paper
|
||||
toMove 'C' = Scissors
|
||||
toMove 'X' = Rock
|
||||
toMove 'Y' = Paper
|
||||
toMove 'Z' = Scissors
|
||||
toMove _ = undefined
|
||||
|
||||
parseGame :: Text -> Either String Turn
|
||||
parseGame = parseOnly parseTurn
|
||||
|
||||
parseTurn :: Parser Turn
|
||||
parseTurn = do
|
||||
move1 <- parseABC
|
||||
_ <- space
|
||||
move2 <- parseXYZ
|
||||
pure $ Turn move1 move2
|
||||
|
||||
parseABC :: Parser Move
|
||||
parseABC = do
|
||||
c <- char 'A' <|> char 'B' <|> char 'C'
|
||||
pure $ toMove c
|
||||
|
||||
parseXYZ :: Parser Move
|
||||
parseXYZ = do
|
||||
c <- char 'X' <|> char 'Y' <|> char 'Z'
|
||||
pure $ toMove c
|
||||
|
||||
parseInput :: Text -> Either String Game
|
||||
parseInput = sequenceA . fmap parseGame . T.lines
|
||||
|
||||
moveValue :: Move -> Int
|
||||
moveValue Rock = 1
|
||||
moveValue Paper = 2
|
||||
moveValue Scissors = 3
|
||||
|
||||
turnValue :: Turn -> Int
|
||||
turnValue (Turn a b) = case compare a b of
|
||||
LT -> 6
|
||||
EQ -> 3
|
||||
GT -> 0
|
||||
|
||||
gradeTurn :: Turn -> Int
|
||||
gradeTurn t@(Turn _ m2) = turnValue t + moveValue m2
|
||||
|
||||
solveA :: Text -> Either String Int
|
||||
solveA input = do
|
||||
pInput <- parseInput input
|
||||
pure $ getSum $ mconcat $ map (Sum . gradeTurn) pInput
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-- Part 2
|
||||
|
||||
type Game2 = [Turn2]
|
||||
|
||||
data Turn2 = Turn2 Move Outcome
|
||||
deriving Show
|
||||
|
||||
data Outcome = Lose | Draw | Win
|
||||
deriving Show
|
||||
|
||||
toOutcome :: Char -> Outcome
|
||||
toOutcome 'X' = Lose
|
||||
toOutcome 'Y' = Draw
|
||||
toOutcome 'Z' = Win
|
||||
toOutcome _ = undefined
|
||||
|
||||
outcomeValue :: Outcome -> Int
|
||||
outcomeValue Lose = 0
|
||||
outcomeValue Draw = 3
|
||||
outcomeValue Win = 6
|
||||
|
||||
next :: Move -> Move
|
||||
next Rock = Paper
|
||||
next Paper = Scissors
|
||||
next Scissors = Rock
|
||||
|
||||
prev :: Move -> Move
|
||||
prev Rock = Scissors
|
||||
prev Paper = Rock
|
||||
prev Scissors = Paper
|
||||
|
||||
findMove :: Turn2 -> Move
|
||||
findMove (Turn2 m Win) = next m
|
||||
findMove (Turn2 m Draw) = m
|
||||
findMove (Turn2 m Lose) = prev m
|
||||
|
||||
turnValue2 :: Turn2 -> Int
|
||||
turnValue2 t@(Turn2 _ o) = outcomeValue o + moveValue (findMove t)
|
||||
|
||||
parseInput2 :: Text -> Either String Game2
|
||||
parseInput2 = sequenceA . fmap parseGame2 . T.lines
|
||||
|
||||
parseGame2 :: Text -> Either String Turn2
|
||||
parseGame2 = parseOnly parseTurn2
|
||||
|
||||
parseTurn2 :: Parser Turn2
|
||||
parseTurn2 = do
|
||||
move <- parseABC
|
||||
_ <- space
|
||||
outcome <- parseOutcome
|
||||
pure $ Turn2 move outcome
|
||||
|
||||
parseOutcome :: Parser Outcome
|
||||
parseOutcome = do
|
||||
c <- char 'X' <|> char 'Y' <|> char 'Z'
|
||||
pure $ toOutcome c
|
||||
|
||||
solveB :: Text -> Either String Int
|
||||
solveB input = do
|
||||
pInput <- parseInput2 input
|
||||
pure $ getSum $ mconcat $ map (Sum . turnValue2) pInput
|
||||
|
65
src/AoC/Day3.hs
Normal file
65
src/AoC/Day3.hs
Normal file
|
@ -0,0 +1,65 @@
|
|||
{-# LANGUAGE OverloadedStrings #-}
|
||||
|
||||
module AoC.Day3 where
|
||||
|
||||
import Data.Text (Text)
|
||||
import Data.Maybe (fromMaybe)
|
||||
import Data.Monoid (Sum(..), getSum)
|
||||
import Data.List.Split (chunksOf)
|
||||
import Data.Tuple.Extra (uncurry3)
|
||||
import qualified Data.Text as T
|
||||
|
||||
valueMap :: [(Char, Int)]
|
||||
valueMap = zip (['a'..'z']++['A'..'Z']) [1..]
|
||||
|
||||
breakInTwoEqualLengthSubStrings :: Text -> (Text,Text)
|
||||
breakInTwoEqualLengthSubStrings txt = T.splitAt (T.length txt `div` 2) txt
|
||||
|
||||
findCommonItem :: Text -> Text -> Char
|
||||
findCommonItem _ "" = undefined
|
||||
findCommonItem compartment1 compartment2 =
|
||||
if (c `T.elem` compartment1)
|
||||
then c
|
||||
else findCommonItem compartment1 (T.tail compartment2)
|
||||
where
|
||||
c = T.head compartment2
|
||||
|
||||
|
||||
solveAOnOne :: Text -> Int
|
||||
solveAOnOne = fromMaybe undefined
|
||||
. flip lookup valueMap
|
||||
. uncurry findCommonItem
|
||||
. breakInTwoEqualLengthSubStrings
|
||||
|
||||
solveA :: Text -> Int
|
||||
solveA = getSum . mconcat . map (Sum . solveAOnOne) . T.lines
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-- Part 2
|
||||
|
||||
findCommonItem3 :: Text -> Text -> Text -> Char
|
||||
findCommonItem3 c1 c2 c3 = T.head $ go (go c1 c2) c3
|
||||
where
|
||||
go :: Text -> Text -> Text
|
||||
go t1 = T.foldl (\acc c -> if c `T.elem` t1 then T.cons c acc else acc) ""
|
||||
|
||||
tupleMeUp3 :: [[Text]] -> [(Text,Text,Text)]
|
||||
tupleMeUp3 = go []
|
||||
where
|
||||
go :: [(Text,Text,Text)] -> [[Text]] -> [(Text,Text,Text)]
|
||||
go tuples [] = tuples
|
||||
go tuples ([t1, t2, t3]:xs) = go ((t1,t2,t3):tuples) xs
|
||||
go _ _ = undefined
|
||||
|
||||
solveBOnOne :: (Text,Text,Text) -> Int
|
||||
solveBOnOne = fromMaybe undefined
|
||||
. flip lookup valueMap
|
||||
. uncurry3 findCommonItem3
|
||||
|
||||
solveB :: Text -> Int
|
||||
solveB = getSum
|
||||
. mconcat
|
||||
. map (Sum . solveBOnOne)
|
||||
. tupleMeUp3
|
||||
. chunksOf 3
|
||||
. T.lines
|
Loading…
Reference in New Issue
Block a user