Compare commits

...

11 Commits

Author SHA1 Message Date
Patrick Michl
f8f82e80b2 add solutions for day 9 to 12 2022-12-12 21:43:34 +01:00
Patrick Michl
76514a78d5 add solution for day 8 2022-12-08 14:52:17 +01:00
Patrick Michl
8ee7085510 add solution for day 7 2022-12-07 15:20:32 +01:00
Patrick Michl
5697d36ff1 add solution for day 6 2022-12-06 06:22:52 +01:00
Patrick Michl
5930deb3c5 add solution for day 5 2022-12-05 15:29:53 +01:00
Patrick Michl
9eadc6a3c1 add solution for day 4 2022-12-04 18:54:32 +01:00
Patrick Michl
61b961dc12 add solution for day3 2022-12-03 06:54:58 +01:00
Patrick Michl
c2954ea720 fix timsort implementation 2022-12-02 21:03:35 +01:00
Patrick Michl
ca600eb280 add bash solution for day2 2022-12-02 19:55:41 +01:00
Patrick Michl
6b3fcfd9cd inline 2022-12-02 08:34:51 +01:00
Patrick Michl
8c7ffecb0b fix aoc helper, add day 2 2022-12-02 07:42:26 +01:00
26 changed files with 8288 additions and 13 deletions

6
aoc.jl
View File

@@ -16,11 +16,7 @@ function _cookie()
end
function _get_input(year, day)
res = HTTP.get(
"https://adventofcode.com/$year/day/$day/input",
cookies = _cookie(),
headers = Dict("User-Agent", "git.fuckwit.dev/fuckwit/aoc2022/src/branch/master/aoc.jl by huanzodev@gmail.com")
)
res = HTTP.get("https://adventofcode.com/$year/day/$day/input", cookies = _cookie())
if res.status 200
error("Unable to fetch infput for AOC $year day $day")
end

138
data/day_10.txt Normal file
View File

@@ -0,0 +1,138 @@
noop
noop
addx 5
addx 29
addx -28
addx 5
addx -1
noop
noop
addx 5
addx 12
addx -6
noop
addx 4
addx -1
addx 1
addx 5
addx -31
addx 32
addx 4
addx 1
noop
addx -38
addx 5
addx 2
addx 3
addx -2
addx 2
noop
addx 3
addx 2
addx 5
addx 2
addx 3
noop
addx 2
addx 3
noop
addx 2
addx -32
addx 33
addx -20
addx 27
addx -39
addx 1
noop
addx 5
addx 3
noop
addx 2
addx 5
noop
noop
addx -2
addx 5
addx 2
addx -16
addx 21
addx -1
addx 1
noop
addx 3
addx 5
addx -22
addx 26
addx -39
noop
addx 5
addx -2
addx 2
addx 5
addx 2
addx 23
noop
addx -18
addx 1
noop
noop
addx 2
noop
noop
addx 7
addx 3
noop
addx 2
addx -27
addx 28
addx 5
addx -11
addx -27
noop
noop
addx 3
addx 2
addx 5
addx 2
addx 27
addx -26
addx 2
addx 5
addx 2
addx 4
addx -3
addx 2
addx 5
addx 2
addx 3
addx -2
addx 2
noop
addx -33
noop
noop
noop
noop
addx 31
addx -26
addx 6
noop
noop
addx -1
noop
addx 3
addx 5
addx 3
noop
addx -1
addx 5
addx 1
addx -12
addx 17
addx -1
addx 5
noop
noop
addx 1
noop
noop

55
data/day_11.txt Normal file
View File

@@ -0,0 +1,55 @@
Monkey 0:
Starting items: 71, 56, 50, 73
Operation: new = old * 11
Test: divisible by 13
If true: throw to monkey 1
If false: throw to monkey 7
Monkey 1:
Starting items: 70, 89, 82
Operation: new = old + 1
Test: divisible by 7
If true: throw to monkey 3
If false: throw to monkey 6
Monkey 2:
Starting items: 52, 95
Operation: new = old * old
Test: divisible by 3
If true: throw to monkey 5
If false: throw to monkey 4
Monkey 3:
Starting items: 94, 64, 69, 87, 70
Operation: new = old + 2
Test: divisible by 19
If true: throw to monkey 2
If false: throw to monkey 6
Monkey 4:
Starting items: 98, 72, 98, 53, 97, 51
Operation: new = old + 6
Test: divisible by 5
If true: throw to monkey 0
If false: throw to monkey 5
Monkey 5:
Starting items: 79
Operation: new = old + 7
Test: divisible by 2
If true: throw to monkey 7
If false: throw to monkey 0
Monkey 6:
Starting items: 77, 55, 63, 93, 66, 90, 88, 71
Operation: new = old * 7
Test: divisible by 11
If true: throw to monkey 2
If false: throw to monkey 4
Monkey 7:
Starting items: 54, 97, 87, 70, 59, 82, 59
Operation: new = old + 8
Test: divisible by 17
If true: throw to monkey 1
If false: throw to monkey 3

41
data/day_12.txt Normal file
View File

