Initial commit

This commit is contained in:
2023-07-07 00:47:08 -04:00
commit 6f916c29d1
43 changed files with 13417 additions and 0 deletions

2255
2022/day1 Normal file

File diff suppressed because it is too large Load Diff

25
2022/day1.py Executable file
View File

@ -0,0 +1,25 @@
#!/usr/bin/env python3
def main():
with open('day1', 'r') as file:
lines = file.readlines()
list_calories = []
current_calories = 0
max_calories = 0
for line in lines:
if line == '\n':
list_calories.append(current_calories)
if current_calories > max_calories:
max_calories = current_calories
current_calories = 0
continue
current_calories += int(line)
list_calories = sorted(list_calories, reverse=True)
top_three = sum(list_calories[:3])
print(list_calories[0])
print(top_three)
if __name__ == '__main__':
main()

2500
2022/day2 Normal file

File diff suppressed because it is too large Load Diff

88
2022/day2.py Executable file
View File

@ -0,0 +1,88 @@
#!/usr/bin/env python3
def compute_result_one(opp, my_play):
match opp:
case 'A':
match my_play:
case 'X':
result = 3
case 'Y':
result = 6
case 'Z':
result = 0
case 'B':
match my_play:
case 'X':
result = 0
case 'Y':
result = 3
case 'Z':
result = 6
case 'C':
match my_play:
case 'X':
result = 6
case 'Y':
result = 0
case 'Z':
result = 3
return result
def compute_result_two(opp, my_play):
match opp:
case 'A':
match my_play:
case 'X':
result = 3
case 'Y':
result = 4
case 'Z':
result = 8
case 'B':
match my_play:
case 'X':
result = 1
case 'Y':
result = 5
case 'Z':
result = 9
case 'C':
match my_play:
case 'X':
result = 2
case 'Y':
result = 6
case 'Z':
result = 7
return result
def main():
me = {
'X': 1, # Rock
'Y': 2, # Paper
'Z': 3 # Scissors
}
score = 0
with open('day2', 'r') as file:
lines = file.readlines()
for line in lines:
opp, my_play = line.split()
score += me[my_play]
result = compute_result_one(opp, my_play)
score += result
print(score)
score = 0
with open('day2', 'r') as file:
lines = file.readlines()
for line in lines:
opp, my_play = line.split()
result = compute_result_two(opp, my_play)
score += result
print(score)
if __name__ == '__main__':
main()

300
2022/day3 Normal file
View File