@@ -0,0 +1,41 @@
abaaaaacccccccccccccccccccccccccccccccccccccccaaaaaaaccccaaaaaaaaaaaaaaaaacccccaaaaaacccccccccccccccccccccccaaaaaaaaccccccccccccccccccccccccccccccccaaaaaa
abaaaaaacccaaaacccccccccccccccccccccccaccccccccaaaaaaaaccaaaaaaaaaaaaaaaaccccccaaaaaacccccccccccccccccccccccccaaaaccccccccccccccccccccccccccccccccccaaaaaa
abaaaaaacccaaaacccccccccccccccccaaaaaaaacccccccaaaaaaaaacaaaaaaaaaaaaacccccccccaaaaacccccccccccccccccccccccccaaaaacccccccccccccccccccaaaccccccccccccaaaaaa
abaaacaccccaaaaccccccccccccccccccaaaaaacccccccccaaaaaaaccccaaaaaaaaaaacccccccccaaaaacccccccccccccccccccccccccaacaaaccccccccccccccccccaaacccccccccccccccaaa
abaaacccccccaaacccccccccccaacccccaaaaaaccccccccaaaaaaccccccaacaaaaaaaacccccccccccccccccccccccaaccccccccccccccacccaaaaacccccccccaaccccaaacccccccccccccccaaa
abccccccccccccccccccccccccaaaaccaaaaaaaacccccccaaaaaaaccccccccaaaaaaaaaccccccccccaacccccccccaaaccccccccccccccccccacaaacccccccccaaaaccaaacccccccccccccccaac
abccccccccccccccccccccccaaaaaacaaaaaaaaaaccccccaaccaaaaacccccaaaaccaaaaccccccccccaaacaacccccaaacaaacccaaccccccccaaaaaaaacccccccaaaaakkkkkkcccccccccccccccc
abccccccccccccccccccccccaaaaaccaaaaaaaaaacccccccccccaaaaaaccccacccaaaaaccccccccccaaaaaaccaaaaaaaaaaaaaaaccccccccaaaaaaaaccccccccaaajkkkkkkkaccccccaacccccc
abcccccccccccccccccccccccaaaaacacacaaaccccccccccccccaaaaaaccccccccaaaacccccccccaaaaaaacccaaaaaaaaaaaaaaaaaccccccccaaaaaccccccccccjjjkkkkkkkkccaaaaaacccccc
abcccccccccccccccccccccccaacaacccccaaacccaccccccccccaaaaaaccccccccaaaacccccccccaaaaaaacccccaaaaaacaaaaaaaacccccccaaaaacccccccjjjjjjjooopppkkkcaaaaaaaccccc
abcccccccccccccccccaacaacccccccccccaaaaaaacccccccccccaaaaacccccccccccccccccccccccaaaaaaccccaaaaaaccaaaaaaacccccccaaaaaacciijjjjjjjjoooopppkkkcaaaaaaaacccc
abccccccccccaaaccccaaaaacccccccccccccaaaaacccccccccccaaaaccccccccccccccccccccccccaacaaaccccaaaaaaacaaaaacccccccccaccaaaciiiijjjjjjoooopppppkllcaaaaaaacccc
abccaaccccccaaaaacaaaaacccccccccccccaaaaaacccccccccccccccccccccccccccccccccccccccaacccccccaaaacaaaaaaaaacccaaccccaaaaaciiiiinoooooooouuuupplllaaaaaacccccc
abcaaacccccaaaaaacaaaaaacccccccccccaaaaaaaaccccccccaacaccccccccccccccccccccccccccccccccccccaccccccccccaaccaaaccccaaaaaciiinnnooooooouuuuuppplllaaacacccccc
abaaaaaacccaaaaaacccaaaacccccccccccaaaaaaaaccccccccaaaaccccccccccccccccccccccccccccccccccccccccccccccccaaaaacaacaaaaaaiiinnnnntttoouuuuuupppllllcccccccccc
abaaaaaaccccaaaaacccaaccccccccccacccccaaccccccccccaaaaaccccccccccccccccccccccccccccccccccccccccccccccccaaaaaaaacaaaaaaiiinnnnttttuuuuxxuuupppllllccccccccc
abaaaaacccccaacaaccccccccccccccaaaccccaacccccaacccaaaaaacccccccccccccccccccccccccccccccccccccccccccccccccaaaaaccaaaaaaiiinnnttttxxuuxxyyuuppppllllcccccccc
abaaaacccccccccccccccccccccaaacaaaccccccaaacaaaaccacaaaacccccccccccccccccccccccccccccccccccaacccccccccccaaaaaccccaaaccciinnntttxxxxxxxyyvvvqqqqqlllccccccc
abaaaaaccccccccccccccccccccaaaaaaaaaacccaaaaaaacccccaaccccccccccccccccccccccccccccccccccccaaacccccccccccaacaaaccccccccciiinntttxxxxxxxyyvvvvvqqqqljjcccccc
abccaaaccaccccccccaaacccccccaaaaaaaaaccccaaaaaacccccccccccccccccccccccccccccccaacccccccaaaaacaaccccccccccccaacccccccccchhinnnttxxxxxxyyyyyvvvvqqqjjjcccccc
SbccccaaaacccccccaaaaaacccccccaaaaaccccccaaaaaaaaccccccccccccccccccccaaccccccaaaaccccccaaaaaaaacccccccccccccccccccccccchhhnnntttxxxxEzyyyyyvvvqqqjjjcccccc
abccccaaaacccccccaaaaaaccccccaaaaaacccccaaaaaaaaaacccccccccccccccccccaaccccccaaaaccccccccaaaaacccccccccccccccccccccccccchhhnntttxxxyyyyyyyvvvvqqqjjjcccccc
abcccaaaaaaccccccaaaaaacccccaaaaaaaccccaaaaaaaaaacccccccccccccccccaaaaaaaacccaaaacccccccaaaaaccccccccccccccccccccccccccchhmmmttxxxyyyyyyvvvvvqqqjjjdcccccc
abcccaaaaaacccccccaaaaacccccaaacaaacaaaaaaaaaaccccccccccccaaacccccaaaaaaaaccccccccccccccaacaaacccccccaacaaacccccccccccchhhmmmtswwwyyyyyyvvvqqqqjjjjdddcccc
abcccccaacccccccccaacaacccccccccccacaaaaaccaaaccccccccccaaaaacccccccaaaacccccccccccccccccccaaccccccccaaaaaacccccccccccchhhmmssswwwwwwyyywvrqqqjjjjdddccccc
abcccccccccccccccccccccccccccccccccaaaaaccccaaccccccccacaaaaaacccccaaaaacccccccccccccccccccccccccccccaaaaaacccccccccccchhhmmssswwwwwwywywwrrqjjjjddddccccc
abcccccccccccccccccccccccccccccccccaaaaaccccccccaaacaaacaaaaaacccccaaaaaaccccccccccccccccccccccccccccaaaaaaaccccccccccchhmmmsssswwsswwwwwwrrkkjjddddcccccc
abccccccccccccccccccccccccccccccccccaaaaacccccccaaaaaaacaaaaaccccccaaccaacccccccccccaaccccccccccccccaaaaaaaacaacaaccccchhhmmmsssssssswwwwrrrkkjddddaaccccc
abcccccccccccccccccccccccccaaaaaccccaacccccccccccaaaaaacaaaaacccccccccccccaacccccccaaaaaacccccccccccaaaaaaaacaaaaaccccchhgmmmmssssssrrwwwrrrkkddddaaaccccc
abcccccccccccccccccccccccccaaaaacccccccccccccccccaaaaaaaacccccccccccccccaaaaaaccccccaaaaaccccaaccccccccaaacccaaaaaaccccgggmmmmmmllllrrrrrrrkkkeedaaaaccccc
abcccccccccccaaccccccccccccaaaaaacccccccccccccccaaaaaaaaacccccccccccccccaaaaaaccccaaaaaaacccaaaacccccccaaccccaaaaaaccccggggmmmmllllllrrrrrkkkkeedaaaaacccc
abcccccccccccaaacaacaaaccccaaaaaaccccccccccccccaaaaaaaaaacccccccccccccccaaaaaaccccaaaaaaaaccaaaacccccccccccccaaaaaccccccgggggglllllllllrrkkkkeeeaaaaaacccc
abcccccccccccaaaaaacaaaacccaaaaaaccccccccccccccaaacaaaaaaccccccccccccccccaaaaaccccaaaaaaaaccaaaacccccccccccaaccaaaccccccgggggggggffflllkkkkkkeeeaaaaaacccc
abaccccccccaaaaaaaccaaaacccccaaacccccccccccccccccccaaaaaacaccccccccaaccccaaaacccccccaaacacccccccccccccccaaaaaccccccccccccccgggggffffflllkkkkeeeccaaacccccc
abaccccccccaaaaaaaccaaacccccccccccccccccaaaccccccccaaacaaaaaccccccaaacccccccccccccaaaacccccccccccccccccccaaaaaccccccccccccccccccaffffffkkkeeeeeccaaccccccc
abaaaccccccccaaaaaaccccccccccccccccccccaaaaaacccccccaaaaaaaacaaaacaaacccccccccaaaaaacccccccccccccccccccccaaaaaccccccccccccccccccccaffffffeeeeecccccccccccc
abaacccccccccaacaaaccccccccccccccccccccaaaaaaccccccccaaaaaccaaaaaaaaacccccccccaaaaaaaaccccccccccaaccccccaaaaacccccccccccccccccccccaaaffffeeeecccccccccccaa
abaacccccccccaaccccccccccccccccaaccccccaaaaacaaccaacccaaaaacaaaaaaaaacccccccccaaaaaaaaccccccaaacaacccccccccaacccccccccccccccccccccaaaccceaecccccccccccccaa
abaacccccccccccccccccccccccccccaaaaaacccaaaaaaaaaaaccaaacaaccaaaaaaaaaaaaacccccaaaaaaacccccccaaaaaccccccccccccccccccccccccccccccccaaacccccccccccccccaaacaa
abcccccccccccccccccccccccccccccaaaaaccccaacaacaaaaacccaaccccccaaaaaaaaaaaacccccaaaaacccccccccaaaaaaaccccccccccccccccccccccccccccccaaacccccccccccccccaaaaaa
abcccccccccccccccccccccccccccaaaaaaaccccccccaaaaaaaaccccccccccaaaaaaaaaaccccccaaaaaaccccccccaaaaaaaaccccccccccccccccccccccccccccccccccccccccccccccccaaaaaa

2500
data/day_2.txt Normal file

File diff suppressed because it is too large Load Diff

300
data/day_3.txt Normal file
View 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

1000
data/day_4.txt Normal file

File diff suppressed because it is too large Load Diff

512
data/day_5.txt Normal file
View File