@ -0,0 +1,300 @@
NGvdqJmJvpNbGRMGQgRsfgfn
WlHTHShlLwSWjFRsncfbcwsgQc
BHtSBHWHSCWLZHlhjTHLLdbNNqNpzpDzNvDvtPmmPp
JJSShnTpDSJJlllfwBNVbMQWwhQhgQtt
cTzrvrHdLwwzttQNWB
qrFqTFvqZvrmsplsjlnDflnZ
mhhhVHvNNddHMwBqQwlWZZtv
fbjzjJllCtWjjrZtjq
CbgcgpPRDJfzVHFFnSnsSDlm
ZqBPqBQnPLmqZsFqhsvFsLZQMfSSMbbWddWbjbJSrgWgJf
NRHnlllcDwwCNClNtttHbNJrSJNfbdWMdfbWgdrJ
cHGlzTptHtCpncHnCpHpRGzDmvVhqLmvLPmPvLqPmzsqqmPB
rCzVtMMbMvCmmvGlclFQFfLpJFJfJpcLHPJL
nDGGwqGqnRTfpHLpRFpLFf
ZNdNTDsWgNZsZBndnGrzrlMrjgrmjVGjvC
MgFZHFTgqFFDZZDTdVdHrzQvLzCGwpCPrGLqQpzz
JsnmbjhmffJbRNJppzPPzwzzrwdv
lfblfthBRbBRjnjhBtBlZgdVcFSTVFDtSSWgMcdM
hPVhVhWPCMhlDTTWdrPlTcLjfbZbFNjZBbFNBbdBFbsB
MHSwMJpHnqJHwtqHGqGGmvqZsZFjBmsBNRBFfLbsFsZfsZ
pqtMHHQpvqnwMpgJMCChTQhVVlclPWrCCD
zRBBhZFwWZlBQpMZNNNJsfDpLsNsJppN
SvggPbjvVSvvtgGVPbbnSMcCLtMrDddssJdsLdfdCD
mTSmMgHjgmgGgqzTwZwBlBFzwB
WLzWZHWSZPFRVSPSPM
hmrvmGvfTCmhBGBqTfnmJFfdbQcwdMhMwRdbQMVQQcMhsQ
JGJJnrnnCmqBTJTrNBqBLDzHFLFDNgjZlWtDNZHL
bwbbnWwpbTwFHwRzzzmH
ZccjZjddjPVhJmrBQHHFQRHcWF
NVhWldsMjZZZLSnvSTGTgvMb
ccJbHpzccZJsNpJCmHHlBTgHnlTPmF
qvQGQfDVhhDfvVfVDSdDCbFnjmllPQjlbCmnFgjg
hSbtWRGvhdfDVdVRfvRNpsWsZLNMZzcswLZWMM
vlTdlBTMdtjcvLGmtb
SSgfSsJngCSSwNFgspHFNFFpjlbGjQbbQGLthLnWtmWWhjbm
SJsfqqgfNHwJfHgCpwzBZVMDBPMMRPTlqzBr
VHsVhtbRHRpVHBfBCJdNfGjggGJdqLGq
wSzSrrSMPDSDwzPjdqJjNwGdsLqGjj
MnrnQTnWZWWzWQDMvZhtHtshhHlHBcBBsvVt
DZbPqdTqGTZtRrzjFmZZtF
gjQwVvBVWgfghvgmcrBNFccHFRmHtF
QlgvWlfgVsQfdlqqjqPDbPlM
VcfLwwcMlpnfVDrDtrtvbjMtTM
mmgBgzSQmQdgHBFSLvvbDTJmTDvTJJDr
RWNBHHzWNSdSdzFgSLNWWfZGwfpcwWVnnfpCCWlV
GDZLtsJMFGLDPnbblJlNJNcJ
BBRgSwqwqRZhTVSqjVgRwCdQcmcPmdnPPnPnmjlrbmQj
RCqfVvhfCCShBCRfVCwztDGZMHpLWHftFptspF
dlZqlBfBSShZhvprbCJTDrJCJjJNDh
WGRwQwHsMVVGMsVGcRVtQWRVpNCjWNDbzbDNJnbnrCbprrNW
HgHRRVGGwLgLBPvgSp
QPlZSlZzVLLDwhDfBppf
bghGGhmqrspDcfbsbs
tTrdTgFddtnvmdgvtCTdGTTqFZjjQQPVZPSZSjlZhVVQjlRS
BgBFHnwwSTNHqSPN
GJmCbDdlbZGCLhsstNLsMZZZ
JGJpCCDvmlVDVldGJBVfBBRwRjnVWWBRfN
WTFWQgGQtTMqMCJJzDVDgCchhj
mNPBmPlPHrWmwmNLHmShcnJjhrnzJzdcdzdjJJ
SHssNRSmvPRmlsmLwwsmwLvpQptpQWMQbGFQFtfpFfZQ
DgpNLVjgNjjmzGPVRmfrZrctdTcrzfwzdfMc
bnbNqnbFNwMcMtMfwF
svCQHHhShnbCvHChsvHlLDVhJJLRJGNpgPJPjLLD
TmBzgTVVBgfbmTVfPmFRJcHctnHDLDDLJqqBGB
hwvlNCCvSphMwSvrlwCCrrDcfRlJDLRtGqcqHnqRqLGR
pMSSMMNCSwMjjWhwrrjShQNFmsPmPFWbbZzVfZsPPPZVmZ
sTTrWGCMggpVWhSBltWp
HNJdwLDzNcJnNLwJJPqpllqhBpqStjfwlfpj
PJHzDzFLtLccdLggvrGGmgvFssgG
FwCssBFRBlvbBVdQ
jPzjDpqNGqJzZGSNHppPclFvvdfVflblbJlmFfll
SDzDpSNqjZjjZFSrHrFZTTCMLsnTLnnnMhrLtLnn
ScWQvvSDddGrWVrG
fwhPFLpwTfTjrzwHdmmmGdgdsPsqdRmV
CHlFpTpwwCjwFjwjCBnrvQBZZcBSnZtvZl
vJvdWVNslWtJcDtDHrDf
GCnnMZpZnSZpvDqFtftfjfZqrh
TbGMSRCRvWbPNsWB
NNNdsRddGNdZZTCBtqbtBgtC
zhFHppHhzcgmzQhccjgmjhQTnvvBFtBnCBbbnTvtCCtntt
HpjmhfSjQwfzwHmcggfzjSLfVWPDsWMsMdWdDSMsGWPPllVN
WSvcSSwrGzFsznqPNNWqPqlllB
djVDdHdSPRqlntjN
LpZZgpLgLHTDHVpDSTsffvGwrcfffGwv
wGlbWGVvGlWlrvppbFMjQjsBjCsjmCzzQzNv
ZgfdJcfZhMNCgSBRCQRz
hcLDZPZdqZhJPhcTHJfPHVqlqtFWMrGGrpwVGVpWrV
dsngCgdssHDVsHdsFDvMDvmMmjTjDFTL
qZpSqptZZGWLTLSjlLHFzl
NZqqRpWqhQpNhqhpZRWBJQQssJbbCsdbHsCbgb
QdGBjjbHsBsBbBdGcwwTGrCRRrFcPPTC
ZDtvWfMDvWScSrpzPccCdr
hhZMgffDhZNvtDgHQsQQVQmBVVHNdV
LhQLrzVdVmqcjmTNzm
tHMZDJDZCDDtZMWwCJjcffqqfjRmqSRqcq
CpHpZZWWtWpWwBplZWmQbhVBVPhnPrhbLQPvvs
FFgFSmJmSgGpZzsmgGmbDlDzMQPDNPzRQRDjQQzV
CLwnwWBdrtthttTWBWdPnVvRVVVNMSVQPvVnnV
BTtdLthfhTrLdftCwqrddmGFcSfpGbsmFGHpmGFHHc
JFJnMZwQBqnJJBqZJqPqMFBlbmBHblWbrmlfbWgbvmWrgW
spCTjtVzsNDdsNdTsjVTtNzgHfmWWgHSSrgrbSbbhHbVHS
TfCdjjsjzLNsfTszcdqcQMnRMPPRnFRPQRFP
VvDgDqTDtTNWTWfNFWlW
pzPvdssRNQFQRNZF
CCpBpsrrccGvttgGqBDG
jmZrrjlCJqmCVFMPbFbBZPVp
dfLLfRMGTdHbssPLLPbFwL
QWWHHTRQdRRHRMhzWQfvddngqJqjjNgqqjlgvrtjJmtn
sGGwJdHDDTfWbTcRzbbz
BmjvdhNVlFBZmSZvFrWpfpcBrbzbWcbqpf
SLmSZLhNhMhwtLswPHGssd
mGhlPclTmhhlJRWlRTDPlJtTFMngBcLSBHHBHLHSwncFgLwB
jQVbjprjVfzbZQrzdGnHrrBLgSGwGFLHHg
zzZqjQjdvsRlGqThGJ
GSPQPvVmSwpVQGVlSQmWJRcFBpnFBcBWcJcJDc
rTTCLmhTTbZNqMNbhjfhmDzsFDWzsDnfcBWDDDzcFs
qmjhrhCtbMCZNhZMhNTZbLjvQdHdHGgwgdtQHlllQwlQgv
ggpCCgvjPTJWjBjWWJgCWCdVVHRZdLfZhqLdZRHZrf
GsstmNslzzzGlMnGMnVZRZrLpZqdhZHZrZHM
lNbDsbltmzpsmmmnnccBJTwPgWvvvTwPwFPS
FWbTRTdWGCnThqQVBQqJ
rrDMPrDcSrvtcJdLVhVHQMQVBQ
rNtNwrZtDNPmZStwvcvRlGFRlzCRlpmdpplbpb
gHrHrlFgjCrNDfCMTzwwLN
WhvTvvWnmQvpGWNNLzwWfNzW
vTnRZhnRRBhscBVpcBTvnsjFltPqggqHPHHjHrPcgrFg
VzfWRVsnNzWfsvpQPvvFbdVQpQ
SqCqqhLDTTCTTCDcSdbpPvdPFFvhMbdMvF
BCLBDCDGLlTClCSrglrGzWmrszzmHRJmfJfJpHNz
dwGBHGdwdcCMCBzzZJJssZFsBBgt
NRqbRbQhLQRLrQlTggFWlZtRlTvW
FbNDFDLqnmLmNbqbLQbhLNDpPcVHMSVMwCVHcPnVGccwjdcM
LdHtrrrHrLZrBVbQjtPnnsVb
TwfhhcTCTCpfJJwpTJwhDDPnbGsbFjlQnnQjFBFslsBQDl
pwJCThfRCMMMvhchhwHSmWLZHLNHMdrdZzPg
LbMQbHbHQLLMsWLvszvzvqCfqCCqss
ScWlpmplWrDzlzvznJ
RNNcZWhSZmdVdPwHbQQTTwNwjP
jFFFtHZjwmLNmnQCFL
sVbdsqcqHBHqrQrLPmWqQnmr
sfGJVVzJJsczczfsczBzzvdbTMTptlTZZgDSDtGlplZSlgHt
MgMQJdqqMDQJDggzTMgVplvffmctcCzmfjRlmmmjjR
HrGbGswnBBtRvccBlljB
HZPHRRGGshZHnnnwPnshnVZqMJJDdpQDVgDdVDWDpQ
whwQRQGHRVhWRRcLLJgLmL
jSnnzgBnpCZdCBjNmnNNJmllJTlccT
jPSzrzpzpCjgfZZrZCFpdwQDQVVPttGDtVqQVtHqth
mvnGFmvGhTcSCBcBpv
bwMRzbQLwBQRWSctCcTtLpss
JJgHZqRrbqDnmBjhDh
MVvvGrsbGtVsgTggHjSFHJBBBg
PPNpCpQPZppplttDNwZPBdfTFPPTSBWSFjjSTH
CpNwChQCzDDNZwhZlpwZpqrqsGGsmmctGbbbzcmMms
pjMbgCgdQjCgBjQQCncwcGGLDZvFtGLsZZFZtH
zPhhrVhVVSmqVqhmzPqvDtsLLHrFWFvGFGFsvt
SVPzVTzJNBfjDQbQTb
CRDjjRmmLhjRFFChmHDNLZzsZNnPZNzlnnsvlv
SSqcMwdrctQVtqTwSSgnvZnsZvnBZpcPsvlvbz
trMGSSVdQQqdGMtwwQCmRHHhmJFhsfJGfjHh
phJzrnJJwNNSJhSnwpwGGZzmvNfmmDvfcvcDfvbRPNcvvR
tWtgQBqsqdLFLmZvTRTfDZcb
ttssdgQqsHQtZFsqVdgdgdCBJGSphnljnJhjwrhnpJrrzJHl
srzpVWrWTptbrPpPPtcWpNhNNNdfhhDgDNvfBDNNds
jmnQHmLqlnSlGMjqnLLljRHqdNdgwHZBgfhZvBdNhDwBhhtZ
MjSlnLmMLnCGjlSQLVWCzbrcTpPtpFbFWr
ZnQRczHZsMSRZQcBRSZRscQwJbWFbbQwpWTjdFLJTJTWwd
PVmGqDlGhDPVNvqDmmqtqLbbpJfFJwpbdJpdbfdjwdbl
VGNCgGPgqVqhNvmNCNZnSsRLRsMzzgBRnHrS
ZgMMgJMhjmZrZgggmlTTbfwTfRfbRGwlGTDf
nPqQttNVPzSPnqpGDwDDbGfwbJ
dJvQzzJtdSPWSthhHMjgMvrHghsv
cMvwHCWcMnwWnScWVFzTqHpHFpVBFtFp
bbblgRDhtlGgRPFBRqFpmzVFBTFp
fPbtGJGhfDfDsPhQJDPbbnjjSWnwjdvQCnSSCnCSCM
NcgDtwghTLntgNtLrjfHSSFlSbCfprlL
ZGGMmdmVZVvsRQvMGRVVZCHPfpZSfZbFPlbPjCfH
RVRjvRzMQQJBVmzzgWgzTWTWhNcWzN
gsgBqdsWprWddpBghBpwwJzbLcvhCZmwZCFcJC
PRPtStHfwmJvzPmF
HnSHHRQDVFsVVgsgTWsG
QRQTRrDHSLSNzzZLzZ
dBmPwfwffWtWRtzdhhLzLzLzzLFN
BtWnWCCVBWtCBmRPqVmqmntjjlJHJslJQVsQjsbbHrjHDQ
TwwJrHSMnHGvWHMvvSqrrZbRrRqfqVNfbNRc
GjhstmPFFhlFtmmjQtlgVcZVfcgqqNRNpgRcbP
CzdCdFCtdzGWGJwWWHdW
zfSVfSpHVpCHSZLnsttDnvDvpcsqRc
rWzMGWFFPBFjqjDjFDFs
PbQQWbJPrQwPrrPBwrJCVzZZLZdLSLLmfZfHJd
gPDPLgsLNslNLHqlLqqjhjnwwjJbDjnjwTRnGD
tzdMdMddmcRMdtcFFGWnwWjFwjFhGbTG
mRMmttpVHNCNpNZN
mfCFGfDDFCDWtvvstjjJ
njnVnrggLlwVVqLpvHVpMpMsHVhhMW
QQPPPnjlPPSgwBrnNLcdFCNNGFbmbZFcZzFf
NzNHFNFnFrtgwwPchvGFFS
LsjdQCVsTsLCTTdMCJtQgPPqwhPgqScPGvSZ
jdLdVjJtCVjRCMpmpNfNNWHrNzDrNrHrmr
NmggPPrPbPmdCbcfCNLVRRWpWTWRVTpdVVWspW
qGhDzGqnwGQnJrjllJWttMRDFRtMVsTDTTZs
SrnHhGQlvLmSfbfc
DmdPCJMLlQdSjGCqjcGGccHH
zWtBwfsgvVnBfftWtnnpTmnTRhppHpTqpc
wzFtwZWmsVFzZtvPJSPbMFJFDJJJJd
wrPRRSJSWrTSRzRWrqlfCLlcBfBGDqrL
gVNQjgdVhdfqqhlDCBDs
NmjgbtmNtjNnjbPbvRJPbpwZwZSD
tNHGccGNthtSGmVjjVmrrVPqSB
fgDTwRwDFmLTFlspBBqjjBgqBssB
mLCZwZRMJMbtdWMtvd
TPzHPPgChjsgPdPTjQvZLvnpLQnvlRQn
GScFSzFWWrfGGMrVFMqGqmrBnplmwmnlZZlmnvvvLRnJLLvJ
qVSVFtFtFtSzrTNNDsHhhNTHht
NQqtqmqmNhvvclvhcljJ
CSCfMZSgWMvfWgrbjwcMJwrrrclr
CGSCZgSGZPRTSCWWDgGBRtnFRvqNRsLLzmsLzqpq
tWmtCZjnWZWCGjtnnmtcwFvvlgSDTDTvVwsVgCfT
LpLhpLdqbBMNsQPBQhpLvgFqllgfllvVvwTDTwlw
pNQBBdLbBPpPHLmGsRWjRZJzWZHc
WtjBSvBjWzTtzvDTjBfbbthsMNRNgCMQDgRcCcQwLRgCQgNc
HJmqnHqHpplVnlPdqGrpGQNLCgSwLMwFwFFCgnMLRw
SdJGpHVZmqpVVVdZVJGddsjvzzvZTsZvWTbvszWjWj
FhRhhLZgLZhCRWZBFFWRmGbvSgHqvvbPvHTPccVncb
wzSMpjJdwssdrdDfJJJsJSvpGVPqGpvVqTVqTnccnTvH
rwfMMdtDjNwjzDrjDDdtChRZWSWhmCWBSmLQRW
RWLNLWrhtrhWJmLnSStBBdVtBGVVBt
wQqnzjCFbflqpQlQFTDDGGsGDBZBSZMsDVfG
QvqCTwjjTqwbTqjznFzQvqjFJgmvgghJgPmgmvPNmNRJJNgN
qLqwhztjhqqDDzjZqqjPMmFmCnVDsmgbggggTMDC
WBhWJQrJcRmnFnWMTTCF
lvvJSlGSvBvJQBrcpSfwwLjLPjLfhptjwNtp
sbFjnZpPPGZLZzCRhqbJhJMCqMgS
vtNvFHBcNwNDHffvtfQMSMJVRMBMChVqSMCBJV
cQlvTffDlFWTlcfFTlHQNtzzGGWGdLsGWdrnzspjGdGr
LMQtlzlMQLLrztVfVdfqDdrhrhdd
JPJTHcvPTPTJGPZgbmvGPmcZhwRVdDBdSWfdRHSBfqBSVHqq
sJchPZGccmcbvcmgmPcCnnnnpzppQppspFjQntMl
qtQQtsMDqtPDGQltPHbsLFnMccRNcVLLrVNVwMVM
LCSdzZdBZmvzZTCBfJrwnWppFcWrFpdRnWpR
ThSgBZTLJmPHlgQHjPtq
mrwGPrVrbjbPVmwmbdTwbGfJMDJMgsqhhDjsqjJppfqt
SQnLnWnWHLSFCRnlQRnFhqfsDMJMppqDfcWgpDfD
NCSvLQnRSQFBLBzdgvTbbwPrzbPZ
FFjvvHZbHZnZpvFHZcFbgQVwgwQnJfQPVNQJGqSq
RWmCmdClRtTzVRwVfVQPNQgN
shwhzTsmlbhZDLbBHL
PpPHllshHDTlsprJrsPQpltzjVzjLNggZNznLNLnhNnnjL
qRBvSwqBdRqvmfvCRSSLjcnVcVmLgmnNZjmQVg
vdfbSfBWffMbQqQdtprtslHJsWDGHptt
pqQdFWlQZpGZpLpS
wnjwJhjvVgjwvwvsgwgtsRTtssGTtLrNtrSrHS
VDJVMGCCChjccDJDwgwVJvMBzBfzbzbDPPFBFBbffzbQqq
gBwwBZGhcfhnFjvrQjMhrjQQ
PPLJNdNldlNSRmzLSlpbHQvbvdMtjjbMtMtt
lqDJmlSmlmPzqNmzmVnvnBZDgvBWgcZTfD
HMqrwWqzWJqHzrjgGFNNtQFMFQnFBt
LddPLdVmchPSvmcvTZlvghLLFBDNDtFGDQpRnntnFDQnFPnB
SbSvZTSLSgqbCHJWzr
TGcjzjgtNqjttgNNTTjmGwLhfQQfDnDLDwSQWTSCvh
PHJRJJbBVMPRMJHbJRMPbwCQSSvfCDhVhvvwwvQLnW
ZJPMbHbJJJsdsJplRRRZsPJztrFrqtzGrgmcrprcmFjDgN
tlDpSbpwgbgtpddJppgJwJDtNQWGQlcGQGhlhnGGWcrcWWFr
MTZLqzjfFLqLjRfvqsQhNPGnhGGsnchW
LMCzjzMTTjjFRfZMBTCvRfLRDDbVVpSbSgwwwtSBSSDJgStg
ZLVTrJmJDHFtzSTlpc
wNhhNfhvwwvvfvPnsNPhglszqpcHcFbbFSzSzzCHzb
NWjPwgNgRHGWvhwWPfgfGwjMDQJdQLVLJLQVVLRdBRJrZr
CPRJCFJTqZfJlJRqssHJftCWQMnHHwMbbngMMrQMgMWwQn
BmzVVhvvcvDdWgwVrTnrMb
BjzvhjLLczzBjLchDLmLJtsCqFClTqsZCPtPTCjq
DbWjNCWQCRRNsDPpFGcjjcqFqFfm
PZdMSzSZTtZZqVmpqmmmTpgg
ZvZMzBztzvhvddPMQlNCQDbQLBLrsRRW
WzWFhHpWhvCpPpPLswMHswMMHLbgmH
NNZSZTVQNrTnqDqrrwtwwLstsMGMnbntGm
TBmQcrNqNSQVmrmQBPdpFFzhFlPzzCPF
nBgmSrjgmjtmrbjSFGLWtLVpFVQQVGFL
JlChvCzvqCqWffwFdFVQfPVPHPFGLV
JzvTThZcCCMcMMwJzlbjTjmnRgRTTBnWgbBn
rppjbbDpGnwrGprVCLLJZDzQqZzLNQqc
htflFBFmBBlWTTgsggtZHMQLCCCcHqHMfZczHq
gFdFTWgRhBmWWTFSGQbVnSSPnvndpv
qFSRRGGgTgThTQhcllCWCJCctWWhfJ
bvbdzNDMzHZNNHFHfJWWjljWNNfcnWtn
PdbPdPBHmsdbdbPdBHBdmdmsgrTqsGQRTwSpSFrqrRSFpRwp
pQJZZGQtChQtpWZQTTWhNtVdVWSLBrsLSVrLvrvrLdBd
lMHnzGRgPRMSMBLcvBSS
nglFzflzHRDGgzfzPgHRbTDQthbZbhhppNbbCqhb
jVrvrJjpZfZCCGctwhbhMRcM
BQQnFFTBdBndzssFsdTbRwDGTPGbcMbwtDgbcG
HnLtQQBLtWNrVpqjJvWN
dnVlsnJlMqnlNqJdnMRvDHBRvbBLHLpRSPPPRS
NcGGCthFwcFwmjCTGDSfPSSHSPfPtDHfbD
zNWNZGWNzQnWlJWVJn
tMGSBtRtvjFcGpQrQQQQrp
FffbJTJfPLNbTnJJmlVcQVfpQmlWVVfH
FTdJJdhNvZhMtRSh
pSTfMtMLSTPsPsBszP
jdlmlFHHhVdmVHFNFRnHzHQJsGZBJbbJDvsDRPBsrGrDrJ
VHnFjcdccjlmNVmnzmNVmCMggfqwtLLfSMwWtcWMSg