@@ -0,0 +1,512 @@
[N] [G] [Q]
[H] [B] [B] [R] [H]
[S] [N] [Q] [M] [T] [Z]
[J] [T] [R] [V] [H] [R] [S]
[F] [Q] [W] [T] [V] [J] [V] [M]
[W] [P] [V] [S] [F] [B] [Q] [J] [H]
[T] [R] [Q] [B] [D] [D] [B] [N] [N]
[D] [H] [L] [N] [N] [M] [D] [D] [B]
1 2 3 4 5 6 7 8 9
move 3 from 1 to 2
move 1 from 7 to 1
move 1 from 6 to 5
move 5 from 5 to 9
move 2 from 5 to 2
move 1 from 6 to 8
move 1 from 5 to 7
move 5 from 4 to 6
move 1 from 7 to 6
move 1 from 2 to 4
move 5 from 2 to 6
move 2 from 1 to 5
move 2 from 1 to 9
move 16 from 6 to 4
move 6 from 8 to 3
move 7 from 2 to 4
move 5 from 9 to 3
move 1 from 1 to 4
move 1 from 1 to 3
move 3 from 7 to 4
move 2 from 5 to 4
move 31 from 4 to 8
move 22 from 8 to 4
move 9 from 3 to 6
move 7 from 9 to 5
move 4 from 5 to 6
move 6 from 3 to 2
move 2 from 6 to 7
move 5 from 2 to 7
move 1 from 2 to 4
move 1 from 7 to 5
move 4 from 5 to 4
move 2 from 6 to 9
move 2 from 4 to 6
move 7 from 6 to 4
move 2 from 6 to 1
move 1 from 6 to 8
move 8 from 8 to 1
move 1 from 7 to 6
move 4 from 1 to 5
move 9 from 4 to 8
move 4 from 1 to 7
move 3 from 5 to 3
move 2 from 1 to 9
move 1 from 3 to 2
move 1 from 9 to 8
move 1 from 2 to 1
move 1 from 1 to 8
move 1 from 5 to 1
move 2 from 3 to 1
move 2 from 6 to 9
move 19 from 4 to 1
move 4 from 4 to 2
move 6 from 1 to 4
move 1 from 2 to 4
move 4 from 4 to 3
move 7 from 7 to 3
move 7 from 8 to 2
move 2 from 7 to 4
move 3 from 2 to 1
move 8 from 8 to 2
move 3 from 9 to 1
move 2 from 9 to 1
move 10 from 2 to 7
move 4 from 3 to 1
move 1 from 8 to 3
move 1 from 4 to 5
move 1 from 3 to 6
move 1 from 2 to 1
move 10 from 1 to 3
move 1 from 4 to 7
move 1 from 6 to 4
move 7 from 3 to 2
move 5 from 2 to 8
move 11 from 7 to 2
move 3 from 4 to 3
move 1 from 4 to 3
move 5 from 8 to 9
move 17 from 2 to 4
move 11 from 1 to 5
move 4 from 1 to 3
move 5 from 9 to 2
move 4 from 2 to 1
move 3 from 5 to 7
move 6 from 5 to 3
move 1 from 5 to 8
move 6 from 1 to 8
move 3 from 8 to 5
move 1 from 1 to 4
move 1 from 7 to 2
move 15 from 3 to 4
move 1 from 1 to 3
move 10 from 3 to 9
move 2 from 7 to 4
move 1 from 2 to 8
move 21 from 4 to 9
move 1 from 2 to 3
move 1 from 8 to 1
move 9 from 4 to 2
move 1 from 1 to 5
move 5 from 2 to 7
move 2 from 8 to 5
move 1 from 8 to 1
move 2 from 2 to 8
move 2 from 4 to 9
move 24 from 9 to 5
move 3 from 4 to 1
move 2 from 2 to 5
move 12 from 5 to 1
move 10 from 1 to 5
move 23 from 5 to 6
move 8 from 9 to 1
move 3 from 8 to 1
move 1 from 1 to 2
move 1 from 3 to 7
move 11 from 6 to 1
move 1 from 2 to 4
move 6 from 6 to 8
move 4 from 6 to 7
move 1 from 7 to 3
move 1 from 3 to 4
move 23 from 1 to 8
move 1 from 4 to 2
move 1 from 2 to 1
move 1 from 6 to 7
move 6 from 5 to 3
move 1 from 7 to 8
move 1 from 1 to 8
move 1 from 9 to 3
move 6 from 7 to 2
move 3 from 5 to 9
move 5 from 2 to 3
move 28 from 8 to 3
move 4 from 1 to 9
move 5 from 9 to 5
move 2 from 8 to 5
move 1 from 9 to 4
move 2 from 7 to 5
move 1 from 4 to 2
move 1 from 4 to 8
move 2 from 8 to 3
move 6 from 5 to 2
move 1 from 7 to 2
move 39 from 3 to 2
move 2 from 3 to 8
move 1 from 9 to 6
move 2 from 2 to 9
move 2 from 9 to 6
move 1 from 8 to 1
move 1 from 1 to 6
move 5 from 6 to 9
move 2 from 5 to 8
move 20 from 2 to 4
move 2 from 4 to 8
move 2 from 8 to 3
move 3 from 3 to 1
move 22 from 2 to 5
move 2 from 9 to 1
move 3 from 1 to 7
move 1 from 2 to 6
move 1 from 2 to 9
move 1 from 1 to 8
move 2 from 7 to 9
move 1 from 6 to 8
move 1 from 2 to 7
move 1 from 1 to 3
move 1 from 9 to 8
move 1 from 8 to 5
move 3 from 8 to 7
move 3 from 7 to 8
move 15 from 4 to 1
move 1 from 4 to 3
move 10 from 1 to 6
move 3 from 8 to 1
move 5 from 9 to 4
move 7 from 5 to 1
move 4 from 6 to 3
move 15 from 5 to 2
move 4 from 6 to 4
move 7 from 2 to 1
move 6 from 4 to 6
move 1 from 5 to 9
move 1 from 5 to 7
move 1 from 3 to 5
move 11 from 1 to 8
move 3 from 4 to 6
move 4 from 1 to 5
move 1 from 2 to 5
move 2 from 8 to 3
move 11 from 6 to 1
move 1 from 3 to 7
move 1 from 9 to 8
move 6 from 5 to 8
move 3 from 8 to 4
move 1 from 4 to 5
move 3 from 3 to 1
move 9 from 8 to 2
move 2 from 1 to 5
move 11 from 2 to 5
move 1 from 3 to 6
move 2 from 8 to 5
move 3 from 4 to 6
move 1 from 8 to 3
move 2 from 1 to 9
move 1 from 3 to 8
move 16 from 5 to 7
move 3 from 1 to 6
move 1 from 3 to 5
move 1 from 6 to 7
move 1 from 9 to 4
move 1 from 5 to 4
move 1 from 3 to 2
move 1 from 1 to 2
move 3 from 4 to 9
move 1 from 2 to 7
move 2 from 8 to 3
move 6 from 2 to 8
move 11 from 1 to 3
move 6 from 3 to 1
move 4 from 3 to 2
move 2 from 3 to 1
move 1 from 1 to 3
move 4 from 8 to 4
move 4 from 8 to 2
move 11 from 7 to 2
move 9 from 7 to 5
move 1 from 7 to 3
move 4 from 5 to 7
move 14 from 2 to 3
move 17 from 3 to 7
move 2 from 5 to 2
move 1 from 5 to 7
move 1 from 5 to 6
move 4 from 6 to 7
move 8 from 1 to 2
move 2 from 6 to 4
move 1 from 6 to 8
move 6 from 4 to 1
move 1 from 8 to 5
move 6 from 7 to 8
move 5 from 8 to 3
move 12 from 2 to 1
move 1 from 8 to 4
move 4 from 3 to 1
move 4 from 2 to 4
move 3 from 9 to 3
move 3 from 3 to 2
move 1 from 3 to 2
move 3 from 4 to 1
move 2 from 5 to 7
move 22 from 1 to 8
move 17 from 8 to 6
move 21 from 7 to 6
move 3 from 2 to 8
move 3 from 1 to 5
move 3 from 5 to 2
move 2 from 4 to 6
move 7 from 6 to 5
move 1 from 9 to 4
move 14 from 6 to 4
move 5 from 8 to 3
move 1 from 6 to 3
move 3 from 3 to 9
move 2 from 9 to 1
move 2 from 7 to 1
move 16 from 6 to 8
move 2 from 6 to 7
move 1 from 2 to 7
move 1 from 3 to 8
move 7 from 4 to 1
move 2 from 7 to 2
move 4 from 4 to 7
move 5 from 2 to 4
move 1 from 7 to 3
move 3 from 5 to 8
move 1 from 7 to 5
move 12 from 1 to 6
move 3 from 7 to 2
move 7 from 4 to 2
move 3 from 3 to 2
move 1 from 4 to 2
move 1 from 9 to 8
move 8 from 6 to 8
move 12 from 2 to 4
move 5 from 5 to 2
move 11 from 4 to 9
move 3 from 6 to 3
move 2 from 4 to 2
move 4 from 2 to 6
move 5 from 2 to 8
move 12 from 8 to 4
move 20 from 8 to 5
move 13 from 5 to 3
move 1 from 8 to 5
move 5 from 5 to 9
move 16 from 9 to 1
move 9 from 4 to 5
move 12 from 3 to 9
move 5 from 6 to 5
move 9 from 9 to 7
move 14 from 1 to 4
move 14 from 4 to 1
move 15 from 5 to 7
move 4 from 8 to 2
move 3 from 4 to 3
move 3 from 1 to 8
move 1 from 5 to 9
move 1 from 5 to 3
move 3 from 9 to 8
move 4 from 3 to 4
move 1 from 4 to 6
move 20 from 7 to 2
move 2 from 3 to 8
move 3 from 7 to 2
move 4 from 2 to 1
move 1 from 6 to 7
move 3 from 4 to 2
move 2 from 2 to 3
move 4 from 3 to 4
move 1 from 8 to 1
move 3 from 8 to 1
move 2 from 7 to 8
move 1 from 4 to 5
move 14 from 2 to 5
move 6 from 1 to 5
move 1 from 4 to 3
move 15 from 1 to 4
move 1 from 8 to 2
move 1 from 9 to 5
move 4 from 8 to 7
move 13 from 5 to 6
move 1 from 8 to 1
move 2 from 7 to 9
move 12 from 6 to 4
move 1 from 3 to 6
move 1 from 1 to 6
move 4 from 5 to 2
move 5 from 5 to 6
move 2 from 6 to 2
move 1 from 7 to 5
move 2 from 6 to 9
move 1 from 5 to 9
move 16 from 2 to 5
move 17 from 4 to 1
move 3 from 1 to 3
move 1 from 2 to 6
move 2 from 6 to 1
move 3 from 3 to 1
move 14 from 1 to 8
move 3 from 5 to 2
move 4 from 8 to 2
move 3 from 4 to 5
move 15 from 5 to 3
move 1 from 7 to 6
move 3 from 1 to 8
move 2 from 3 to 7
move 1 from 1 to 2
move 1 from 7 to 6
move 4 from 2 to 8
move 2 from 6 to 2
move 1 from 7 to 6
move 3 from 8 to 2
move 12 from 8 to 6
move 1 from 5 to 6
move 3 from 2 to 5
move 2 from 2 to 5
move 4 from 6 to 5
move 4 from 3 to 5
move 1 from 8 to 4
move 11 from 6 to 4
move 6 from 3 to 1
move 2 from 9 to 8
move 20 from 4 to 5
move 1 from 4 to 9
move 2 from 3 to 8
move 1 from 3 to 8
move 17 from 5 to 8
move 5 from 5 to 9
move 9 from 5 to 1
move 2 from 6 to 7
move 23 from 8 to 2
move 2 from 7 to 5
move 3 from 9 to 4
move 16 from 2 to 4
move 11 from 1 to 8
move 4 from 5 to 8
move 11 from 2 to 6
move 2 from 6 to 1
move 5 from 9 to 5
move 5 from 5 to 6
move 5 from 8 to 6
move 1 from 6 to 7
move 7 from 8 to 1
move 12 from 1 to 2
move 1 from 9 to 5
move 1 from 1 to 3
move 1 from 1 to 4
move 1 from 5 to 3
move 1 from 3 to 6
move 1 from 8 to 2
move 18 from 6 to 2
move 1 from 6 to 2
move 2 from 8 to 3
move 3 from 3 to 8
move 18 from 4 to 9
move 11 from 9 to 2
move 2 from 9 to 6
move 2 from 4 to 1
move 1 from 1 to 5
move 1 from 5 to 4
move 1 from 4 to 8
move 42 from 2 to 1
move 3 from 9 to 3
move 1 from 8 to 1
move 1 from 3 to 4
move 3 from 8 to 7
move 1 from 4 to 1
move 2 from 3 to 2
move 17 from 1 to 6
move 15 from 6 to 3
move 2 from 9 to 7
move 1 from 3 to 6
move 2 from 7 to 6
move 2 from 2 to 4
move 1 from 2 to 3
move 1 from 4 to 9
move 1 from 4 to 1
move 1 from 6 to 3
move 20 from 1 to 9
move 6 from 1 to 9
move 7 from 9 to 3
move 20 from 9 to 1
move 1 from 6 to 7
move 2 from 6 to 7
move 1 from 6 to 5
move 1 from 6 to 8
move 4 from 7 to 3
move 3 from 7 to 2
move 1 from 6 to 4
move 1 from 2 to 1
move 1 from 4 to 9
move 21 from 3 to 2
move 5 from 3 to 8
move 1 from 5 to 1
move 2 from 8 to 7
move 4 from 8 to 3
move 4 from 2 to 5
move 19 from 2 to 3
move 1 from 9 to 2
move 23 from 3 to 2
move 2 from 7 to 4
move 3 from 5 to 9
move 16 from 2 to 1
move 1 from 5 to 4
move 1 from 9 to 3
move 2 from 3 to 8
move 3 from 4 to 6
move 1 from 6 to 2
move 1 from 8 to 6
move 5 from 2 to 6
move 7 from 6 to 5
move 4 from 2 to 6
move 6 from 5 to 9
move 1 from 8 to 4
move 18 from 1 to 9
move 1 from 5 to 2
move 9 from 9 to 4
move 5 from 6 to 3
move 9 from 4 to 1
move 4 from 9 to 2
move 1 from 4 to 8
move 1 from 8 to 3
move 7 from 1 to 8
move 6 from 3 to 2
move 10 from 2 to 9
move 21 from 1 to 8
move 1 from 2 to 8
move 19 from 8 to 4
move 1 from 8 to 3
move 16 from 4 to 8
move 1 from 4 to 2
move 2 from 1 to 5
move 1 from 2 to 3
move 1 from 4 to 5
move 1 from 4 to 8
move 2 from 1 to 3
move 3 from 3 to 2
move 5 from 9 to 1
move 1 from 3 to 4
move 4 from 9 to 4
move 2 from 1 to 9
move 2 from 2 to 5
move 1 from 2 to 7
move 3 from 1 to 7
move 10 from 8 to 6
move 4 from 8 to 5
move 3 from 4 to 3
move 3 from 3 to 4
move 1 from 9 to 8
move 2 from 7 to 2
move 1 from 2 to 1
move 4 from 9 to 3

1
data/day_6.txt Normal file
View File

@@ -0,0 +1 @@
llqnqffqsqttfffbcfcbcbdcczccfssvwswrwddzlddpdhdwwlvlffjllnjjwjqwjjttwbwcwfccdmmnddgvvpwvvgsshnshsgglljfjzjpjfpfjpplddjcchdhvhlhvllvflfbllsdllgppwjjprjpjrrdwrdrggjvjppgbgttdppwhhcshsvvgpvggsllstsggdjdmjjrvjjszjsjbbsffjwjnwwzjjjvqvfftbffbpffndfdzfdfvdfdggmpmbbwgbgnnbtnnnhggdmdffrqrlrhrzzrmzzmbzzcdcwwzffsrrnfnvfnnvppwjjndjnndtdppgcppsmppljlpjjmlldlsltlglwgwcwnwvwddzrrllwjjnvjvwvppjssncnfcnfcfcczfccpjphjphjjjsgszzhthghjhrjrbrtrjrhrsrfftfzftfmmwmpmgghbggjrrsdswddtjjvnnrwrzrpzzlglwggrnrgrfftnffwwgllrqqzbqbbtltbbgdgpgphggspggplggmcmscsffzcfzzbggdrgrqgrrnlrnrbnnzsnnzcctvvnvwvnwnhhwpwtptllpflfcfttwtjjhwjhhbwhbbtppwhwvhvghvhphpwwcgwwhbbfvbffzpzlllrzlrrbnnrngrnrpnnsszbbqffpsffhfshfhzzqhhcgcgfggzmmdllthhrhnrrwggdqdsstccqllflmflfddjwjzjffvjjfgjgdgbdgdngnpgpnpffsnsjnnbbjdbjbtbmmbrrlbbqmqpqrprjjrbbvnbbzvvcwwlfwfggmhhdhsdhsdhshhqfhfrhhqlqttffpmmjzjqjggqzzdfzflfsllshhvjvfvbfvbbjljhhzrzqqszqzsqqswswbsbzszgzdgzzhjzhhvffhthvtthltthghzhvvjttczttlssvvgjjmsjstjjrfjjhbjbnjbjddqrddnbdnbnwbnbqbmqqgtgqtttcmmqbqrrgrrsrszssvpsvvjqjttjpjwwmwfwttczttgccwhcwwrzwzbwwqbqmqnmqqnfnmmmzdmzmpmssdpsslbbmgmbmlmnlldlccvzzlrzzqbqfqlflwlvlhhtrtcttgnnqhnqqtjjphjhwjhwhpwwvdvfddmndncnppcffhllfvfdfllhgslvtsqhtlfdflcjfmqbnctnfnwqrlqbzrcbvldrffcptsgslqcszqcfdvtpggvdqblwcgmdjqrpjdhtrmvrfrzznspqlfhnjsppbpjdggcwjwprpnlnntgfgmflctqphdmzfvpzzmbzmvrqdgchzmdvjdzmfsslpqvhpgznmpspjpdmlfwwjbbwqbfthghclldpmnsbcwlzswrsnfzbdzpcnrrpspdpfqhvmtfjlppqtphvzzqrwhzccnrgrtgfbfgtwvlwsmcvzmqmhsvztmmvpjzfwzgfwntbrsfthdgrcmgtdsvzcllmcshrlqldrvrnmdgbwttmhczvscrdvfgdvrhfvlghhsfbmrptbwmpnvtsrjlpjlbmmjzwwzbdtjlqqdczqgpzfjslccrcrblhplndblghchczbjjfzlsvvrqhvgdsncgpjhjlprhfhswwbmrnszqzhhlrbqpphvgtfsgmdpjwgcmqnvfdhrqmbspjpdrtdbqnbmbpgqwgmltqwrjprvsfjsmpldcqqbvmfhgzltzfvhlnfdqrphzzjrbdvnnjspvnlnnsdzvgqsqztndjpmnbqtwnpzmmfhsswwnnwwlbnpgbrhzchbnsrwwpprhntngsjzvssttqwfvjrdddtfpgtqqzcwljzmdjtgzdqjjvbqgdttdgvqvlfdsgcjhsmdmwrwdcqdflpfjbfzsvjrzrhhcnvcjblwcdvtbgfhfgcwrcjsrzcdrfwtvdqrghdtrjgdmhrfcsnwwwdpvjtpzdqfgrlmrqscjbfgdbgvflhvdjmnmslvsbcbgwplgqljmlzpgrfjwmvqfwmwrhnmdjhdwgjrngvccrbzmhcqthvvtdtmfqvfczhqbfgzgrmdtprznfzjtrcwqgztchtdmzmnwbfbnbttbvzsflcpsjshgphfdlvhdrcpsqnhjjggbnsqrfpwsdznzcwjbcswwndzbpdnfcbdrfgrmqzvtjttltbntznmqfsmqlgqvlqnrvgrnggslqhbplmgpzwlfzbvwdvrchsnhrnvgmzjdprvvspltcdzmdnlgtmrwnwpdndpdqjltcnmsggrvbprslqhfgmzqtppdpsjcmmbvfgmbpdnwdcgnssfgjhzhrjljdwhrzznscndgbscdmbbtbrnzbqzvcjgjgljbjlrrvdhjdllsnjzhwlmjslghrqplwjwssbzzpdzdfhhsqctlcddnfnnvbcwpdvzdcsgcqpctsjtdtnzpggpzsrrhfjtthqcqhtvwzltbdvdnbgwlppblwzjsqqbcpcrthhrhdnzhdnflqlvbzmcjfcrbmgdgqptfqfbmlfbblqdfmnwgvbdhmcmtmvtggqstjpwhvzjhbgpblmdrnggvrvphbglqgfcphmrgfmrwcdchtwfllqwsnbqttwdcvrwgzjfztmcffppqtmnwpgcrgwtjbdtjlmnpmvlzndljglzblwdrggqvbbfvqcbcbpqttrmqlcqnqvrfqsnlpmwlcgfwfcqpgmszfccbqtcqfwlwqrjjhrdbjqvdmfzjgncjqgqbthpgjgbfdvltbhpnbjqqwrsczrthfhmlzjjjgsjtsvgmwfsjngzfqdqzfhvwjrswvnqvsvvsjdbwlwdcsszdngmmhnnqsgvsrvpnndghrwgzztqczvhcrzdpqtrmrnfsfrlpdnbbtshfhplzqvdvzdvwhwsbpnbzlvcbgptdszjlcgfdzchjcsvhzdljvgpwstzwnssvhztcptnhslggnrschvfnmhcnjvldthtfpqzdvltfgnmtgvlrljhwqdzqfmfblstvfnpfcdsqslrqbztrbfzmsfjtjwhlzfnhrvpfqfqvtdllrvchmqphgljwcspgpwsdwqfdhsqhsflpbcbjjmjrfjrqrqfqcqzqsqcnqhfgsclfnfzblfdhphrvqdpvcqmllrcdnrlwqbrgqsbfqqllcvmglntjwcsjljgntmmldscndfdjcqpwbqpbmfjsgwfwcqbqbbhhgprlbzmvdfjcsmsqvhfhmgrhnwpslztmwbhdgrfzfcmwjswpbpzwstfbfmgwtprmptzjwtrqthrqwgslnmtlfgnvgpwvsfwthtrgwfbnnnwmdcfrpqqztplscvfnfpfwwdnfnzjccnhswwlcrrdqfhvsrnvcdrwmjswzggscplggbwgndsbntqvtrjbmbzrnbbmdjvwrmmtrmfjjhnvrcjcbqlhlthbvtjjczddblbbttmmzgdqmtdqswjdwbjhsrjbvdtqzqdbhhgbttgmgwfgfpczpqpfsddgslltwsvngwbwfbfcdzlqghwdbfzzldjpwpmpjmslwnwbrjjvwcsjgdzjwrrwnvgvrqlgjhwvrgnczspfplhfbtdpbpfqmhbvmcqdgrrjfslzgsqfpwrrrmjdtgbslddwvddrbmrdsdhhnlwsncrmnglrrpvtbrfvjbdmcpgphcdfwnfcglvmlbslttpmjnspqhnmbcqgmncfjjpdfjqhggnswbgppjhllscrvtmtmmbwbpgddtzblscntrmccdpzdnllqpvfdpfpwwvnnbjlzphvqwffwsjmbtllctrjmllwscmldcdrpfrzrqlpwbjwfgmnshzqzgdjqhcwtsqlsjffvzcpnrzmvtlzlgwvrrjtdbcnddbhjgqqzrvhplrbsrwgscjnfmhbcnpdcjqrltgdzzzzbqtsspbcdssbjrzfqdgvhmgdzsjdsqcfwbgrnhrlzgpjmhctqdccmvqzddmcptsjgtfshprqmslvtmtrprfsngrnnpnrccrvnrvcwzrbbnbghlwvcncgzglnqthchhsnzlfrcggdptvwlrbnfwgjpflgrcfzhhgffwcbhwlsdmvmsvvzvdcrlvlnstgz