41
2022/day3.py Executable file
View File

@ -0,0 +1,41 @@
#!/usr/bin/env python3
from string import ascii_letters
priority = {letter:index+1 for index,letter in enumerate(ascii_letters)}
def main():
with open('day3', 'r') as file:
lines = file.readlines()
priorities = 0
for line in lines:
length_compartments = int(len(line) / 2)
first = line[:length_compartments]
second = line[length_compartments:]
for item in first:
if item in second:
priorities += priority[item]
break
print(priorities)
priorities = 0
for index, line in enumerate(lines):
mod_index = (index + 1) % 3
match mod_index:
case 1:
first = line
case 2:
second = line
case 0:
third = line
for item in first:
if (item in second) and (item in third):
priorities += priority[item]
break
print(priorities)
if __name__ == '__main__':
main()

1000
2022/day4 Normal file

File diff suppressed because it is too large Load Diff

76
2022/day4.py Executable file
View File

@ -0,0 +1,76 @@
#!/usr/bin/env python3
def part_one(lines):
pairs = 0
for line in lines:
first, second = line.split(',')
one, two = first.split('-')
three, four = second.split('-')
one = int(one)
two = int(two)
three = int(three)
four = int(four)
first_section_ids = []
for index in range(one, two+1):
index_space = str(index) + ' '
first_section_ids.append(index_space)
first_ids = ''.join(first_section_ids)
second_section_ids = []
for index in range(three, four+1):
index_space = str(index) + ' '
second_section_ids.append(index_space)
second_ids = ''.join(second_section_ids)
if len(first_ids) == 2 and not (one in range(three, four)):
continue
if len(second_ids) == 2 and not (three in range(one, two)):
continue
if (first_ids in second_ids) or (second_ids in first_ids):
pairs += 1
print(pairs)
def part_two(lines):
pairs = 0
for line in lines:
first, second = line.split(',')
one, two = first.split('-')
three, four = second.split('-')
one = int(one)
two = int(two)
three = int(three)
four = int(four)
first_section_ids = []
for index in range(one, two+1):
index_space = str(index) + ' '
first_section_ids.append(index_space)
second_section_ids = []
for index in range(three, four+1):
index_space = str(index) + ' '
second_section_ids.append(index_space)
for ids in first_section_ids:
if ids in second_section_ids:
pairs += 1
break
print(pairs)
def main():
with open('day4', 'r') as file:
lines = file.readlines()
part_one(lines)
part_two(lines)
if __name__ == '__main__':
main()

512
2022/day5 Normal file
View File

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

88
2022/day5.py Executable file
View File

@ -0,0 +1,88 @@
#!/usr/bin/env python3
def parse_stacks(stacks, line):
for box in range(9):
contents = line[box*4+1]
if contents != ' ':
match box:
case 0:
stacks[0].append(contents)
case 1:
stacks[1].append(contents)
case 2:
stacks[2].append(contents)
case 3:
stacks[3].append(contents)
case 4:
stacks[4].append(contents)
case 5:
stacks[5].append(contents)
case 6:
stacks[6].append(contents)
case 7:
stacks[7].append(contents)
case 8:
stacks[8].append(contents)
def parse_line(line):
line = line.strip().split()
count = int(line[1])
from_stack = int(line[3]) - 1
to_stack = int(line[5]) - 1
return count, from_stack, to_stack
def move_single(stacks, line):
count, from_stack, to_stack = parse_line(line)
for _ in range(count):
stacks[to_stack].append(stacks[from_stack].pop())
def move_multiple(stacks, line):
count, from_stack, to_stack = parse_line(line)
count = int(count)
temp_stack = stacks[from_stack][-count:]
for _ in range(count):
stacks[from_stack].pop()
stacks[to_stack].extend(temp_stack)
def create_and_parse_stacks():
stacks = [[] for _ in range(9)]
with open('day5', 'r') as file:
lines = file.readlines()
for line in lines[7::-1]:
parse_stacks(stacks, line[:-1])
return stacks, lines[10:]
def print_stacks(stacks):
for stack in stacks:
print(stack[-1], end='')
print()
def main():
stacks, lines = create_and_parse_stacks()
for line in lines:
move_single(stacks, line)
print_stacks(stacks)
stacks, lines = create_and_parse_stacks()
for line in lines:
move_multiple(stacks, line)
print_stacks(stacks)
if __name__ == '__main__':
main()