1047
data/day_7.txt Normal file

File diff suppressed because it is too large Load Diff

99
data/day_8.txt Normal file
View File

@@ -0,0 +1,99 @@
222322213033345255533423306545562424165440655115256171674620442636621123532003623343351021112300040
110200134424131544435511513034235114207220346712122743100173142606016164253614600344452542043234001
130241122341034230060506400411050451436457131115555076655121366640166143420114243260041315245140033
044201155341204150154421223651421072455456424262034065175730703125367662022422056423113110423033043
341242043015141323013444355403421162464354167412604633147554242145501111651130260045523542142405124
104105335542011255154624541673170452421201174751065233125053535203606402110631631303264231443334523
022251232401442443240604013073567051751261046006060310057162723056356047312301014332262320405344224
005045010303234050011604134516553223421500156708426287011206217044163376565240420066564035322425031
433400302252163605112001002152533254526577025774185772532522645162112005222006334211222615202150023
514421532420126245053363421750507267400406222575606338538284336516406721212651434025136363121253314
145500111514555142462447264776571468434327564631361615475570716477174343523375640422633224154214330
450422253465464405163267335560338812657620448402661157163042574016476542116027110002556401004144041
315250435323412100266435752414460614818523238015312045767348145251346503446110002404643412031033110
335554260614516260275514014501773808684115234652573523444781127146772327147027164546041361322264113
552212024666234517403145053462886425015423537515312180012163268455035077313422213613314122403623422
554116462330326333717726071743410713076038127356572547895446465004382875747801510560161030046236534
105512113261674505476760210308840028176731611387575863387841328453867641286570312570624613101433450
201620055416403673411402684861111672134437556816818962692824522386258176417471541216750515352320263
100064152502471121126620147804267474177133917793419871348867649139837456117360472552512240365464543
434125501030234366461354647212882961264276372277577656415297827484543874788435871670574372006541656
354231632241763433421115602887827646148345796776349994375746935256394267608007744846602344220506426
320055542235452511286776246551436249838211357522914296165427513242286591157867047217062671166212220
630533311432024274286282747578525892839185272964722232382686773975896514921876068064231003115130640
054351445323650230374860016787334957865672953893647532392634515193476444753234751431776670673443625
122161643553043361465661234215425777375428328842756826885237348622679574815841302214422454334622455
310361643547534388254741787957515835394388424384634948237897787328779899668951118145613227272341123
553203043313014483116602739588328966436465926583287463393949837268357287783771610187112515346661056
361112773030626240167311193287631239264325599932928434546936456455966294955629721437363071113555100
223116444062065127823414995768335224963787626949338374537976548374532595386885887817322311512135354
165533456256685465133638322212456677839479985883969576788652889447966945526287513125252251227266360
050427105764654780569971719539982722683736488643647867988885285677254929533615456260111805471544762
612564200420147420768231643572583337363778975687346456978779493453467879471982875321111751612056704
154715031561015145153929571787325853755436888933888338496548994492842954225615713257348715562770051
042706406641878154761493925944579827297695668447479695968796749364665547438536956376866503052450261
111103621158778860687333696596964667768654674764978799646936368489433243322422814121081720104310375
256106134082036385674358835842774753667963458466356667369999749769462758256568366264544861030650514
412372400235780556155749924663448584664436986744984487994753564686643982758245295828805442657020150
316402420685442228837832744963276587378457659649458546869353576749393683736838444639170007152747441
343664452531110164851537867349623666557879764884856546986489797534353938689749649842383748067621444
004444326256452015911854963372679986857738459895764946977798848396957278774226377383181551011246332
324213275444575144439872496886847394968576968689979497664689986774356463883323582931740408774664723
167274127524542565635816457474433733785665667989859545577574597555588393452438866921746374545730347
312523103467383946589439238265777486435445747964954446957896799994745579737227145455742444466763354
042101230038108485461717949225836749699798599445858954785786668636987937236256346361252208168136312
447311762287744692475573737395565466544999496459956989976897778946499374824747773197595161266172226
371671376376358926187663595697867739555794587855655786889854499686796363666939989643254552166201754
305514713774776948141752365256767736786987588655596589796495868756859657723267975757697551713050730
505672367783107579727693596546487757757799568755578685859899884563658799498726941257953878711714017
457520154136801497456138426564536866785654498777579675857476597474753988679778543462582232418154231
050570576377124118562748278969974597659546757999795788577798949457569458597349739399679324147816176
064032506374261599382993468784374444687579995969557585785777758755334674823733669516557164016427124
346565566106489839877287435227877647875697657779798687889989777455747976752522588271842557284604304
320630184267887846149779595575797453867985966985895787576699496556963977669453525683498188461017663
155470636481748966932554775295985386984477788779777769886686888674939686949557211549684318562843364
355422032736165249425585822655654853976657576675655856568867858693534395443986997713966364825241516
014307615355116598362643769888978393745848466775686878856446548776874844332797955528420388441472072
434677415171655145937867232795798374659889895676897986696777754584999873398343952258322518308312370
614462625176544968398772979677993886597595888444699849445968855456666794598363878647397472370611124
342426038105820512291673236242588648634466744646845777477557645589764482986857645122398666420720742
303446222610437533389493227477389695959868644577787974876888684975836425953723362621837202318302515
101334031274541867475755424764549646588488959767847459756867963388465874367294735519312864601156672
311162646802122687272848655359448638774475595989694889897479694563583798875942767189780830474311553
670525052313105734222877229995545497896735689799858955459867784679684938565425586596166033035473164
625002126405824409197545328243248943664786877896564684896757759666544465836966863943043883874535107
304504507410725215339562444778866968394554865956559998446945777964348595952748915112623570510705144
447671532535258771129625534992686968475466769559485845995386695599378847572918425825332176641466062
022123400381035622672492659655854245887594385374756573547685957733982636227675215225616456802746606
143231134353837650051751146983252488977634698367786398395985875992826958228379769214124442703715262
135170610171160182526139534726928582959959837673658879565485535346824864319872955144130017452466064
102646524660025304032183156274795333553888848798733487439766887562335538983732625811202053035706412
105313211023023674376715267861525696823925879646687867997695888347896781494452164804031634615425042
256205106513734680231582333362957987973927998375834773457684994689349817858524813244430142704015520
021404347726028733646641268434424287525532769279452643745555528837589599615841240070086220361652546
224024214320367157758819746327682985953929797339659337579259325447482167689237531580534124157434533
432614136036164731080370551893833148799729789672732794952993828437433612152513202747342230044776363
314003554513122735473322134512738781597463362529856243299295546734985494922406881657630707442021510
514504073756450312710340856355119778239528232648473554453443349559599228483527304806846455610024545
424156167665132531871223763346631626522767446256444526857773846279396461782420177025261412610600431
440544203354025350033001226782826234581598745799586998494951719551921447963680834604761003456033433
030261134056327505538138763401733512835785873969133667323138843188738957384853306401550446745105426
524041041607103210643621736677777415881386586134322795167285489925353353273682055677320161701632002
532513043015722226170325461521708421659348265984277116386737884679183833325305770247107056515000632
450631113064541102213228045638208741315429696459599317816954821479256672633762880514531576001505104
214165164302237003505054233882824157688219632493411326562973319962407073638136757124756516600661503
304465104303261562212345808766401574871933592693641614758134144886301815682807153126027453244204015
135203445204521251600013125103586202465438696331861292616228156657585723603452536740112103314030555
514516400551406327564011243567833388064737417461387480870726483204868682076024701011125332602254113
421341053633214625706123464303687686511262673301412775315212752511877023033424215721261615303053012
022044105062611536144720566574153723272833357078078000286705430350220142407371067103103416226230555
410213236064223263635201443404636873030520630316216081306535811175741246467466645353201136163050545
303520211553166661506232367472736401455544832872162057805076267517121166516261355403030034621243454
203254222143353045650002244735005340271145025041572764542706827413452562704066262265323455430133504
441232355335366123446141420412727113134404853821274587121188823260264625415453362560311464455210441
414115054424201303442043777071262633223473236654360080370734624214365605172654033011620153152523134
412115334452334460565220356727405160520263276133202400177553665136056247040612461135000421154322204
041335455114425155032554320512112112454416721273507036712353407602170012763156424133043141034050241
030023102524414043125455041405115606664661260240725146305660271437703406461522205621551001134541002
404443532404034526430106366644217325436253634242603222554235163606432511155652343363021250505540430
324114252001344342204144440320420641222766650735522654115551234652234245431600152550532022520100132