1
2022/day6 Normal file
View File

@ -0,0 +1 @@
rvnvzvhzzjgjgffclllnhhtltptgptgpttjhttsllmbbphbpbzpbpjjcwjwqwccnrrtvrtrfrwffnqffsggwzzhtzhthqhffmrrzsrrnrtrqqbllhrlrjrvvrvvgdgjgfjjtzznffrfvfggswgssccpcwpccstcsstwssgzssswsgwsgsnsshcsscsffcwcmmhmsmrsrddwhhszsfsjfsfccwssvdssmzzwrzzjfzzvzzfsfsvshschhvlhhvmvpvhhstsdtstgtrrtjjcssgfssnsnfsnscnsslvvqbbhthqtqzqmzmjjfmmbdmmzdmdpmpnnfjnnrwnwbwrrwjrrttfzzlwwfmmnhhqlhqqbnqnqznncmmhfmfftsfszssftstggppfddtztltctqcqjcqcmclcnccdgcggvmvvcsstztbzttsccmgcghcczfzszbzmbmjjggsqgghbhjjhhrrjljmllczlzzqssjfjqfjfmfdfgffczfzwwpfwpwbbftbffplphhfcftctlcclhlnlhnhlhnhqnhhjbjmmtpmmlsmllvhhjghhmzzwpzprrjrzzvrvcvqvssgssnccmgmppfhfwhhczhhprhrffpvvqrqvqccdhdvvvssvdvwdwwzggfvfnvvqvwwzwmzzvttgzzwjjfvvpvffqpqhqrrwccjbjppbzbrbrrphrhgrhhzbbhrrblbjjznnlccsffpcfpcfpfddfwddbffczztzsttzsstddrqdqqchqccrlccfcwwghwhnhbhjbhhzrrgprrftrffqlljlslggzdzvvrgvgcgnnngtnggdcgddhjhchqcqfqwfwjffqppblbddgmdgmddrnddjtdjttgzgpzggwvwjvwwhdwwbvvtftcfttpftpfpzfznnchnhrrdtdbtdbdppsjsgsttptsptssnwntwnnsshqqgnnqnddhjjtqqjhhmghmhmsstrrhmmwvvlssprsrbbswsddbnntmtbmtbmmtmrrffvjffdrffnttbffbccgchghjgjwwshwswdswdsdsrdsdjdvjjgbjbssptpddzbdddqdpdspswssjrjwwcbbvsspnspslpplzlqlccvlvfllntlntnqnrqnqpqlqflfrfsfgsfswwptwwgqggrhghzghhrthtzhzsswhhzffpsffhnnrvnrvvhmmlvvqsslddhcddsllpmpggrhrcrbbmnmjmqmlmpmrrqwqhqrqhrrgrqqsrrpjpdjppzhphthddlzdzhddjvdjdcjcncnvnzzvwzvzgzjggcllvpllgdgqqdvvwnvwvwqqvwvvrbbtqqwhdztqfzzcqrshjzwqnpdsshmpjzwqdptbvfqzmfnbtlgbbsjbqgnblhbbpsfdzvcmpzfwczcnbdndsjzccjcqnrdglwfrvwtnjwpvpvvgwtmnpzhbwnbqwznmdvdrsjnlsfrpcnhlbmlgmrcjbbvhqnvbrmlnfttjllstqnqqnhqrzrhfqjbfbwfhhjzwtwzjmszzhjnjbhrlbnnpfvdmlftjnfsfnvddqfhqqlljrthptvmhbqrdmdcmljwgbrqrjwcrtmvjgqtblnslgbjmdsrrpgfsctrhwlwnszpljhrfnsfpcsgczzltgsztclhgcqljrcmbbpdlztncnrnrmgrttplcnldfqddqhznmcczbmwvsztmwmcqnrzmlmqchnhnhrrhhfntjzqcbnttspptqwvphlbtpfcbhdqzbhsbvhmsqbsdntwpcrnzvmbgqsgttbqhhblfjpmvfcrzhfnzwrzbzgsdfqndzzhfdnrvsnvfbptthjnhgljhrvwwrlbnfpvvjdjchcgbhfrqvszhrhqvtzplwsptvdhqwlzhcjpclmmrlccvgvtgsfpnjhqhrbqglznpdhmsqwwsbmhmlsmmvvghsmplqjchrfctltmnqnddzqjfpljwljbdqjcqdqzwsbcclqsmsmlstvljwwtfmpnhqzqfjghjfchjccqrchsvngvrnwfwttsnvrdlfvwfptsjcpslvvpmjclfcpljqjszptsgsmntzrdjbgrzmgvzddqrlsndjzzqbznqnphbnwfhtjjlwjpsvffrdrbsbttpgrvmqrdndqvlgzcpfbttvqdgvrmtvfclcbcwllthmdzjcflwpnrsqzrjdzbvqgzsqvjjpjjpnjtcjqhcfbjdqndlcwzhcbjtgtlvtdwctdnqcbcgsmrcrmwjntdwbjdbzmshbvlspjfdbvmlrbdzlmlggthvphnrqlrcdsqpsgqcmpgmgdzvdqlmcldvztpsbmpwjgjfhswplwrvwpbwbsgsvlhdvmpzwnnbwjwmshwcnqfqjdpchfjjcbdnslqchhnznpqpnnctznbtccclgjhmnngdjlmqnzpsdptqqcrblmrlnnpgvrfrtmbjnmspfrbwpclhgtbsghndrjfbggsplvcjnhjjbqzsfdpfnvchzjgbhdqgddfgddvzdcrjlntnsmscqwmpptqgbnvtsvpjvmhcfpbfrpzqbpfhlbjrmbmvdvvnvfqsndglvhfrqcsbsbbprscrbfthzcwcdrprqrwjzwrpblfllpwzlhmqvltjgpcjzpzwbltgwsrgrrhzcqfpvhcprdhnzcfphqrwcvtpcbppjwzmmwjhbvwbblnbwvcqzvlfzjhgmlnhlhrbsplfctggfbhbgwpncznvtmdtqqmjsvsnrlqswzvflrfsncgpdcndlwrfrqwqnqtjmsphwsgzhdjpnsdgrbrfhbfdrntwvgvbwnvwnrmdbhqgrglbfwprflnrljrwsgwtpgtmfhvvghtzndvwlzjchhmlwcncmpvrslrglzjcnhfdqhcrljhgbzpssvdnmfwzstmvrztgpsscfswltnbwrrtcnvbswmmjbmnnnvqwjzhprfnvlbvzzdvbwlwchrvqnwwpbnttbhfdvjjvzsznhczjcncmcrmwtrlsvbwpsrcwqdvgcfjsbqnwmjmtcgpnmcbfbcqhzrjbtlpvwzhjqqprbdnbgzfwlprlcspwjwnfftldqzbcgqnjtglvbpqffdvjbpslqcdzwdnmncvcwfshdhsmssttqfrsbnjgmhfqzlgrbpdfqtfdwslsgphfzzgbzjssfbgnwztzmczplqwjmhtlflpvqqqmrvlllhngtfgsvbbnvhzqbcgpmnlsmpwqwgqfjpzplzjhrslwzrsrgjgpppjlnhrnggcdzvspsztnschnqftgffbtvrpzndzpqmtsfmwgnrvpmtgpvnmqfmwgcvlznwqnjnjwpgnqfjwtdhhmztlvlcvrlzmlpmjdvdnzwbfsshfsvbbhqsmphjhqtlnvlsmvwlqvfqpnjnzlgmdvwzzrllmcgwtqdwphhbwmlrqhqrfmdvtqswvsllqvwmfbbpllsbjbvgsmrcgqvfgsnszfrdlcjbtfgcbclhmzlmqlnhmslcmgrcvjjlbpsjjcznzqwmztcgdgbmrlgwzjzzjrpndfrdzztzzgmsrcnwrvqrdcczrbhdpfjwvqsmbrcvllvjrrbrsqnzldltdgzscjrssvdhzhnvltpgfdfcvfbtqmphdzhpzgjhjbwsmdlbqqgcrhjrwhgvfgdllmmlnpsbtvdrrzmltfwgrcsfrrsdbdmjtrwhnlgcrgjgmbzvzvqbflvbrsqcssjgsvpjmlhtcggzwbvddmwwtfdrlltjqcpwnthczzlzdszvtmrmhbpcgstvrsnmbdcmjzsvnncmgmlnrzzhfvmblgptwwwbrmtcczjwcqmvdrsvfjgqqvghnhbntqcdrppfmvdzbcjvztrnpdhmdpmnvsnzzldvdfqbdrwqqqqsmswthwpjwdrflszbspqhpfwztjjcbdsrftdsrsfdltnfztcslmbsghgrtcscrfmptqplwpmtqdzthgfjhbqdnsffrpjmgczmrlfvzcjttwtmtqfbtlqrttvjdwhfgcgcclrlswmzhzbfhjrggnhwtnffnqqcvldlttvvgrbcqbmqzvtflfmdblhdbzphrqtbshvp

30
2022/day6.py Executable file
View File

@ -0,0 +1,30 @@
#!/usr/bin/env python3
def find_signal(line):
letters = [line[x] for x in range(4)]
for index, letter in enumerate(line[4:]):
if len(set(letters)) == 4:
return(index + 4)
letters[index % 4] = letter
def find_signal_two(line):
letters = [line[x] for x in range(14)]
for index, letter in enumerate(line[14:]):
if len(set(letters)) == 14:
return(index + 14)
letters[index % 14] = letter
def main():
with open('day6', 'r') as file:
line = file.readlines()
line = line[0].strip()
print(find_signal(line))
print(find_signal_two(line))
if __name__ == '__main__':
main()

1063
2022/day7 Normal file

File diff suppressed because it is too large Load Diff

125
2022/day7.py Executable file
View File

@ -0,0 +1,125 @@
#!/usr/bin/env python3
class File:
def __init__(self, name, size):
self.name = name
self.size = size
class Directory:
def __init__(self, name, parent):
self.parent = parent
self.name = name
self.directories = []
self.files = []
def addFile(self, file):
self.files.append(file)
def addDirectory(self, directory):
self.directories.append(directory)
def getSize(self):
self.size = 0
for file in self.files:
self.size += int(file.size)
for directory in self.directories:
self.size += int(directory.getSize())
return self.size
def __str__(self):
return self.name
class FileSystem:
def __init__(self):
self.root = Directory('/', '')
self.root.parent = self.root
self.current_directory = self.root
self.all_directories = []
def addFile(self, file):
self.root.files.append(file)
def addDirectory(self, directory):
self.root.directories.append(directory)
def getSize(self):
return self.root.getSize()
def change_directory(line, fs):
match line[2]:
case '..':
fs.current_directory = fs.current_directory.parent
case '/':
fs.current_directory = fs.root
case _:
for directory in fs.current_directory.directories:
if directory.name == line[2]:
fs.current_directory = directory
return
new_directory = Directory(line[2], fs.current_directory)
fs.all_directories.append(new_directory)
fs.current_directory.addDirectory(new_directory)
fs.current_directory = new_directory
def process_command(line, fs):
match line[1]:
case 'cd':
change_directory(line, fs)
case 'ls':
pass
def process_line(line, fs):
line = line.split()
match line[0]:
case '$':
process_command(line, fs)
case 'dir':
for directory in fs.current_directory.directories:
if directory.name == line[1]:
return
new_directory = Directory(line[1], fs.current_directory)
fs.all_directories.append(new_directory)
fs.current_directory.addDirectory(new_directory)
case _:
for file in fs.current_directory.files:
if file.name == line[1]:
file.size == line[0]
return
new_file = File(line[1], line[0])
fs.current_directory.addFile(new_file)
def main():
with open('day7', 'r') as file:
lines = file.readlines()
fs = FileSystem()
fs.current_directory = fs
for line in lines:
line = line.strip()
process_line(line, fs)
root_size = fs.getSize()
print(f'{fs.root.name} : {root_size}')
max_size = 30_000_000 - (70_000_000 - root_size)
smallest = 30_000_000
total_size = 0
for directory in fs.all_directories:
size = directory.getSize()
if size <= 100_000:
total_size += directory.getSize()
if size >= max_size:
if size < smallest:
smallest = size
print(total_size)
print(smallest)
if __name__ == '__main__':
main()