2000
data/day_9.txt Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -13,7 +13,8 @@ cals_per_elf() {
((tmp+=i))
done
cals+=("$tmp")
utils.qsort "${cals[@]}"
utils.timsort cals
echo "${cals[@]}"
}
p1() {

53
src/day_10.jl Normal file
View File

@@ -0,0 +1,53 @@
include(joinpath(readchomp(`git rev-parse --show-toplevel`), "aoc.jl"))
import .Aoc: @aoc
function p1(input::Vector{String})
x = 1
cycles = []
for i in input
if i == "noop"
push!(cycles, x)
else
num = parse(Int, split(i)[2])
push!(cycles, x)
push!(cycles, x)
x += num
end
end
sum = 0
for i in 20:40:220
sum += cycles[i] * i
end
sum
end
function p2(input::Vector{String})
x = 1
cycles = []
for i in input
if i == "noop"
push!(cycles, x)
else
num = parse(Int, split(i)[2])
push!(cycles, x)
push!(cycles, x)
x += num
end
end
cycle = 0
while cycle < length(cycles)
x = cycles[cycle+1]
if abs(x - (cycle%40)) < 2
print("#")
else
print(".")
end
cycle+=1
if cycle % 40 == 0
print("\n")
end
end
end
@aoc(2022, 10)

94
src/day_11.jl Normal file
View File

@@ -0,0 +1,94 @@
include(joinpath(readchomp(`git rev-parse --show-toplevel`), "aoc.jl"))
import .Aoc: @aoc
function parse_monkeys(input::Vector{String})
curr_monkey = -1
monkeys = Dict()
ops = Dict()
tests = Dict()
conditions = Dict()
for i in input
line = strip(i)
if line == ""
continue
end
if line[1:6] == "Monkey"
curr_monkey += 1
continue
end
if line[1:8] == "Starting"
items = split(line, ':')[2]
items = split(items, ',')
items = map((x) -> parse(Int, strip(x)), items)
monkeys[curr_monkey] = items
continue
end
if line[1:9] == "Operation"
op = strip(split(line, '=')[2])
op = split(op)
ops[curr_monkey] = op
continue
end
if line[1:4] == "Test"
div_by = parse(Int, split(line)[end])
tests[curr_monkey] = [div_by]
continue
end
if line[1:2] == "If"
to = parse(Int, split(line)[end])
push!(tests[curr_monkey], to)
continue
end
end
(monkeys, ops, tests, conditions)
end
function run(turns, monkeys, ops, tests, conditions, worry_level_fn)
inspects = Dict()
for turn in 1:turns
for m in 0:length(keys(monkeys))-1
while length(monkeys[m]) > 0
if haskey(inspects, m)
inspects[m] += 1
else
inspects[m] = 1
end
wl = popfirst!(monkeys[m])
op = ops[m]
operand1 = op[1] == "old" ? wl : parse(Int, op[1])
operand2 = op[3] == "old" ? wl : parse(Int, op[3])
operator = op[2]
wl = eval(Meta.parse("$operand1 $operator $operand2"))
wl = worry_level_fn(wl)
if wl % tests[m][1] == 0
push!(monkeys[tests[m][2]], wl)
else
push!(monkeys[tests[m][3]], wl)
end
end
end
end
inspects
end
function p1(input::Vector{String})
monkeys, ops, tests, conditions = parse_monkeys(input)
inspections = run(20, monkeys, ops, tests, conditions, x -> x % 3)
res = sort(collect(values(inspections)))[end-1:end]
res[1] * res[2]
end
function p2(input::Vector{String})
monkeys, ops, tests, conditions = parse_monkeys(input)
lcm = 1
for i in values(tests)
lcm *= i[1]
end
inspections = run(10000, monkeys, ops, tests, conditions, x -> x % lcm)
res = sort(collect(values(inspections)))[end-1:end]
res[1] * res[2]
end
@aoc(2022, 11)

47
src/day_12.jl Normal file
View File

@@ -0,0 +1,47 @@
include(joinpath(readchomp(`git rev-parse --show-toplevel`), "aoc.jl"))
import .Aoc: @aoc
using Graphs
directions = [(1, 0), (-1, 0), (0, 1), (0, -1)]
function build_graph(input::Vector{String})
grid = hcat(collect.(input)...)
start = findfirst(==('S'), grid)
dest = findfirst(==('E'), grid)
grid[start] = 'a'
grid[dest] = 'z'
grid = map(x -> x - 'a', grid)
graph = SimpleDiGraph(length(grid))
for (i, h) in enumerate(grid)
ic = CartesianIndices(grid)[i]
neighs = map(x -> ic + CartesianIndex(x), directions)
for d in filter(x -> checkbounds(Bool, grid, x), neighs)
if grid[d] <= h+1
add_edge!(graph, i, LinearIndices(grid)[d])
end
end
end
(start, dest, grid, graph)
end
function p1(input::Vector{String})
start, dest, grid, graph = build_graph(input)
solution = dijkstra_shortest_paths(graph, LinearIndices(grid)[start])
solution.dists[LinearIndices(grid)[dest]]
end
function p2(input::Vector{String})
start, dest, grid, graph = build_graph(input)
sources = findall(==(0), grid)
solution = dijkstra_shortest_paths(graph, map(x -> LinearIndices(grid)[x], sources))
solution.dists[LinearIndices(grid)[dest]]
end
@aoc(2022, 12)

36
src/day_2.jl Normal file
View File

@@ -0,0 +1,36 @@
include(joinpath(readchomp(`git rev-parse --show-toplevel`), "aoc.jl"))
import .Aoc: @aoc
win_conditions = Dict(
"A X" => 3,
"A Y" => 6,
"A Z" => 0,
"B X" => 0,
"B Y" => 3,
"B Z" => 6,
"C X" => 6,
"C Y" => 0,
"C Z" => 3,
)
should_play = Dict(
"A X" => 'Z',
"A Y" => 'X',
"A Z" => 'Y',
"B X" => 'X',
"B Y" => 'Y',
"B Z" => 'Z',
"C X" => 'Y',
"C Y" => 'Z',
"C Z" => 'X',
)
score_table = Dict('X' => 1, 'Y' => 2, 'Z' => 3)
function p1(input::Vector{String})
sum([ win_conditions[i] + score_table[i[3]] for i in input ])
end
function p2(input::Vector{String})
sum([ win_conditions[i] + score_table[i[3]] for i in map((x) -> x[1:2] * should_play[x], input) ])
end
@aoc(2022, 2)

54
src/day_2.sh Normal file
View File

@@ -0,0 +1,54 @@
#!/usr/bin/env bash
unset PATH
BASE='.*';until [[ "$(eval "echo $BASE")" =~ \.git ]]; do BASE="../$BASE"; done;BASE="${BASE/'*'}"
source "$BASE/utils.sh"
INPUT="$(<"$BASE/data/day_2.txt")"
declare -A COMBINATION_TO_POINTS=(
['A X']=3
['A Y']=6
['A Z']=0
['B X']=0
['B Y']=3
['B Z']=6
['C X']=6
['C Y']=0
['C Z']=3
)
declare -A SHOULD_PLAY=(
['A X']=Z
['A Y']=X
['A Z']=Y
['B X']=X
['B Y']=Y
['B Z']=Z
['C X']=Y
['C Y']=Z
['C Z']=X
)
declare -A SCORES=([X]=1 [Y]=2 [Z]=3)
p1() {
mapfile -t scores <<< "$(
while read -r i; do
echo $(( COMBINATION_TO_POINTS[$i] + SCORES[${i:2}] ))
done <<< "$1"
)"
utils.sum "${scores[@]}"
}
p2() {
mapfile -t scores <<< "$(
while read -r i; do
i="${i::1} ${SHOULD_PLAY["$i"]}"
echo $(( COMBINATION_TO_POINTS[$i] + SCORES[${i:2}] ))
done <<< "$1"
)"
utils.sum "${scores[@]}"
}
p1 "$INPUT"
p2 "$INPUT"

14
src/day_3.jl Normal file
View File

@@ -0,0 +1,14 @@
include(joinpath(readchomp(`git rev-parse --show-toplevel`), "aoc.jl"))
import .Aoc: @aoc
priority = ['a':'z'; 'A':'Z']
function p1(input::Vector{String})
sum([ findfirst(==(intersect(i[begin:sizeof(i)÷2], i[sizeof(i)÷2+1:end])[1]), priority) for i in input ])
end
function p2(input::Vector{String})
sum([ findfirst(==(foldl(intersect, input[i:i+2])[1]), priority) for i in 1:3:length(input) ])
end
@aoc(2022, 3)

18
src/day_4.jl Normal file
View File

@@ -0,0 +1,18 @@
include(joinpath(readchomp(`git rev-parse --show-toplevel`), "aoc.jl"))
import .Aoc: @aoc
function assignment_pairs(λ, line)
a, b = split(line, ',')
s1,e1,s2,e2 = parse.(Int,[split(a, '-'); split(b, '-')])
λ(s1:e1, s2:e2)
end
function p1(input::Vector{String})
count(map((x) -> assignment_pairs((a, b) -> (a b || b a), x), input))
end
function p2(input::Vector{String})
count(map((x) -> assignment_pairs((a, b) -> length(intersect(a, b)) > 0, x), input))
end
@aoc(2022, 4)

39
src/day_5.jl Normal file
View File

@@ -0,0 +1,39 @@
include(joinpath(readchomp(`git rev-parse --show-toplevel`), "aoc.jl"))
import .Aoc: @aoc
function parse_input(input)
separator = findfirst(==(""), input)
num_stacks = length(unique(input[separator-1])) - 1
stacks = [ [] for _ in 1:num_stacks ]
instructions = [ parse.(Int, [ i.match for i in eachmatch(r"\d+", instr)]) for instr in input[separator+1:end] ]
for i in separator-2:-1:1
line = input[i]
while true
col = findlast(isletter, line)
(col == nothing) && break
index = Int(round(col/4, RoundUp))
push!(stacks[index], line[col])
line = line[begin:col-2]
end
end
(stacks, instructions)
end
function solve(λ, input)
stacks, instructions = parse_input(input)
for (c,f,t) in instructions
append!(stacks[t],λ([pop!(stacks[f]) for _ in 1:c ]))
end
join(map(pop!, stacks))
end
function p1(input::Vector{String})
solve((x) -> x, input)
end
function p2(input::Vector{String})
solve(reverse, input)
end
@aoc(2022, 5)