23
2022/day7.sample Normal file
View File

@ -0,0 +1,23 @@
$ cd /
$ ls
dir a
14848514 b.txt
8504156 c.dat
dir d
$ cd a
$ ls
dir e
29116 f
2557 g
62596 h.lst
$ cd e
$ ls
584 i
$ cd ..
$ cd ..
$ cd d
$ ls
4060174 j
8033020 d.log
5626152 d.ext
7214296 k

99
2022/day8 Normal file
View File

@ -0,0 +1,99 @@
200120010031113332213034140102430141241124321111512323442304040044220141342121012210022220211111200
111021120230012003124233312003010303204555454332453445353125225214221214442214301113012111020220220
010000112330232223210123331341111021455213441355415452453433542411022110033014112420103200010200112
210220131023203033023421012411405531115123145115445215311422135252541100222231431331003220231121021
020112210133112114444340100410411231114131452544155151415233415312511222041221113442132231003203100
121210122332301142321211440441113455552434332511455325315545354524142541534411112013143013120333022
002022223332143323320030004111431434153352153321414154453442552321332341355132444030442110103203212
212130023213100232130230411132244242133251435525323326611211534441513532233340420321144212221332012
112201210213131241203033341411115513233426453426433653356253533133113511115222441140433214102332200
212012000101044144022321521321444445566546646625625665232323663631331412343532242340023204432003233
101233132121222100241254211542133266356326564552445466322626353633223221135151311240430411433022011
200132020222314334333551152431232424524623645555522366665322366466545513112135535223102441334310202
023113000020114221524122422222662645435544455234636242322656464245462233555511334411233402112203303
323212301014434412315252233452332225554646452654545433445553336343544664455435323243510303023142200
310022200424121333144123222262332322343322244646667564465544426245466232342143412141451122001041322
212301111322001335441132334525635254352425553354565445643472236236266635446421522132452121404230333
222212444300345211222512256444456624535343536756355746664436374344346652444335121144422222340114403
133103420101433344253425324366444265345745457464444766674564476573243345254266312555221132304022243
104024111323421413115464433455553477333456354575666765646757774776752425462423244113225443242031103
102001244212344453145353232652647556546465453563544776667356374453675332254663444121345213131024201
224444241243433331136646422564367344447534333336573546336576477746463642222264422255444411444213332
111102440221143134255523244546456346745346547453543465664363545634575433436342252431313443241200434
134231321331555233423635635366465473563535535586445888474374535544636375425246452265522242444124430
234112414314111344422243544643454775656784865866884848444877466476364476356322553554245224411411221
034400114351525345222546546744637535635657575787587675474664764764736443646462322222525151425423322
200214241324215322354446653764777674587466544685754678446567884767437556756324542252661541311422130
343144113253113264625454456777333344687566876677476786864558645875776364454562645333232242321313142
343024121143435322432236376444777668467756646886688564457885758774655565674476525265433235351133020
403402124545255442342535445764457654765745674556784877787445455686478773563733543423236235255444144
103322531152132266562676355566367676848756788886766967585484486646776553753344443262466623351341241
310355244513624552353465735465555764667556575665597778969594858667646774744555337236256442514154340
023311451112523462333545544537465688645559988688956997665697964748587858337347363225646321434554144
320135522136342345436443367666564847488558589757575579796688785767645678467555334323622425311134113
302355525243323546577736555686874886486985688686888898966978978668487864787645754566534465541511251
334125312126266532347576536548547584696886997768569758698995755875465674754333433642553345425533431
341111335132225635365534457665748575977867585959997886979957965558787465664637533766462255534332423
332515314534343636736373478687676678865555895657977886779567677978977887466835476754353523355412552
223554423243256435734467677444784886576856669787898778968956989875566754875777467667635224535114135
155522522343322534364735656868875656687568869667769697877887796866975856457447636733764232364431215
242345244424435673345476658556448689589759768689899966877768987857579874745884637474453634352133231
415255446645436567674735664645455855996887768879976678686967768687868985856885736776326622253351232
345511155426334655353457846578475998667966669787979667866969678557875668566464436456435236255355314
142554534636264637437346664558867877978687978689679869967766679569789677485678377367342526223134543
445152112563265336347774464854776998568899676687677797996796877777879786686845577654534235322155423
333311452256452445537757558677965658888896678979799998788899698785896978877575444547572432544335251
153342523322435374455644657476596955598987666997999878876686677879688676464687476363732553363413554
144335145664565566437454557675966795686769969779977988878679878778787789465465637576634655354532332
152415343652336664567566647557776598677998979889877998977867798897785759685544636646555455665423232
233452324356364643433768554555595977968766779897887998898666688775789556775758843355374525244243434
415514136342636535455644448567857957878867697988999887897878896698589669784466744746433345345355353
232342145445335734443368474877857768999979889789879797978786868766697957448687837436437246435352325
423142134652644455355368647749855698998886897798977997799867788779868756865564445675347463653623132
221215125542657466763755887857659858677696867997877899797779899996787779754784846775376254442211254
154531463524644747547747455647685566769977767978799879788898879798999996758665537564563322242224125
114543323332546776763457675777969696978788779877889799879998997975759878686666834757774555334611241
353441154256436766664748544445957885788777978878979877989798876799786999466647747557553324526153313
433233236244364537664567776764977668967888876787887977898978679686668778764647857553662664333221513
112335142543334473565677774456986769698869989679787999966877889796668798648474667745633463364123315
113555236654542657737447854474695576987788777767987976776779677896568655666568777374452626625515123
335535115334436455537766485588496998559679678997888767666867796988758985466776445675326242423551222
113534446446435634464566878474597579966586699697988866966997787776788976778774466655756463456235323
432234422656545375357656547448457656589888789768979867898878979959955468888683644466555336562315155
313344415452422533675445775845665999956589788887986877769867786689888565577764433373633363624515141
222432351346446453465663784584875977688789959977876966969658866777886544775874577535665532224311252
225114233145352533344653757488874695566977756698769768695668575699668757584555454357642544414312222
033415322244643242337557674678486867575857998965787859688788778777887745544746656765646262354135222
244444135424622245536477356767676647596876888859989597677576756885858547856577434533266366252341111
043422441154553466473376764757644888596669857975585975898957778585855575867574554436566563342243533
331142132342425642446677456357664865566895568659588999997598897847485545576757377726563624233332331
023252542543632422666654576368776445864568889675685656595757555564576478356355573264462564525315531
401013153355343645357335364463874854866687865999886679877556446867474565563474773455256232432344241
021145311524153334266573666344586785645787666877957988698886547444446737764473344255436645355133043
343022114235145422524664767447348848745548778464684486768568675765556575337775543626443412212441440
111402455441135334663624565477563468586767564584754776865658486876757446535673333342623334312243002
300312451335434322222245676775746358685854756547745674447587647487533473336654232544332431554454412
433111155454541556355524273356653577688858857767884847858548544877576457444762553325524214215402141
131233333423335563265232427676636343767667757678865557657665545337553674363435662333422331253432142
424110224332255444554444426563344537343587775787775766858448446366677553432226234426335534235001312
333412002215124441543424366273747763767633456777658554454464446357566564765333524264253113145112300
101110030515255434456252656567734365435643756543777575374763565634563366532624443621453215143234300
303322412424455315323623364345353365376676743654344676735433644466637676342646445331232331222232310
323112211415542144152522545435246756534467755554567676637543357465766366552324534423444455001240332
104010010231221552145233456226456635564775656444567465773637433733444632663325561451234351230241312
121411232340543435321316435636242655564355535365574763633547465475523553325562122152444444042300041
131012210332331125512334254246234345354543573744464635755354544666345534262435114123351541032131413
320204021134412321515435566234224352423426577577364457356445435455454244243342521425351312003010221
323114214132034241313542544555435465334424654666346364554655422236635456436354122354410044244241323
013302120424301452153353441245652435266525344656664634425626224355262362255351231351513443132401213
320030122021334215313244242334523262333453263233364243362363226452453421344311524253311414201210001
232000301112410134252124412414346224626463252363536262245565624425334453135542241232142142113023001
023101113421202000305251552134255163452646652324334242436543224522235515444445314014323100240020120
320223110031202012323335553432231212252653563665545464422324656333443431535442453303001103202231020
102033222010100142203435155413125314311166645446465322244546532441244154143433143443342400201012012
103310002120123402241302221241151441435355114335344522434421453552354154135223134443030043002000021
112323110033212002113322411233332355223342424233213123445224135331545115152043042400020200022133330
022111301200101044211214231433231311322554214331413543414521424255241531111410022413003020200231110
012022111212202121003233141343155411314255551134343533133453252153433344441013011221420230021203220
221101122202110034040022441212441254112211113355531534335143125434435312222200311411322330203331100
210122210200133032213341213111433213432513121525124133544144433541201142230241123430213303001122221

32
2022/day8.py Executable file
View File

@ -0,0 +1,32 @@
#!/usr/bin/env python3
def main():
with open('day8.sample', 'r') as file:
lines = file.readlines()
matrix = [list(line.strip()) for line in lines]
last_column = len(matrix[0]) -1
last_row = len(matrix) -1
print(last_column, last_row)
visible = 0
for row_index, row in enumerate(matrix):
for column_index, column in enumerate(row):
try:
if (column > matrix[row_index + 1][column_index] or
column > matrix[row_index - 1][column_index] or
column > matrix[row_index][column_index + 1] or
column > matrix[row_index][column_index - 1]):
visible += 1
elif (row_index == 0 or column_index == 0 or
row_index == last_row or column_index == last_column):
visible += 1
else:
print(f'not visible {column_index}x{row_index}', column)
except IndexError:
visible += 1
print(visible)
if __name__ == '__main__':
main()

5
2022/day8.sample Normal file
View File

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