24
src/day_6.jl Normal file
View File

@@ -0,0 +1,24 @@
include(joinpath(readchomp(`git rev-parse --show-toplevel`), "aoc.jl"))
import .Aoc: @aoc
function sliding(in, w::Int64; step::Int = 1)
((@view in[i:i+w-1]) for i in 1:step:length(in)-w+1)
end
function find_packet_start(buffer, len)
counter = 0
for window in sliding(buffer, len)
length(unique(window)) == len && (return counter + len)
counter += 1
end
end
function p1(input::Vector{String})
find_packet_start(input[begin], 4)
end
function p2(input::Vector{String})
find_packet_start(input[begin], 14)
end
@aoc(2022, 6)

65
src/day_7.jl Normal file
View File

@@ -0,0 +1,65 @@
include(joinpath(readchomp(`git rev-parse --show-toplevel`), "aoc.jl"))
import .Aoc: @aoc
function size_of_dir(dirs::Dict{String, Int}, subdirs::Dict{String, Array{String}}, dir::String)
size = dirs[dir]
for sub in subdirs[dir]
sub in keys(dirs) && (size += size_of_dir(dirs, subdirs, sub))
end
size
end
function join_path(s1, s2)
s2 == ".." ? join(split(s1, '/')[begin:end-1], '/') : s1 * '/' * s2
end
function build_dirs(input::Vector{String})
dirs = Dict{String, Int}()
subdirs = Dict{String, Array{String}}()
pwd = ""
for i in input
if i[1] == '$'
cmd = split(i[3:end])
if cmd[1] == "cd"
pwd = cmd[2] == "/" ? "/" : join_path(pwd, cmd[2])
if pwd keys(dirs)
dirs[pwd] = 0
subdirs[pwd] = []
end
end
else
size, name = split(i)
if size == "dir"
push!(subdirs[pwd], join_path(pwd, name))
else
dirs[pwd] += parse(Int, size)
end
end
end
(dirs, subdirs)
end
function p1(input::Vector{String})
dirs, subdirs = build_dirs(input)
total = 0
for dir in keys(dirs)
size = size_of_dir(dirs, subdirs, dir)
size <= 100000 && (total+=size)
end
total
end
function p2(input::Vector{String})
dirs, subdirs = build_dirs(input)
free = 70000000 - size_of_dir(dirs, subdirs, "/")
res = 0
for dir in keys(dirs)
size = size_of_dir(dirs, subdirs, dir)
(free + size >= 30000000) && (res == 0 || res > size) && (res=size)
end
res
end
@aoc(2022, 7)

69
src/day_8.jl Normal file
View File

@@ -0,0 +1,69 @@
include(joinpath(readchomp(`git rev-parse --show-toplevel`), "aoc.jl"))
import .Aoc: @aoc
directions() = [[-1, 0], [1, 0], [0, -1], [0, 1]]
parse_grid(input::Vector{String}) = [ parse.(Int, collect(i)) for i in input]
function visible()
end
function p1(input::Vector{String})
grid = parse_grid(input)
xlen = length(grid)
ylen = length(grid[1])
visible = 0
for x in 1:xlen, y in 1:ylen
if (x == 1 || x == xlen || y == 1 || y == ylen)
visible += 1
continue
end
curr = grid[x][y]
tops = map((x) -> x[y], grid[begin:x-1])
btms = map((x) -> x[y], grid[x+1:end])
lefts = grid[x][begin:y-1]
rights = grid[x][y+1:end]
if curr > maximum(tops)
visible += 1
continue
elseif curr > maximum(btms)
visible += 1
continue
elseif curr > maximum(lefts)
visible += 1
continue
elseif curr > maximum(rights)
visible += 1
continue
end
end
visible
end
function p2(input::Vector{String})
grid = parse_grid(input)
xlen = length(grid)
ylen = length(grid[1])
res = 0
for x in 1:xlen, y in 1:ylen
tmp = 1
for (i, j) in directions()
curr = 0
dx = x + i
dy = y + j
while 0 < dx <= xlen && 0 < dy <= ylen
curr += 1
(grid[dx][dy] >= grid[x][y]) && (break)
dx += i
dy += j
end
tmp*=curr
end
res = max(res, tmp)
end
res
end
@aoc(2022, 8)

58
src/day_9.jl Normal file
View File

@@ -0,0 +1,58 @@
include(joinpath(readchomp(`git rev-parse --show-toplevel`), "aoc.jl"))
import .Aoc: @aoc
offsets = Dict('L' => (-1, 0), 'R' => (1, 0), 'U' => (0, 1), 'D' => (0, -1))
function p1(input::Vector{String})
headx, heady = (0,0)
tailx, taily = (0,0)
map = Dict((0,0) => true)
for i in input
x, y = offsets[i[1]]
for _ in 1:parse(Int, split(i)[2])
headx += x
heady += y
while max(abs(tailx - headx), abs(taily - heady)) > 1
if abs(tailx - headx) > 0
tailx += headx > tailx ? 1 : -1
end
if abs(taily - heady) > 0
taily += heady > taily ? 1 : -1
end
map[(tailx, taily)] = true
end
end
end
length(keys(map))
end
function p2(input::Vector{String})
rope = [ [0, 0] for _ in 1:10 ]
map = Dict((0,0) => true)
for i in input
x, y = offsets[i[1]]
for _ in 1:parse(Int, split(i)[2])
head = rope[1]
rope[1] = [head[1] + x, head[2] + y]
for ri in 2:10
prevx, prevy = rope[ri-1]
currx, curry = rope[ri]
while max(abs(currx - prevx), abs(curry - prevy)) > 1
if abs(currx - prevx) > 0
currx += prevx > currx ? 1 : -1
end
if abs(curry - prevy) > 0
curry += prevy > curry ? 1 : -1
end
end
rope[ri] = [currx, curry]
end
last = rope[end]
map[(last[1], last[2])] = true
end
end
length(keys(map))
end
@aoc(2022, 9)

View File

@@ -3,10 +3,11 @@
_int.insertion_sort() {
local -n _int_isort_arr="$1"
local left="$2" right="$3"
local i=0 j=0
for (( i=left+1; i<=right; i+=1 )) do
local value="${_int_isort_arr["$i"]}" j=$((i-1))
while (( j>=left && "${_int_isort_arr["$j"]}" > value )); do
while (( j>=left && _int_isort_arr[j] > value )); do
_int_isort_arr[$((j+1))]="${_int_isort_arr["$j"]}"
((j-=1))
done
@@ -52,20 +53,33 @@ _int.merge() {
((j+=1))
done
}
_int.min_run() {
local len="$1" r=0
while (( len >= 32 )); do
r=$((r | (len & 1)))
len=$((len >> 1))
done
echo $((len + r))
}
utils.timsort() {
local -n _utils_timsort_arr="$1"
local len="${#_utils_timsort_arr[@]}"
local min_run="$(_int.min_run "$len")"
local i=0 j=0 size=0 left=0 mid=0 right=0
for (( i=0; i < len; i+=32 )); do
_int.insertion_sort _utils_timsort_arr "$i" "$(utils.min2 "$((i+32-1))" "$((len-1))")"
for (( i=0; i < len; i+=min_run )); do
_int.insertion_sort _utils_timsort_arr "$i" "$(utils.min2 "$((i+min_run-1))" "$((len-1))")"
done
for (( size=32; size < len; size=2*size )); do
for (( size=min_run; size < len; size*=2 )); do
for (( left=0; left < len; left+=2*size )); do
local mid="$((left+size-1))"
local right="$(utils.min2 "$((left+2*size-1))" "$((len-1))")"
(( mid < right )) && _int.merge _utils_timsort_arr "$left" "$mid" "$right"
mid=$((left+size-1))
right=$(utils.min2 "$((left+2*size-1))" "$((len-1))")
if (( mid < right )); then
_int.merge _utils_timsort_arr "$left" "$mid" "$right"
fi
done
done
}