Move into 2022 folder

This commit is contained in:
Mark Hoekveen
2024-11-11 09:05:01 +01:00
parent 9dd6a4f275
commit e0d955ec6f
28 changed files with 5 additions and 11 deletions
+2249
View File
File diff suppressed because it is too large Load Diff
+11
View File
@@ -0,0 +1,11 @@
with open("input.txt", "r") as f:
biggest = 0
count = 0
for line in f.readlines():
try:
count += int(line)
if count > biggest:
biggest = count
except:
count = 0
print(biggest)
+19
View File
@@ -0,0 +1,19 @@
top_three = [0, 0, 0]
def insert(calories):
top_three.sort()
if calories > top_three[0]:
top_three.pop(0)
top_three.append(calories)
with open("input.txt", "r") as f:
count = 0
for line in f.readlines():
try:
count += int(line)
except:
insert(count)
count = 0
insert(count)
print(top_three[0] + top_three[1] + top_three[2])
+2500
View File
File diff suppressed because it is too large Load Diff
+29
View File
@@ -0,0 +1,29 @@
# The score for a single round is the score for the shape
# you selected (1 for Rock, 2 for Paper, and 3 for Scissors)
# plus the score for the outcome of the round
# (0 if you lost, 3 if the round was a draw, and 6 if you won).
scores = {
"X": 1, #Rock
"Y": 2, #Paper
"Z": 3, #Scissors
"A": 1, #Rock
"B": 2, #Paper
"C": 3 #Scissors
}
score = 0
with open("input.txt", "r") as f:
for line in f.readlines():
hands = line.strip("\n").split(" ")
theirs = scores[hands[0]]
ours = scores[hands[1]]
score += ours
if ours > theirs and not (ours == 3 and theirs == 1):
score += 6
if ours == theirs:
score += 3
if ours == 1 and theirs == 3:
score += 6
print(score)
+31
View File
@@ -0,0 +1,31 @@
# X means you need to lose,
# Y means you need to end the round in a draw,
# and Z means you need to win. Good luck!"
scores = {
"A": 1, #Rock
"B": 2, #Paper
"C": 3 #Scissors
}
score = 0
with open("input.txt", "r") as f:
for line in f.readlines():
strategy = line.strip("\n").split(" ")
theirs = scores[strategy[0]]
victory = strategy[1]
ours = 0
if victory == "X": # Lose
ours = theirs-1
elif victory == "Y": # Draw
ours = theirs
score += 3
elif victory == "Z": # Win
ours = theirs+1
score += 6
if ours == 0:
ours = 3
if ours > 3:
ours = 1
score += ours
print(score)
+300
View File
@@ -0,0 +1,300 @@
BzRmmzZHzVBzgVQmZLPtqqffPqWqJmPLlL
hpvvTDcrCjhpcrvcGGhfLHMlLtMCqflNlWPJlJ
hGjhncHhGnhbTHczBBZVVSbRwgSgRV
rWVQjPQQjGRWNSrWrPjcptwBpqqJBtJBBcZgMdtq
zzmmpzfTCFpTlMlJJwBgMlqMBt
TvLszpbhhTLmsnRQPDQGWDWRvQSR
zGzvLlGlQHLGBQZlhBWhdjRdmdWRcjPj
fTJNfTfNSRWPhjdjfj
pbsbVVnpSnbVTprnbqqrzvLLgQlGLPLHll
ZCCCsWvNvmsCsCmZLZmgMLRpQMhwQRpQRfphfprpTfpM
tlncPjzlndctbzcPPBcjwDphwrfGGDffbDRpDTGG
cdqnddwzqjNVWVLZZLZq
DTLbDbRrlQbwhhNrmmfwdt
zzMJMzjCjJJjvLjMPJpcgPpzfhHdfqWcqddwtwfqdttcNtdN
pJCzVpCvDZBLsVRQ
STzBBbJzRRBZBRTqCCsfZLtNNLClCsfh
jsQnnQjjHcvQFrcPwCmtLCNlvDfftfff
sGFscMQQMMpqzqbMbd
QlNDWGsjQjgQllWQsbtzqTJczTJcbFmmFJJP
MhLrhgLVndRmzJFzVqqJqP
pSLnMdwhwdRZRSwhLZwLhdGWQjlsgWjNQWWSvgBsWDlj
THjSRFSddTjdBTcPLcVVvVBw
GzWnWfndWfznDfsnsBsPVwVwPPLL
zNflzJWqqzQDdSStHNZNpFFtbj
FSzDmsFSFlDlBzqVjqHHjHHpVgHLbp
rTrTtTQQntRQnQJQgggHZttVgHLBLhZL
WTJJRRQCRRJTRdBCRdvRNDFSWFMPmDlPPSsNPSzS
WQldlMtMVQgVMQHnDGbHGGnRnQmD
rqcZPrCFjmHlbGjZ
zSScchqwchBzTzFzhhSlcCwNtdVWWJgsVdMtWNgNVWTJTd
lMZqjMWllrTTspjprWWSSwgWNSVNDmWGVwFwgN
cdCCdLHcnndHJnmCRntLBnRzDvFNtNDVzgSgwDgFNVzFVv
BRLcCCJCmJdcRhfjPPZphrlrPqlZ
GdGqcrrZGDrvDJJqJHcBvmFFgmFMMgMgBtMLTssLmF
NbPVPDlljPmTmsTj
VfQDhflCCRWdcrQwJvvnJv
RLcWgLCqqPQLcqZwzHgwmmrmmtgwTw
DhbhNrMpnJSDJwVTHmmTVnTTVj
lrsvblMDlcWcfQPQ
PVldlphHwGwJJGdjZZWsRbbsGsNWrWQbNbQR
SqcDvTmDLtfmSmtqppfqzTgTQBrRQsbCFWbNNFQFBBrRbLNb
MgtmTgtfpqVlnVddZMwV
BdmfmPBPSbSNdGSdvWrwcZrccZPPcZnH
jzzLsjsMRlQQVHwswvvZrCHrrT
VqhzVFzplFlpLwpMphLRQQVRmSqgbdGtNJBmNSmgGbtggSgt
DHVpNZjdZjFZWVFHpvFvzmlRzPnlfznFRz
lrTBTsBwwMbrrwLPPfwGmGzvRf
scrtMhMCtJBBBclbHdHttWZWDSqDSjHj
wzqsPmqsbsfqBwPMNRMMZcZmFFNtZM
CgCnhlvvLJgcRFNNBdCpWM
QnQrVgHSvVHjbjTGBbbTHb
HdrVrdqFDdZVmHgRmDRFHMnTdTssMGnLnPJLbPTbCs
SczlScjwcNzplNzQSSfjwQSrTGGsbTsnTCnGTMCMLMGGbN
wQlfjrhfhQFHqZhRZRtD
RsfJDGJvzPNcjpddSWJWMd
LLCbBCwCrCmVVnrmhQFmbVhdcdlWpjZzSpMdWSpcWczSBj
rrLCbTwnHTvzvNGT
wPhPhbCqqSCrtJDlqvlrJr
RVVZddLFRZZcQLvJJtzptlgPJp
TVQRZGVncFdTGWZdCNShHhfPNwwsWPwb
dzLVzPSgrgDDDCMSMLLPwFmdTTcsvmwNwjNsHcFF
nWBGntQfGNGBflWBBqlpRQGbWFvjwsbsFswbvTHjjbmHTc
tBNJBnGBflQnDPJrPhDgrPVg
VtWztWtqpqzWpWzqjNRjNpWTmrrmrSbnmJwSJwnMPrCSJVwM
sDHsBDhBdsBZGcHvLHDLhhCSnRSwCJMZrPbmnMbJSCSR
ccLRhgsLBdRsdHNTFFNNgqTglqzF
hztlmDhPhgPlPNNgmZMCbmwwQjcwjjwMjVCd
RSJRrRqnqQJFqvnTGrHCcHHCCHHbHHMcMvdM
qGJsnQTRsStsftPlhPNl
BFFBLPRCwsLwhlPlRmhcGGrbmmGjfNTTnp
VJMVpzgqggJnrjmjNcMjmT
VqdSZtQgZvtdzqHqHtVZdVQpCDWWFdwlRPDpWPPBCswlWD
fCWCsjPzcbzwRSzVTzhhDLqvdg
TmJtrNJrBLSLJqgS
ptNTQFHrZlnpFPwsWMbRjCpcjR
nJmQNCmbmlllmbClbfMLjMFqbGBsdLFq
ZcgTWcTnMqqMTBqF
tPgctSnPctZZgDWzZgQHwNmHlhlmzlQhlJlw
ZpTCwpffdslvgShCBhqhRz
FDMPnNFNmBPzvRPRBg
nNgMrnnDGjDmJMmnFdZTTsdsrZrslcwcQr
pTmczpCldcdDDnPttpvWSqbpJf
jgjRZMGHhGLgQrjvPWzPJgJvzStbbq
LGNLLNBBzcDFCBwwFC
nJTTqnrNvTzNMzzNfqrTPrJnwpwPpZpsHccZVsBRpcVHwpcp
bgDhgbghLWmFmStctVpZtBCVCCpfZp
LLSgLGSjggFGbSSbmMnrvqvzjfzTNrJrqM
RRpDmmPMTjwfGmJQgQ
WsNscdnvvdVZFVnnrZbjjflwljlbzfGFjQjq
NnLZsNnrrVVVcvdBLTPCPCRMwhPMBMPhCt
lbVvzngGJnVbJHpHtHNPpdSQvc
TsMBswFZsWMWBZMNwPtNNtRNHcNpSQ
CcZCTrZDsjZTsTsshWhrWrTnfgbLDfJzVVLVVlgfnzfVGV
JzTTRtJRZWmWjrMHCT
DDFGlLGcGlSSSLsFGBspPBmNMBHMghmWNmWjWCmWtH
nSSpnbsGlLDnpPsSSspFtVvffRQdVzqvvbqdfVQwRz
sMhzszlHHDsWbthHDqsbJjpLNtmjVJmVLLVLVLBp
nrTPrGwfPLdprzJzdL
wgPQcTGGzgccwCgnRwgRChFhlWSDqWWQMWhssSsMQl
NSNmwtpSpCpvMphCsr
PHcRGPLJMrsvzsqG
QHjbnRMcfbPbQZmlZgZlgBBQ
cPRPbhQjbQRdtPQdLqLHqzFZjCFCqLjC
mmfsnnwrfvwrfSNZFzHHLDCFNlLlqDlN
wsmrwswwGTffMrBnmQttJtcMZQQtPJPbZc
MvBPDDRRdnnvHPCHZLHZsFLL
rmJcbVqbcjWwWjQHLzTZFTHSzFrpsz
cmwllVqqGJbVVVmmqbQcmgRnRvGhGfgDRDZBBBvRdd
nMvMhMnvhnbTZWSSZgHmGJDFmmNDzBmbNmdGBN
rCsPLRCssRjrLLsrLlwRVrcNJQfDQfdBmmfNBGJNzmDPfB
CRjCpLltgtJgJJWq
jshCzJpjzTPpmCWvSlpfwHfSWglf
LQMMNMnHtDtLVRvwwgRWlldgWD
qHVrQNHVMFQtrrBBQMBcrrZsZbzCZhbbJZJsmmsmFPTC
JZQZnsQNMqTngZqJBVfBfPPVBNrwvfPw
SSmDstFjpDpCszDjcLLhrPVlGlrGGVBwrvwVPt
FSssFcLjFjbmFFCzjLcFLRDnMJnTHRnZZTdWqZZWnMnRnZ
GbHRHpldwGMpWhHpCMBlCbRdVSLhnqJLSrDPLPPLPDqVDrhh
gvjWWQvgZFtQFFNqLnVnDnSJzzztDD
ZccccfTsffHdWWdRWwsw
ClCtbHMlnnPPlszV
gSDWSLgWQWQJJNWqgtQjPsnfcdVcLVdVdzfzVzff
WQgqtFQgDgQSFqJhqhSJvNDRrZMZHwHMCbZhTpZbGHMTMG
pZJZlCQtHFhPfdNfCh
zcmLSVczwcMcLDNFHdLPhPWH
szvVVnBmnTGQtHTQ
RVVCNDlNGzlGZqHGHWqWhGqQwH
ZFLFTmpLvvmSqsbb
TrfpBfJpJMlnnNfNZD
qHHlDClHhltMqQsHDhHslGznwdTnzzwDGSdfnwGnwG
mZRNcNcLLPNPBFFbbPmLmbZFSCVfJJTVndVfSwnRzznfTwCS
CcCWFbbBLCWtgWgHjghqvv
TjbzlnlFmfqCFFVVCRWr
PhMcLpPDtMLpwPDvLPJbMhSgVCGqggVqQgCqCgCgSWvv
btbZbNZhJDJJhDtwtsTTTmBzzBBmlNlmHj
FqhjWtqlqmmsnFPTCvMCQMTTCjQd
pfffRfLpgrgGgzrNVzzpGVzRCdMCPJbwwcVMbQPCJVMVdbww
DGGDZRGrHggzSsFQnnWShmtH
vtHVVMMrvVMVrSHvLgvlHcZFCnRCZcccZtRRZfJFCJ
rdDjGsdTQDcNZfdncCRR
rBDsTwBbjbmbbQswswPhqVmmSvpVhlvvqMhHhh
vGBLrqMNvqSLBvvrNbllLHfwStWWtFttccjtRtjtcj
MhCDJmhMDzmcRRcjzWfztH
ZQDmDhVVCQbBVdVNMvvv
ptCtCzhWPWptnhVzzpGZbZTjTjVjFGjVFgVl
fQswRRffmRqZlgrqqFjjSgGg
HwsQDNNsDsmRLLHmffsfvHptBnhtzCvhWpZWBdhnMdCh
RlHzzTqczBPfbnvcpB
wVtNwpSZstppwwMsZhsdnLvnbtBBmbnLFFdnmF
WNQJMVWsZWwGJWhhSNrQzlgHrDCgQRHpCHrl
RrZWpJZRrZpdTGstlchLGGlLMd
NqjDPCQPnQCSvtMzSLhhjM
nQVQDDDDfwBwNCVCNVFNpWpgJgrRTmLTmTmgRTWF
SHMcrMHpcjGcjSrMMbvSvvSvwFTLJwJNtFGFWJNtDLFTLfWN
zqRnPfzQCRzqsmRPzznhszzLtLwQwwFTgWWLDLgWFTwTNQ
qVPZmRZhsCZPhZlRCqRRRCbfpccMBjvMVjdHjjMjSvdf
VVQdHwBZLVltlddtBczhrzvGcWWFRwgsFG
TDTTTqqTSSqjqnmTmPqPPmTmGhRszvsrzsjRsccgzrRzgWGF
DpJPqpWqHbZpllpt
cCSCFsnnZFnscDtNdJFJtJtdmb
VgBqBsqRrHtNdzmNrt
BGLLVVjRBsqPBfsGwPsMfSSZCSfTZTZQpSphfS
plCHCHlgglHHGpNbtngNrDvBDpfQDBQfZDfWZVrr
mTmMLhRfwhsLPQvQZDMZQBQWMB
cwsssmqRTFFfFgtbCtGl
LQPPrCPnMZwqtRMn
cWTSlJWlcplJdDTdGdpDlGcGgqmtwwZtqRrNRRmRdNZqmgNq
GSJcJSjsjTpsvWGWBHLLvVVBBBrFrzVz
NVPCSPMNDSNFVSWCsJJJmpGmZZGLLcpZLHGGtsHt
fwzlBBqghqvzqqlDrHbpHjZHmGZbLZrHLb
dnBgnDqQvwRnSnnFMFMP
BCbPsFFwCRHmDSBmWnvDDj
phhZVzdpVfQZphhZpRhSVnjmrcvvnrWtDrvWDS
TfQJMfLphMhJdfdzpQJRTPbwHHNlgbGwsTGgCP
ttWLlnnvnNnBBtlTqWlpvpndQdZsQQFssFDdsRFdVdRNFQ
jSgrScrbGZSGrrCGsFVMssFsPPFcDDMV
bzSmJbfCZCbzLwllflwqtvvw
zmFTJwFLPmzLztmjDzTJwfNrdFNrFppBSNRGNGdbrpBR
gqlhWQgsZMsvqMlMMvsvqsNlLbcdppbrRpdbbcSrrbbr
vssCgVgCsggZQZCgsnsqWgWvfJPDLwffwTPPmzTnjTPmPmwJ
SpcRTPQLBLWpNNzjmmwwwRrR
tGlfvGhfnbDlbqlChnfFMrwsmwNssTMHMHjFwv
ZlhtCtffCdWcZWZVVT
jTTCcWHWJNgCGTzTmnzrmnGn
BwRRbFvtvvQmJJFMpMJr
ZBBwLvqbBZsRsbVsZSqbcZdJjHHjhfPCJfJfHhgc
VrnDSvvrLrfTdTLGfdRp
zcJzmcFcHGfdGmWTVd
tHsMhwPVctccHFHFcbSDbbPjnNbBnbvBQB
QttWQwLTnLnWTtnffnLQSBFVjNvBjBFNgMdCsVWsjv
pDqcmmRPHqgVBddjvN
DcclzbcbPbJLnNTfnw
plRcpsZDGlGZvWvMCNcLtttq
SrfrwSjSVrSjwbmSrHzmHJCQQPQzqttNNQJMzJtqMW
wSHVnfHfWwwHWFVfSnfgmmRsslFZZDBBGZsZsDTdGRTp
qSFQSgQNgQBrBHHcrW
VTmjVJLTwlTmwTVmsMJMVlJmPvcbvvbCBbGBPjGvBbBGWcbb
DnJTZwmnZRhnpqNdWt
dTVHjZLLZDVCfVHtLDDjQbscjWbSJMJPjsbWWb
FnqrnmzzFllmsWwtsFtQMMFc
lmqzzzngGmlNNBqGllzlBNRvptHHpTCHpDLpgDZdgvHvDD
sdRZQbCfZTSTdlfTZCffccWPHPPcPPwLwctRnLWn
BBJDzFVgCDrCJrqDJJhqJVVMLPHwcctFwcWHHGLcwGwGHnWc
ghpJgqqjCZbQdZpd
tbcpzbHSszcHBgqHGZgJJJhhww
jfvdvRTffQQrrFCRFTnGwJRqNRZVpJGZLZggLh
nQTjTnMndlTdQFMvnrClCnpzmzDtbbmBbcPSzzlmmtzP
BqBqTCSTcqHsJHHM
WWPGVPLtzVgWtjWPGzVjzVGcbDhPsRbDcsbJwNRswRDRss
VQfWjfLFGWLjdFfVzTZZpJTpnmlTrSQlBl
jLNsZjqSHCsGdsmpsm
MvnVFzWMwMVWzfnVDwfBMfnnrCtdtPmPlRrdrJCJrtPDrrPD
zznfFWwMfMfFMwVTMQFnQjhjgjSZhCNbLSTcHHgbbC
GGtssttVmvnnGNMQrrVzgwVrCWMz
FdhfhhcCDhHLfzclZMcrwcQMZM
HHqqCBhHSSpdmjGqmGjtjtjj
bbQLtGMQQtQRQtrDtGprrrbCqwplZhhqSqmdwvdzqqqhSmpS
FsJjJBfnsJcFcFfjVPjWBzldqhqnlZZZzzhmnSvSnm
JPcFfFWjFHJVVsVjPVscsDlLNRHGDbLRMRCDNrCGbG
JdMdlMRJnTwdvcjv
CDLHbNSzzLFgHvnTjrswBNBTNT
QgbvzSFQmZQPQQRW
NTBrNzrpjjjCwGbB
FRbQlcvFvcRQQlRsMlRRRZjwCqMwjmjwJZdLJmjCZC
cVPPQcvlWDNhrbPz
VdbVtbbZJdtJVVdDVZmTLqqTSQvNLjjDShhvSG
zplpnBnFpnrrlghGNpLNqHvqvjNj
cWncllnlPFWzcMwtWWtsVLVRmJWCds
ShLSTnZnTSttTSbLQdfSZTMwcDHwwcHnJvDHnlnlclMM
NmPMsssRrVwjDclHJwwR
gNNMWGzNmqGdtfZTbGGb
sWNNlRHnmJtmntJt
brbbBTbbFbCbqqGgBTrCfmQVVZfSSQQSVtJZSrVZ
bbFqvbDvvGGLGbCCtBGDLbLlcPNHhhccPNcdPPchlsdR
DCFvDvnCnNfMBmMMslDZML
SQQQJHwpSgJSJHQWSWHqJWWbmcBBBLLTsmhhTcZbMhmlshcb
RJRgpJHssgwSQHRqsQPGGjjtNCrrFvvnFjjPrP
mThmsgjzTPjMpcvtWP
GNNBVqVGNZbbNbNqqZQVNVNbWcpdtMCcpCtMWCdCPpQccmpp
VSmNrmmbBfZVlsrssrLTRhRhTn
TdmCvLDCpTRNTdFbbWnnSWCfhjbbzn
GrrMsPVGcQHBGMbhjjSgWfHHDbjb
BPBVqqrQPsQqwrrmmmJdRLDDqFRplT
fpDDJljDlCfDTjprjrfbddWthCSCtdPPQFhSSSWW
HsLZgMGbgBBsNzMvGbdVtVQzFRQSthhFPdtP
sMBmGBmbNvLHGMnrDppTcJmcjpqljf
ptSpSJQqpbNGGDDhcMWrlNHcZZWWls
zRLRRRjvvgjHMMsMpWpc
vmCPLCgwvwdnCzmvLbpTbVQqJJPbJPpTVq
TJCfhhJVFffrJJQQllNWcvWhwvWD
GPSGjjpLslBbpLpLqqqPDvdwvwvNzQWGzDDNdzGN
msbRjbpPqsRpHnlZrmJlnVHT
GGfFsCCTvGDsfTTrhsCMMzptZJMdpdgtrpdMcV
LBlwBHPSqjwwlVggHpnMZcVHMt
ZlZZlBbRPGGTGfmRsD
CtCjbVvzQQZTWVdd
MlSqWlmsmGBSHJHTDFHZ
pcqsmsplwsqclwRtRWgtRnPPvb
zCrzCrsdjrhGDCFqGDjRRPtpWfQQcpfQZcCZPp
VSVwVMgLHHLTwMDTMMVnbWPRZQRcRQPptWnpbZcb
MNBBBlSMvLVwTlVTFdNdhNhFsqsGDrzm
rBLWTwTThWwVVDTwHBsZZWppvpGtpptppmRvFFFMFMfL
qPPNCCbqcbcNqbqQjjJQqzjRpptmlpMGmMlJtftmtFHpMt
QnCgzzQbbQqPcPQnncbdQdnVTwDssZgrShBTVgZZsBSDHT
PFGJFqnfqmPgFJQPWdbLdpDRhbphWjDm
rclNHvcrzCNwrWRprjdMMMph
wsZHwZNvRRQsQqBV
LqlGCPlPLTCPqqQlpqLlWfBfWgcHNRJRfWNsncGH
VVtdwVtDDdVmhrdwSBmjbdzNHgfgJnNnsSnHsNffHgRsgR
wVzhbjmDbDrwjdbztFDDthMCvqPppZQBQLZQTqTvFTvZ
BnQnQFwRmRwmwdBSFDFnmSDVLCJTCTppVVmGLVTCLcgVpC
ZlWvhvZjNrbNvqjNhlfPfqjCGHrsspggTpVLpsJCpcJVgg
vPzNvqjWhqFzGSnRGMDG
wZnMZzzZZchDRtVsqtCtwV
WmWpWWmPPWrmrmBmWrTlTFPNVqVCRSDCQHcqVTtTqsSDSTSD
PrppdFlWWlfrWmpWFffrdcGjJJGggnnhZGdLLgGGndvz
FShHNmNhRhNJmBnQBQJrmP
VTgzDTjwfffwzDvwlcczzVSJbQlBQSWBWCnPJPbJWWbC
tzSVtzvSvGSRZqqFMNtpRR
hPZhGDZpnCGtDhznjmLmdJffdNzJ
glwsSrQwBvLdgLzdcj
QsRbHllzzlHwHlBszWlTBFbpDPMhbPDVGpGFpPtFPp
SRjStRDctgDSBzLvPvNrDhmPLr
QqTHGTPJmmHmhNmH
TGQZsTqFnQZCJTPsnJnZQMjVRBVtcVRSVRBlwccSCtBS
bbsNsvsvnNPTRRllbblLqhtQCqQSLCGGHSqHNC
wFpzFgqVzqVJWFDwqJDmSBBmHBHhShLQhCGSBCGH
MJVpFMqgwMqRRbZsMbZMrP
PPdDhvNDQdmgQPZmQVHHtHGGWVGbffWGvs
MMLCTRRLlLclTLRMRLCwMLHWVctbVVHWWWFfVjVGsFWW
MRSMMlpTJRqClBCRqBDnzqgQPnqgznZPZqbP
MrMNPNNpjvdprWtrpMsthqBfqlnfqcGhVBqFRcnqFG
QbDgSSQbgSDDmDVmlqSCRllRcFqnqfBl
QVJbVmwwDQbzVTgbppNJNMWNjNNPrdpM
WwJJNbtHfpLpVgZZPVFhZh
vmmqlDvRvRfqBSrlzmmMjRBhcVhQVZhVghCQQQQTcTrPTP
jSqMmqRzMDDjvqlBqsBMBmmwGNJwJnwLNfbGwddswnJtJH
RLgRmRggbvbzzPmmRNmzsQWFtSGNtwSNQnntFwnnCw
pDBrBHpHhlldphHBHhJVFSLnWWFJttCtQSttSS
hfHrpphHBppfTvmzgMmbLbgf
+21
View File
@@ -0,0 +1,21 @@
def priority(item):
if item < 'a':
# uppercase
return ord(item)-38
else:
# lowercase
return ord(item)-96
totaal = 0
with open("input.txt", "r") as f:
for line in f.readlines():
line = line.strip("\n")
h = int(len(line)/2)
left = line[:h]
right = line[h:]
for c in left:
if c in right:
totaal += priority(c)
print(c)
break
print(totaal)
+22
View File
@@ -0,0 +1,22 @@
def priority(item):
if item < 'a':
# uppercase
return ord(item)-38
else:
# lowercase
return ord(item)-96
priorities = []
groups = []
with open("input.txt", "r") as f:
group = 0
for line in f.readlines():
line = line.strip("\n")
groups.append(line)
if len(groups) == 3:
for c in groups[0]:
if c in groups[1] and c in groups[2]:
priorities.append(priority(c))
groups = []
break
print(sum(priorities))
+1000
View File
File diff suppressed because it is too large Load Diff
+24
View File
@@ -0,0 +1,24 @@
count = 0
with open("input.txt", "r") as f:
for line in f.readlines():
line = line.strip("\n")
# "A-B,C-D"
twoelves = line.split(",")
# ["A-B", "C-D"]
# "A-B"
leftelf = twoelves[0].split("-")
# ["A", "B"]
lb1 = int(leftelf[0])
ub1 = int(leftelf[1])
# "C-D"
rightelf = twoelves[1].split("-")
# ["C", "D"]
lb2 = int(rightelf[0])
ub2 = int(rightelf[1])
if ((lb1 <= lb2 and ub1 >= ub2) or # Elf 1 fully covers elf 2
(lb2 <= lb1 and ub2 >= ub1)): # Elf 2 fully covers elf 1
count += 1
print(count)
+11
View File
@@ -0,0 +1,11 @@
count = 0
with open("input.txt", "r") as f:
for line in f.readlines():
line = line.strip("\n")
# Some python magic to split out the strings and convert them to integers
pair = [x.split("-") for x in line.split(",")]
pair = [[int(y) for y in x] for x in pair]
if ((pair[0][0] <= pair[1][0] and pair[0][1] >= pair[1][1]) or
(pair[1][0] <= pair[0][0] and pair[1][1] >= pair[0][1])):
count += 1
print(count)
+26
View File
@@ -0,0 +1,26 @@
elves = []
count = 0
def inrange(lb, ub, check):
"""Returns true iff check is inclusive in-between lb and ub."""
return check >= lb and check <= ub
with open("input.txt", "r") as f:
for line in f.readlines():
line = line.strip("\n")
# Some python magic to split out the strings and convert them to integers
pair = [x.split("-") for x in line.split(",")]
pair = [[int(y) for y in x] for x in pair]
elves.append(pair)
# Elves is now a list of list of lists.
for elf in elves:
lb1 = elf[0][0]
lb2 = elf[1][0]
ub1 = elf[0][1]
ub2 = elf[1][1]
if (inrange(lb1, ub1, ub2) or
inrange(lb1, ub1, lb2) or
inrange(lb2, ub2, ub1) or
inrange(lb2, ub2, lb1)):
count += 1
print(count)
+511
View File
@@ -0,0 +1,511 @@
[V] [B] [C]
[C] [N] [G] [W] [P]
[W] [C] [Q] [S] [C] [M]
[L] [W] [B] [Z] [F] [S] [V]
[R] [G] [H] [F] [P] [V] [M] [T]
[M] [L] [R] [D] [L] [N] [P] [D] [W]
[F] [Q] [S] [C] [G] [G] [Z] [P] [N]
[Q] [D] [P] [L] [V] [D] [D] [C] [Z]
1 2 3 4 5 6 7 8 9
move 1 from 9 to 2
move 4 from 6 to 1
move 4 from 2 to 6
move 5 from 8 to 7
move 4 from 9 to 2
move 1 from 5 to 8
move 1 from 3 to 1
move 2 from 3 to 1
move 1 from 4 to 2
move 11 from 7 to 2
move 5 from 5 to 1
move 1 from 6 to 8
move 1 from 7 to 6
move 3 from 6 to 7
move 1 from 3 to 2
move 1 from 6 to 8
move 11 from 2 to 1
move 1 from 9 to 8
move 1 from 3 to 7
move 4 from 7 to 9
move 3 from 3 to 7
move 4 from 8 to 2
move 3 from 7 to 6
move 2 from 6 to 3
move 5 from 4 to 1
move 1 from 6 to 5
move 26 from 1 to 7
move 1 from 4 to 6
move 22 from 7 to 5
move 4 from 9 to 1
move 3 from 7 to 3
move 1 from 6 to 3
move 6 from 1 to 7
move 2 from 7 to 5
move 8 from 1 to 9
move 4 from 3 to 4
move 10 from 2 to 7
move 6 from 7 to 4
move 2 from 9 to 5
move 1 from 5 to 1
move 8 from 4 to 1
move 2 from 5 to 9
move 1 from 3 to 6
move 1 from 9 to 1
move 1 from 3 to 6
move 2 from 5 to 2
move 1 from 4 to 2
move 1 from 2 to 3
move 7 from 1 to 4
move 9 from 7 to 4
move 1 from 3 to 4
move 2 from 2 to 4
move 5 from 9 to 6
move 1 from 4 to 5
move 2 from 9 to 3
move 1 from 1 to 6
move 2 from 6 to 1
move 2 from 6 to 5
move 2 from 9 to 7
move 1 from 3 to 9
move 1 from 9 to 5
move 2 from 7 to 3
move 1 from 1 to 7
move 7 from 4 to 5
move 2 from 1 to 2
move 3 from 3 to 8
move 3 from 8 to 9
move 31 from 5 to 8
move 1 from 7 to 1
move 1 from 2 to 1
move 1 from 1 to 5
move 1 from 5 to 6
move 2 from 5 to 7
move 10 from 4 to 9
move 5 from 6 to 2
move 3 from 2 to 6
move 2 from 7 to 8
move 1 from 6 to 3
move 1 from 4 to 1
move 1 from 3 to 6
move 1 from 4 to 2
move 2 from 1 to 2
move 1 from 8 to 7
move 10 from 8 to 2
move 13 from 2 to 9
move 1 from 1 to 5
move 18 from 8 to 2
move 21 from 9 to 6
move 1 from 7 to 8
move 2 from 9 to 7
move 1 from 2 to 3
move 1 from 7 to 8
move 9 from 2 to 4
move 1 from 7 to 8
move 3 from 9 to 1
move 1 from 8 to 1
move 6 from 2 to 3
move 5 from 4 to 7
move 1 from 5 to 8
move 2 from 4 to 3
move 5 from 7 to 3
move 2 from 2 to 7
move 15 from 6 to 1
move 12 from 1 to 2
move 6 from 2 to 9
move 4 from 9 to 5
move 4 from 5 to 6
move 14 from 3 to 9
move 1 from 6 to 7
move 1 from 7 to 2
move 1 from 7 to 8
move 9 from 2 to 6
move 1 from 1 to 6
move 2 from 9 to 8
move 4 from 9 to 7
move 1 from 1 to 5
move 8 from 8 to 3
move 1 from 5 to 4
move 2 from 1 to 2
move 3 from 1 to 4
move 9 from 6 to 2
move 1 from 7 to 4
move 1 from 8 to 2
move 1 from 6 to 4
move 4 from 7 to 8
move 12 from 6 to 8
move 3 from 2 to 1
move 6 from 8 to 7
move 5 from 3 to 6
move 3 from 3 to 6
move 3 from 1 to 3
move 8 from 2 to 9
move 2 from 4 to 5
move 2 from 7 to 2
move 10 from 8 to 5
move 3 from 3 to 2
move 10 from 5 to 3
move 1 from 4 to 3
move 1 from 2 to 1
move 1 from 1 to 7
move 14 from 9 to 6
move 5 from 2 to 4
move 15 from 6 to 5
move 3 from 9 to 3
move 1 from 8 to 6
move 1 from 3 to 8
move 7 from 3 to 8
move 16 from 5 to 1
move 2 from 7 to 1
move 1 from 5 to 9
move 2 from 9 to 3
move 15 from 1 to 5
move 3 from 8 to 2
move 3 from 3 to 1
move 3 from 7 to 3
move 8 from 4 to 6
move 5 from 1 to 6
move 9 from 5 to 7
move 2 from 8 to 3
move 2 from 2 to 7
move 1 from 1 to 4
move 2 from 5 to 8
move 4 from 3 to 1
move 4 from 8 to 1
move 1 from 8 to 6
move 9 from 7 to 6
move 2 from 7 to 5
move 3 from 1 to 8
move 1 from 4 to 8
move 1 from 2 to 4
move 12 from 6 to 2
move 3 from 8 to 6
move 1 from 4 to 7
move 2 from 6 to 8
move 5 from 5 to 9
move 13 from 2 to 9
move 2 from 4 to 7
move 13 from 9 to 5
move 2 from 6 to 5
move 1 from 3 to 9
move 6 from 9 to 4
move 5 from 1 to 3
move 1 from 7 to 9
move 15 from 5 to 8
move 2 from 4 to 7
move 2 from 4 to 6
move 1 from 4 to 6
move 1 from 5 to 7
move 18 from 6 to 2
move 2 from 7 to 3
move 3 from 6 to 7
move 3 from 2 to 8
move 5 from 7 to 3
move 1 from 9 to 6
move 2 from 3 to 8
move 11 from 3 to 2
move 2 from 2 to 9
move 1 from 6 to 2
move 1 from 7 to 5
move 1 from 5 to 9
move 9 from 8 to 4
move 1 from 4 to 6
move 2 from 3 to 1
move 2 from 1 to 5
move 12 from 8 to 3
move 1 from 8 to 2
move 14 from 3 to 4
move 1 from 6 to 4
move 1 from 5 to 4
move 20 from 2 to 7
move 2 from 9 to 5
move 1 from 5 to 3
move 1 from 9 to 2
move 1 from 2 to 8
move 2 from 2 to 3
move 5 from 4 to 5
move 6 from 5 to 7
move 2 from 8 to 2
move 3 from 3 to 9
move 5 from 4 to 5
move 2 from 9 to 7
move 2 from 2 to 3
move 1 from 9 to 3
move 22 from 7 to 3
move 4 from 7 to 4
move 24 from 3 to 6
move 4 from 2 to 6
move 18 from 6 to 9
move 15 from 4 to 6
move 8 from 6 to 3
move 6 from 6 to 1
move 7 from 9 to 6
move 2 from 7 to 4
move 8 from 3 to 9
move 14 from 6 to 3
move 2 from 3 to 9
move 1 from 9 to 6
move 13 from 9 to 1
move 3 from 4 to 5
move 1 from 9 to 6
move 5 from 1 to 8
move 3 from 3 to 9
move 2 from 1 to 5
move 8 from 5 to 8
move 10 from 3 to 5
move 3 from 4 to 6
move 6 from 1 to 9
move 4 from 5 to 3
move 5 from 8 to 2
move 6 from 6 to 3
move 7 from 3 to 6
move 1 from 3 to 4
move 5 from 8 to 7
move 5 from 2 to 6
move 2 from 7 to 3
move 3 from 7 to 3
move 1 from 4 to 9
move 9 from 6 to 9
move 2 from 6 to 2
move 1 from 8 to 2
move 2 from 8 to 7
move 5 from 1 to 5
move 1 from 1 to 4
move 13 from 5 to 7
move 5 from 3 to 7
move 1 from 5 to 6
move 1 from 4 to 6
move 3 from 2 to 8
move 1 from 3 to 5
move 1 from 3 to 8
move 14 from 7 to 4
move 1 from 5 to 6
move 7 from 6 to 9
move 6 from 7 to 9
move 2 from 8 to 9
move 2 from 8 to 1
move 31 from 9 to 1
move 13 from 4 to 2
move 1 from 4 to 3
move 10 from 2 to 7
move 1 from 3 to 4
move 1 from 2 to 7
move 3 from 7 to 8
move 1 from 4 to 1
move 3 from 8 to 5
move 32 from 1 to 5
move 3 from 9 to 7
move 4 from 9 to 6
move 2 from 2 to 7
move 2 from 1 to 7
move 1 from 6 to 1
move 1 from 9 to 4
move 3 from 6 to 4
move 1 from 1 to 8
move 15 from 5 to 1
move 1 from 8 to 4
move 9 from 5 to 7
move 1 from 9 to 8
move 1 from 8 to 1
move 10 from 1 to 9
move 1 from 4 to 2
move 2 from 9 to 5
move 4 from 9 to 6
move 1 from 2 to 7
move 3 from 4 to 2
move 1 from 1 to 5
move 5 from 1 to 5
move 1 from 4 to 9
move 3 from 6 to 7
move 23 from 7 to 6
move 1 from 2 to 4
move 1 from 2 to 5
move 9 from 5 to 4
move 1 from 2 to 5
move 9 from 5 to 6
move 1 from 9 to 7
move 1 from 9 to 3
move 3 from 9 to 4
move 14 from 6 to 3
move 5 from 7 to 4
move 1 from 7 to 5
move 1 from 5 to 9
move 2 from 5 to 6
move 16 from 6 to 2
move 2 from 6 to 1
move 7 from 4 to 8
move 2 from 1 to 2
move 4 from 3 to 5
move 5 from 4 to 7
move 2 from 6 to 7
move 4 from 4 to 1
move 4 from 8 to 9
move 1 from 4 to 5
move 1 from 6 to 8
move 1 from 4 to 9
move 4 from 1 to 7
move 1 from 9 to 4
move 2 from 2 to 7
move 7 from 3 to 9
move 15 from 2 to 3
move 4 from 8 to 6
move 1 from 4 to 7
move 2 from 9 to 7
move 1 from 6 to 8
move 2 from 7 to 2
move 5 from 7 to 2
move 1 from 5 to 2
move 6 from 2 to 9
move 3 from 7 to 1
move 3 from 1 to 2
move 3 from 7 to 1
move 2 from 2 to 9
move 2 from 6 to 9
move 1 from 8 to 3
move 19 from 3 to 9
move 1 from 6 to 3
move 3 from 7 to 4
move 1 from 2 to 5
move 2 from 1 to 9
move 2 from 2 to 3
move 33 from 9 to 7
move 1 from 1 to 7
move 3 from 3 to 7
move 1 from 3 to 2
move 1 from 5 to 8
move 4 from 9 to 7
move 1 from 5 to 2
move 2 from 4 to 9
move 4 from 9 to 7
move 3 from 2 to 1
move 1 from 4 to 3
move 1 from 9 to 7
move 1 from 8 to 3
move 7 from 7 to 3
move 3 from 1 to 9
move 4 from 9 to 7
move 4 from 5 to 8
move 3 from 3 to 4
move 3 from 4 to 5
move 3 from 3 to 6
move 2 from 6 to 5
move 38 from 7 to 5
move 40 from 5 to 3
move 4 from 8 to 9
move 1 from 6 to 9
move 1 from 5 to 1
move 3 from 7 to 6
move 1 from 7 to 5
move 38 from 3 to 8
move 1 from 1 to 9
move 3 from 9 to 6
move 5 from 3 to 9
move 4 from 8 to 6
move 1 from 7 to 1
move 3 from 5 to 9
move 1 from 1 to 2
move 10 from 8 to 3
move 5 from 8 to 1
move 3 from 1 to 2
move 9 from 6 to 7
move 9 from 3 to 5
move 1 from 7 to 6
move 1 from 3 to 8
move 1 from 7 to 9
move 1 from 1 to 5
move 1 from 1 to 3
move 1 from 9 to 2
move 4 from 2 to 3
move 1 from 2 to 4
move 9 from 8 to 1
move 2 from 9 to 5
move 2 from 1 to 2
move 2 from 3 to 4
move 6 from 8 to 6
move 10 from 5 to 3
move 7 from 3 to 2
move 2 from 1 to 2
move 5 from 1 to 7
move 7 from 9 to 6
move 7 from 6 to 5
move 1 from 4 to 3
move 7 from 7 to 4
move 5 from 3 to 9
move 7 from 2 to 6
move 4 from 7 to 8
move 5 from 8 to 9
move 1 from 2 to 6
move 1 from 3 to 5
move 2 from 2 to 8
move 8 from 4 to 6
move 7 from 9 to 7
move 4 from 7 to 9
move 7 from 9 to 3
move 8 from 3 to 1
move 6 from 5 to 9
move 8 from 1 to 8
move 13 from 8 to 4
move 3 from 9 to 6
move 1 from 8 to 6
move 1 from 7 to 3
move 2 from 4 to 1
move 5 from 9 to 1
move 1 from 3 to 7
move 15 from 6 to 1
move 1 from 7 to 9
move 10 from 4 to 7
move 11 from 7 to 5
move 17 from 1 to 6
move 1 from 9 to 3
move 6 from 6 to 1
move 3 from 5 to 3
move 2 from 4 to 5
move 2 from 7 to 8
move 12 from 5 to 3
move 13 from 6 to 9
move 2 from 8 to 2
move 2 from 5 to 1
move 16 from 3 to 8
move 3 from 2 to 3
move 2 from 3 to 7
move 2 from 7 to 9
move 1 from 3 to 7
move 4 from 8 to 4
move 2 from 4 to 8
move 5 from 1 to 5
move 2 from 4 to 7
move 6 from 6 to 8
move 2 from 8 to 5
move 2 from 1 to 4
move 5 from 8 to 7
move 5 from 6 to 3
move 6 from 9 to 8
move 2 from 9 to 2
move 1 from 1 to 7
move 4 from 5 to 3
move 2 from 2 to 3
move 1 from 4 to 9
move 10 from 3 to 6
move 1 from 3 to 7
move 10 from 7 to 2
move 2 from 5 to 3
move 1 from 4 to 2
move 2 from 6 to 8
move 3 from 6 to 5
move 1 from 6 to 1
move 7 from 2 to 3
move 6 from 8 to 7
move 4 from 6 to 3
move 14 from 8 to 6
move 11 from 6 to 8
move 1 from 1 to 4
move 6 from 7 to 2
move 3 from 5 to 8
move 4 from 1 to 7
move 1 from 2 to 8
move 1 from 2 to 6
move 1 from 3 to 4
move 1 from 5 to 6
move 7 from 8 to 6
move 9 from 3 to 2
move 1 from 8 to 5
+53
View File
@@ -0,0 +1,53 @@
stacks = None
def initStacks(s):
global stacks
stacks = []
for i in range(s):
stacks.append([])
def reverseStacks():
global stacks
newStacks = []
for stack in stacks:
rstack = list(reversed(stack))
newStacks.append(rstack)
stacks = newStacks
def move(amount, source, dest):
for i in range(amount):
try:
srcstack = stacks[source-1]
dststack = stacks[dest-1]
m = srcstack.pop()
dststack.append(m)
except IndexError:
pass
def printAnswer():
answer = ""
for stack in stacks:
answer += stack[-1]
print(answer)
with open("input.txt", "r") as f:
line = "."
while line != "":
line = f.readline().strip()
s = int((len(line)-3)/4 + 1)
if stacks is None:
initStacks(s)
for i in range(s):
char = line[1+i*4]
if char != " ":
stacks[i].append(char)
reverseStacks()
print(stacks)
for line in f.readlines():
data = line.strip().split(" ")
amount = int(data[1])
source = int(data[3])
dest = int(data[5])
move(amount, source, dest)
print(stacks)
printAnswer()
+54
View File
@@ -0,0 +1,54 @@
stacks = None
def initStacks(s):
global stacks
stacks = []
for i in range(s):
stacks.append([])
def reverseStacks():
global stacks
newStacks = []
for stack in stacks:
rstack = list(reversed(stack))
newStacks.append(rstack)
stacks = newStacks
def move(amount, source, dest):
# Get substack of items to move
substack = stacks[source-1][-amount:]
# Remove the items from source
stacks[source-1] = stacks[source-1][:-amount]
# Get destination stack and place items
dststack = stacks[dest-1]
stacks[dest-1] = dststack + substack
def printAnswer():
answer = ""
for stack in stacks:
answer += stack[-1]
print(answer)
with open("input.txt", "r") as f:
line = "."
while line != "":
line = f.readline().strip()
s = int((len(line)-3)/4 + 1)
if stacks is None:
initStacks(s)
for i in range(s):
char = line[1+i*4]
if char != " ":
stacks[i].append(char)
reverseStacks()
print(stacks)
for line in f.readlines():
data = line.strip().split(" ")
amount = int(data[1])
source = int(data[3])
dest = int(data[5])
move(amount, source, dest)
print(stacks)
printAnswer()
+1
View File
@@ -0,0 +1 @@
dcbcsbblhhgdgssmcmqccdwdvwdvvcfvcfvvpvmmwccdqddshhdppcfpfbbfggfjfvvhzhmmsqswsttcgtctggjllhnnqbnnnldlglplvlbvbzztpzzvpphshwwfhhgssvgsvvpfvfzznbznndqqtsqttnvtvqqqrgqrrgzzlqzzbvzbzmzffnbfnbffcggdcggqhqpqzpqzqbbqvbqbhhtzhhrrrprlrclrcrssqspqpbblggfvvbpvbbssvttsztzpzjjwffnpnfnrrqhqgqrrzqzbzzdpdjpplpclpptltztjtztqthtmmmpsmmpjpqpvvshhsfshhrvrdvdggwssdbbzbttlmlmpprmrmlrrmqrqsshjhjljzjnjllbbvjvnnppqbppqqfffrbfbdfbbqppmtppfttqddtzzwbblqqbddgwgqwqzwwpzwzjjbccdjdwwrggrmrtmrtmrrvpptwwcdcwwsdshhjjhwjwqjwwqsshrrbsblssphspsjpssnsmsqswqwfwjwccdvccrqqnsqnsnwsnsmnmccvcqqfjjfljfljfjgjffjvffvjvhjhfhrfrlrrtpphbhwbbvmmnpndnlljdjfjsffvccnhchwhddrccljllmnnhmnmpnnhtnthnhvnhnwnqqjmmgzzvssphhjljbjwjbwwdnwwdvvzpvvhccvjjlclrrppgjgsshghvvzjvvpvvbjjqhjqqfcqffchcmmvdvtddftdtppfnppcnpnznwwpdpjpnpttlbbmmqfqmffqnfnbffbrbgbwggsmsbbfgbbfbzbtzbbvmmdlmlrlnlwwbswsjjpjhhwqwzqznqzqvvwccwvwwcbbpvvwcvcvzzhzchzccbnccjlljsjbjdbbvqbvvfdfgdfggzfzlzmzrznnqsnncmnnljjtcjcfftrthtrhrgrvvjggzpggrcrpcppggdfggpmmwnmnlmlglvvmjvvddsmsjsnjssqffffctczcjzjjlbbhpbbfdbdzbbsjbjnjbbqqjbqjbjjhwhssmvsschhhwppbjppllprpjrppdpfpgpjptjtptplpnptnptpjjmcmnnnhnjhjlhjlhjlhlwwhwmwjjbhhlfffrbbgvvqwvwswtstmmmfpmfpffmcfcrrqsqzqjjjnpnnztnznddlwdldsdbssstzstswwjtttmmwmsmwssvswszsjzsjjsffmccmfccqzzvpmbbbsqffgzdqbjtzhlqdzhlpwghlstcrcrffrnbwjnqgmbmpgttfmsswdqctlrpdnlsgnlldvbfpwtcptvbwftzcnbbscrrcpnwtmllcvsrmwzzlsdmfctdcwsqdlsnzgfpmzrnswhbqjhstztzzmzpcttsgsggnlhvjmcbbrhgqhsfmglpcbdvmmmnfbtbfrqbpcmttjtnwvznbshwrmznnsvpjqjntlzspljnbwtjcqztsfcqlrggrpzjgjsvqqcrmrjmzwdsshqfhbtfmlwmfvtbcgdmjgtcnphfmfmjlbjzrvjslccftnwcchgdwjnlthlwgldjwqwgdptdjdmzdrrzcdpbfrtdgcspjtqdqvzswwdwrhggdrqjjgwwrbwhhlrpqmszvlvjfqptncjlscvzbgzgmsttlbhbfrctnsphjcrcwlhcgrcrsjbrjvptgfbjgjrvtzmnhpzcgptbmrgvstsltnctjphsjdwpdqblfswzfhgjbpfrptlmhfwcpdlzqccgtdvbzhwngrhlqftmlhjprscflgzpflvvpfsjmlnmbzsrlrshvnsqrhhlqdlzhrcbjjjfrbqcdspwsmltcrtlbdnbnvhbbwgqdcncsztbfwztzdbqgcrnvndmpstpncbwvtctzdpmcpvrgqvjjztfwpvjtdqlvcvdpfzgcghsmbcwtzztmqwdpsprgsmfhphqsqmflrjdqzjscgzlnvcwcrlmpdscnhqpqjfdbdftqgttwntdbpnshdwnmwsrslfgnzlnwwwqgdbfnthhqtvbzsqgzjhhghtmvvfhlmlpbghnsvlttzsjlgndhdqmqqfdlqnbfscsnnqzcdwzdlqcnstcbsffghftqvwrsshgwmlnprhdnnwslwfwtmtfzdjwpmlvvdhjvdwrhvdsmpgrdpnqsjpqmhttrmdwllrmnbznwjwvvpjnnbnfzbdnhjbqqrnzgdqbspbqtwdpgsbwpzfdbpvzfjpsgmztnzrpvvhwlfscfvfpfblvplgdbhvjjpdjtnwrmvpjsphvglpsntvwtqwqvprcgwjltddpjngvmzfzhmqnnwglbzsbrcztpplpsmgmcfgzgpbtgsjrfvdzzcsthznvdpbwvdlcgdhncsjdvpcbbmtrqczctjljdfghsrvrsfjglqqhjttfdhqdqwhzhqrggsjwlldrntwmmbftgqjhpvvctpbtgltnttlhdqbsbwcqmctwlsnhmhncpmnzsllmjhcgnlfgvpcqrwzvsstgwbvjtnrlbblclzdrcwddrwnptqzgwdwtgrfwffpzjmwbqfmmrcfzfzjbwsslbhggtwtcrlhffzgfgrtljgnznnlgzwfmtwwqzhlthvpfclrtmrqfzrggbctzfsmjhrtwzpfrnhwwprnbwmvwvmvnzqpggmzgslctqbqdtvhgzjwzsnblqzmcpnpwllzhvzzmfqzfjlrsrcnjzqdzbpjftljtzvvmrjszvqllnhhgnrnqttnwlvllphjtnmlwqhcvmbsvnwtcdmhsmhdcwqwtvggcqfpdsrsscmhcvfzvdnffrfhdfmgbsghdbpwdwrdmlvsnzwcfchcqvccszdqrbnfvrpbftcwnjmczwgqzmtlmrthlhtjpmchltcmcqwgfgshtvtpmcmpbmlnjmhnpdsljjmjzddnlgtnjqztzsqqlhtqcscjvjncjvfcvsgjhqgzrmtjjcgvvmwswffmlcvlhqhbvrldrvbrfmmqcnqmfzlsghvclrdbsvcbqspgbzmjnlrdhvncnbcfmdlqrssggsmlwwglcjjzmcdwcnrgvvmgjcfbzlncmgqtllgldbdztbtfcjczqtjjlnpqmrgtjsmrbscvqlgqghfbgwccgwrjrzrsbbrqnjcqhllsqmrjtzmjnndwwmdjfhspjpgdcjjpdvwrsgjcfnpllnnnccvnfvqbpddgvbgbsbczmbzrbclczljdmbhpgmhwlqvnjzjwzzfjmsmcchjrqrtmhwlgjsptctlbtdnrqgntcvngcrqdqptfmhbvlhrqchdtwdwbrbqwtswzcrrfndldwmjbczppzrnncvvqsmpvvqcnsvhprhlmrhnjbwdvrbbwwdtmzrqttschrztgjcshlhfbmhmwrrmwgmfshpdhjwgdmcfdvqrmmwgmzbrlgbfltvlzmvqbgvhppdzglqbdlrhjnntnfvtmzjqccmqdbpjqphfggmjqdrndhclcfvqsjrsbcgdhcrbjsdjmwrzvpfpcjwjfdltztfzgmlzqzmztpvbflppgnhdzssznngfjggczdtdmcczjzfsnflpwqrbggmqdbbprfptzcdqvhrvszzjqqjlrlrdpwcnzhvgfhpcdbbgsfmtnszwbhwcdwdghqqctwqlqrlqbdwfvjnhcpmzchqfrwzhzgslzhncmrlrpzcjczvzwcvwcldbmscfqnnqnwwvrpfvjswqmhgmhgnmfzpsjmdhbpvsftccttvdpcdzcnzswqmtrwbctpbgmzrvrrshjjgdqsqrwfpcmsbvqhccvjqpztlttwjjdtbmwslschpqjjllvjcjwtmrtvvwdzglstvtpndmmzcpgqsvqgfdtqdjdctsbsbmqzqhtczhgqgwbdlrhjrwcmtbzfndsbnpnhmsdhtghwwzvtdwtscdnwzmrjrsrjvvbvrpbszchwbltrjbcqmlhqnzcfbhjqnsjghlnlbsrgzrrzfvslwpbqmgfswhgjdsdfrzsdhvdqvqfbcbvmbfhjfpzwlbspcbnvrgpfnmjbwbsnpqpqhjpsnwrlcmfhpdmjbvpnctcfqgdmwzblsnr
+20
View File
@@ -0,0 +1,20 @@
from collections import deque
LEN = 4
dups = deque(maxlen=LEN)
def hasdups():
for x in dups:
if dups.count(x) > 1:
return True
return False
with open("input.txt", "r") as f:
line = f.readline().strip()
for (index, char) in enumerate(line):
dups.append(char)
print(char)
print(dups)
if len(dups) >= LEN and not hasdups():
print(index+1)
break
+20
View File
@@ -0,0 +1,20 @@
from collections import deque
LEN = 14
dups = deque(maxlen=LEN)
def hasdups():
for x in dups:
if dups.count(x) > 1:
return True
return False
with open("input.txt", "r") as f:
line = f.readline().strip()
for (index, char) in enumerate(line):
dups.append(char)
print(char)
print(dups)
if len(dups) >= LEN and not hasdups():
print(index+1)
break
+980
View File
@@ -0,0 +1,980 @@
$ cd /
$ ls
dir csjncqmr
dir fnfjhvsp
dir mhfrct
dir pgmgbfcl
dir qcf
dir wrsjr
$ cd csjncqmr
$ ls
8827 vdrdm.pfj
$ cd ..
$ cd fnfjhvsp
$ ls
dir csjncqmr
dir czpmg
162385 dcgph
7135 hff.cdt
$ cd csjncqmr
$ ls
121543 gzjdsn.wlc
dir ljq
$ cd ljq
$ ls
dir cwlrlvf
dir jpqjhhpg
$ cd cwlrlvf
$ ls
151219 dcgph
$ cd ..
$ cd jpqjhhpg
$ ls
188355 dcgph
38458 gfgl.hlg
$ cd ..
$ cd ..
$ cd ..
$ cd czpmg
$ ls
168232 dcgph
143031 gzjdsn.wlc
$ cd ..
$ cd ..
$ cd mhfrct
$ ls
dir clm
66710 dcgph
232576 mtfhpcnj
$ cd clm
$ ls
dir pgmgbfcl
$ cd pgmgbfcl
$ ls
110296 qbfhj.tmn
$ cd ..
$ cd ..
$ cd ..
$ cd pgmgbfcl
$ ls
163613 cgchl
dir nnlr
123977 rrwbnmlh.jtt
dir tjhzggs
dir wfl
252837 wpgrl
$ cd nnlr
$ ls
103051 flp
dir qrhlzd
dir rcgmhz
dir snwrlr
dir vgj
dir znbzt
$ cd qrhlzd
$ ls
dir crg
246915 dcgph
264791 fcphzfb.fmb
299291 flp
dir mjqsg
297202 pgmgbfcl
dir sbbzgbz
dir wnsnssbg
$ cd crg
$ ls
55556 flp
185529 jswdvn
$ cd ..
$ cd mjqsg
$ ls
dir fnfjhvsp
dir jfbzjz
dir rwg
$ cd fnfjhvsp
$ ls
24945 cctwbs
170960 csjncqmr
316168 ljffgvvz.zld
187325 pgmgbfcl.fzv
74133 qbfhj.tmn
dir tjhzggs
dir vjmgmdz
$ cd tjhzggs
$ ls
287777 csjncqmr.nbd
$ cd ..
$ cd vjmgmdz
$ ls
dir vgpb
$ cd vgpb
$ ls
202578 bbbg.hlr
$ cd ..
$ cd ..
$ cd ..
$ cd jfbzjz
$ ls
207736 tjhzggs.cql
$ cd ..
$ cd rwg
$ ls
184997 csjncqmr
4378 dcgph
55767 qnc.wvv
$ cd ..
$ cd ..
$ cd sbbzgbz
$ ls
321376 csjncqmr
317438 flp
9263 hrs
$ cd ..
$ cd wnsnssbg
$ ls
dir jdjv
$ cd jdjv
$ ls
153354 gzjdsn.wlc
$ cd ..
$ cd ..
$ cd ..
$ cd rcgmhz
$ ls
dir tjhzggs
$ cd tjhzggs
$ ls
299192 jfbzjz.ttg
$ cd ..
$ cd ..
$ cd snwrlr
$ ls
30314 csjncqmr.jvn
dir hcf
$ cd hcf
$ ls
81979 jfbzjz.pfz
179459 ngh
$ cd ..
$ cd ..
$ cd vgj
$ ls
278579 jbn.rgz
dir jzj
dir lnbhh
dir pgmgbfcl
dir qgvspcpm
$ cd jzj
$ ls
295808 hrs
220437 vqbcl
$ cd ..
$ cd lnbhh
$ ls
212203 nfmhd.hbq
233853 qgz.mcd
$ cd ..
$ cd pgmgbfcl
$ ls
dir mmbdpj
138462 mwcdrpm.spr
288430 pgmgbfcl.pwd
132880 rdmwtn.qjj
41775 rfqb.djh
dir rnd
69597 thnbf
$ cd mmbdpj
$ ls
158542 hrs
306559 tjhzggs
$ cd ..
$ cd rnd
$ ls
223745 fnfjhvsp.hgt
138236 gdmtnffs.cdm
dir gmzb
dir hvl
266178 mzwmjl.rqq
dir njpq
33906 qbfhj.tmn
dir tjhzggs
$ cd gmzb
$ ls
186579 nsbfn.lsd
$ cd ..
$ cd hvl
$ ls
312925 csjncqmr.sbc
75264 gqp
81003 gzjdsn.wlc
$ cd ..
$ cd njpq
$ ls
188139 lbnrr.pwd
213545 qgqddvwf.hfl
$ cd ..
$ cd tjhzggs
$ ls
dir dlwvc
191782 jfbzjz
dir tbldpln
$ cd dlwvc
$ ls
75927 jvhjtnft
260563 qbfhj.tmn
dir vlg
$ cd vlg
$ ls
187660 hgm
dir rhr
273019 tdgr.crr
$ cd rhr
$ ls
286129 wnn.jgn
$ cd ..
$ cd ..
$ cd ..
$ cd tbldpln
$ ls
173546 pdfrsq.pnb
$ cd ..
$ cd ..
$ cd ..
$ cd ..
$ cd qgvspcpm
$ ls
dir dhrbsl
286566 fldhvbq
209725 gzjdsn.wlc
148148 nspz.gwc
111003 tjhzggs
$ cd dhrbsl
$ ls
58390 gzjdsn.wlc
150545 hrs
$ cd ..
$ cd ..
$ cd ..
$ cd znbzt
$ ls
211651 gwhb.mfz
$ cd ..
$ cd ..
$ cd tjhzggs
$ ls
dir hgr
229076 jfbzjz.dfh
dir ptfcbwwv
51893 qbfhj.tmn
97712 qgtvfh.hvs
$ cd hgr
$ ls
dir hwvgjdq
dir vwvbt
$ cd hwvgjdq
$ ls
dir pgmgbfcl
$ cd pgmgbfcl
$ ls
dir qgs
$ cd qgs
$ ls
188108 hrs
$ cd ..
$ cd ..
$ cd ..
$ cd vwvbt
$ ls
169212 tfrm.gjb
$ cd ..
$ cd ..
$ cd ptfcbwwv
$ ls
67829 lpszzl
$ cd ..
$ cd ..
$ cd wfl
$ ls
dir hfcm
$ cd hfcm
$ ls
73872 flp
$ cd ..
$ cd ..
$ cd ..
$ cd qcf
$ ls
dir ctjw
177175 dwzmnpr
dir fqldn
dir hmjnnjjj
301788 hrs
dir lgmld
dir pgmgbfcl
76771 qzsbm.zdb
dir scbgn
234764 vhrlgcf
$ cd ctjw
$ ls
139505 mflt.hnr
$ cd ..
$ cd fqldn
$ ls
dir bgq
7260 flgrh.tmt
dir fnfjhvsp
dir fnr
dir gsnqjmw
10529 gzjdsn.wlc
22877 hrs
dir hzbrgrfq
dir snmbwrzn
dir tjhzggs
6773 tzhsjsc
$ cd bgq
$ ls
40780 gzjdsn.wlc
233301 mnzdbpc
dir mpdjgbgf
303076 qbfhj.tmn
dir qjs
189723 sbzn.dtj
dir vhnqcrd
$ cd mpdjgbgf
$ ls
227105 dcgph
298219 dprcwts.vdt
$ cd ..
$ cd qjs
$ ls
214072 pgmgbfcl
264897 qbfhj.tmn
$ cd ..
$ cd vhnqcrd
$ ls
178950 fnfjhvsp
180561 pgmgbfcl.mst
312980 pgmgbfcl.twp
$ cd ..
$ cd ..
$ cd fnfjhvsp
$ ls
141191 fnfjhvsp.bng
81709 pgmgbfcl.sfw
$ cd ..
$ cd fnr
$ ls
316638 flp
dir fnfjhvsp
dir fqdnn
267054 gdnln
dir hfcrzwvm
dir rdljd
319112 wpcmfbr.zgp
$ cd fnfjhvsp
$ ls
115581 hrs
dir jfbzjz
$ cd jfbzjz
$ ls
170398 qbfhj.tmn
$ cd ..
$ cd ..
$ cd fqdnn
$ ls
dir cfg
dir jbjltw
$ cd cfg
$ ls
dir qljztr
dir tnsw
dir zhnqp
$ cd qljztr
$ ls
64638 bnlsrfb
63440 csjncqmr
206111 gzjdsn.wlc
207890 hrs
265995 pgmgbfcl.zcw
$ cd ..
$ cd tnsw
$ ls
85166 lsflqzmc
$ cd ..
$ cd zhnqp
$ ls
217666 csjncqmr.cch
$ cd ..
$ cd ..
$ cd jbjltw
$ ls
88043 dcgph
238483 hrs
189734 jnvwjs
243936 pgmgbfcl.wsr
$ cd ..
$ cd ..
$ cd hfcrzwvm
$ ls
dir vwc
$ cd vwc
$ ls
82566 shc.qhj
$ cd ..
$ cd ..
$ cd rdljd
$ ls
68011 ptw.bgd
$ cd ..
$ cd ..
$ cd gsnqjmw
$ ls
236818 gzjdsn.wlc
$ cd ..
$ cd hzbrgrfq
$ ls
240924 dcgph
dir dcjsv
dir dsrzdjfm
dir fnfjhvsp
dir hnzm
dir mqb
94014 smpnth.bbm
$ cd dcjsv
$ ls
316708 cmddvb
dir fnfjhvsp
$ cd fnfjhvsp
$ ls
dir fnfjhvsp
$ cd fnfjhvsp
$ ls
dir jqlcvds
$ cd jqlcvds
$ ls
51018 dqfbq.ggm
$ cd ..
$ cd ..
$ cd ..
$ cd ..
$ cd dsrzdjfm
$ ls
262938 csjncqmr.dmm
125129 mwcnlvhv.szp
150590 qbfhj.tmn
dir rrrzpsn
196430 vbdgb
dir vsfbwfdl
$ cd rrrzpsn
$ ls
dir tjhzggs
281655 tjhzggs.btg
dir tsjzf
$ cd tjhzggs
$ ls
291402 gbl
dir hctmr
dir hqdmpwl
225075 hrs
dir jfbzjz
51032 tjhzggs.qzr
$ cd hctmr
$ ls
113430 qbfhj.tmn
$ cd ..
$ cd hqdmpwl
$ ls
67634 tjhzggs
$ cd ..
$ cd jfbzjz
$ ls
193552 nmvl.tzj
197076 pgmgbfcl
11047 tjhzggs
$ cd ..
$ cd ..
$ cd tsjzf
$ ls
36205 jwmdtdjv
$ cd ..
$ cd ..
$ cd vsfbwfdl
$ ls
288660 flp
185921 jfbzjz
dir mqmvtddt
124423 nfbfq.dln
dir wzbc
$ cd mqmvtddt
$ ls
85529 bhjp.vvj
$ cd ..
$ cd wzbc
$ ls
77316 flp
271730 pgmgbfcl.lcd
$ cd ..
$ cd ..
$ cd ..
$ cd fnfjhvsp
$ ls
47666 mpwtvwd.fwr
$ cd ..
$ cd hnzm
$ ls
157672 flp
294957 gzjdsn.wlc
297187 lbssg
24223 qbfhj.tmn
dir rdnqrgt
177449 tld.tsd
$ cd rdnqrgt
$ ls
dir nltjzrrr
217347 vrb.gcd
$ cd nltjzrrr
$ ls
dir zzd
$ cd zzd
$ ls
47464 flp
dir fnfjhvsp
$ cd fnfjhvsp
$ ls
89424 qtzfddz.btd
$ cd ..
$ cd ..
$ cd ..
$ cd ..
$ cd ..
$ cd mqb
$ ls
105537 tjhzggs.wns
$ cd ..
$ cd ..
$ cd snmbwrzn
$ ls
dir mqt
dir nsdrn
dir rjn
$ cd mqt
$ ls
233842 pgmgbfcl
$ cd ..
$ cd nsdrn
$ ls
67018 dcgph
17296 flp
274166 gzjdsn.wlc
186308 jfbzjz
280195 lvbsrvwm.zlq
dir pjv
dir thlp
$ cd pjv
$ ls
123190 rfbj.gmq
$ cd ..
$ cd thlp
$ ls
141308 flp
188164 jfbzjz
299013 pgmgbfcl
171259 qbfhj.tmn
dir qsljb
$ cd qsljb
$ ls
291980 glcnlj.swh
$ cd ..
$ cd ..
$ cd ..
$ cd rjn
$ ls
181047 fqmhpg.hpl
$ cd ..
$ cd ..
$ cd tjhzggs
$ ls
dir csjncqmr
274202 fhfjvdjc.swt
dir fnfjhvsp
97050 frbpp.wch
dir gnbtgdr
dir jfbzjz
dir lpg
dir pgmgbfcl
dir twcdfdcv
dir wzd
dir zllcflrn
$ cd csjncqmr
$ ls
dir chpmwsfj
dir csjncqmr
57088 fnfjhvsp.jqg
52097 vgcm.dpv
$ cd chpmwsfj
$ ls
279480 tjhzggs.srw
$ cd ..
$ cd csjncqmr
$ ls
13716 dcgph
dir fqb
dir jfbzjz
dir msvlnt
88312 pgmgbfcl.qcf
$ cd fqb
$ ls
dir mmjfbvq
$ cd mmjfbvq
$ ls
79822 flp
$ cd ..
$ cd ..
$ cd jfbzjz
$ ls
302531 csjncqmr
164326 dcgph
8277 fnfjhvsp.rbv
dir jgsrgrtc
dir zwdgcd
$ cd jgsrgrtc
$ ls
60317 gzjdsn.wlc
$ cd ..
$ cd zwdgcd
$ ls
171967 fpls.fvd
$ cd ..
$ cd ..
$ cd msvlnt
$ ls
83178 cnhzh
11226 tjhzggs
$ cd ..
$ cd ..
$ cd ..
$ cd fnfjhvsp
$ ls
89882 dcgph
212817 qbfhj.tmn
257899 tjhzggs
$ cd ..
$ cd gnbtgdr
$ ls
dir flltghn
dir fnfjhvsp
dir jfbzjz
300698 ngcsnwb
292809 qtcqhdq
dir vbwjgf
280270 wbzcr.sgn
$ cd flltghn
$ ls
111452 rhgfv
$ cd ..
$ cd fnfjhvsp
$ ls
dir lbznfb
31273 nrtrqqc.cth
$ cd lbznfb
$ ls
175736 ljpr.cwm
$ cd ..
$ cd ..
$ cd jfbzjz
$ ls
237625 tjhzggs
$ cd ..
$ cd vbwjgf
$ ls
269242 jrrw.ljb
106705 pqnbrbt
$ cd ..
$ cd ..
$ cd jfbzjz
$ ls
dir dnn
$ cd dnn
$ ls
19045 dcgph
187257 tjhzggs.qzg
$ cd ..
$ cd ..
$ cd lpg
$ ls
101509 fnfjhvsp.nnt
221211 ldgjngjq
$ cd ..
$ cd pgmgbfcl
$ ls
dir bzbdphz
37920 flp
dir wpsm
$ cd bzbdphz
$ ls
252099 ffsfqfdw
312106 htft
298880 jfbvz.znw
135204 lrwccthr
dir zhbqf
108144 zsbbfhz.drr
$ cd zhbqf
$ ls
dir gtw
298022 svpgsrgj.ljz
$ cd gtw
$ ls
dir csjncqmr
dir rpzjg
$ cd csjncqmr
$ ls
278962 flp
272127 tjhzggs
$ cd ..
$ cd rpzjg
$ ls
92241 flp
$ cd ..
$ cd ..
$ cd ..
$ cd ..
$ cd wpsm
$ ls
15936 flp
241514 qbfhj.tmn
245049 rjgwzlq.qrw
$ cd ..
$ cd ..
$ cd twcdfdcv
$ ls
140758 bjm
78772 dcgph
114059 mqsgrc.qcb
$ cd ..
$ cd wzd
$ ls
dir fnfjhvsp
dir mcbnp
$ cd fnfjhvsp
$ ls
72702 csjncqmr.jfn
120586 dcgph
$ cd ..
$ cd mcbnp
$ ls
12494 fnfjhvsp.frc
182092 gsv
17859 pdbvmblc.vng
116984 pfbdf
113843 prshrmg.srm
$ cd ..
$ cd ..
$ cd zllcflrn
$ ls
30966 flp
245820 jfbzjz.rnd
$ cd ..
$ cd ..
$ cd ..
$ cd hmjnnjjj
$ ls
134366 dcgph
212399 dtsb
255795 zhbcjtr
$ cd ..
$ cd lgmld
$ ls
55248 pgmgbfcl
62265 pgmgbfcl.nbg
240733 zhmff
$ cd ..
$ cd pgmgbfcl
$ ls
232717 fnfjhvsp
219581 gtcjbwpz.lmz
47399 gzjdsn.wlc
22814 hjqf
296672 hrs
dir nrzf
dir wqgcmnpp
dir wwvmdjz
dir zlhv
$ cd nrzf
$ ls
18406 dcgph
dir mhm
$ cd mhm
$ ls
95168 pgmgbfcl.hqv
$ cd ..
$ cd ..
$ cd wqgcmnpp
$ ls
dir csjncqmr
189963 dvcd.tnh
dir gzqrt
dir njffft
dir qvqp
6981 tjhzggs
dir wgfnlfsd
$ cd csjncqmr
$ ls
307371 cdptrw.rfm
$ cd ..
$ cd gzqrt
$ ls
dir pwsqss
$ cd pwsqss
$ ls
173397 flp
$ cd ..
$ cd ..
$ cd njffft
$ ls
dir bzhzg
dir tjhzggs
$ cd bzhzg
$ ls
213821 pgmgbfcl
$ cd ..
$ cd tjhzggs
$ ls
dir szvfzgj
$ cd szvfzgj
$ ls
196306 tjhzggs.hjh
$ cd ..
$ cd ..
$ cd ..
$ cd qvqp
$ ls
dir pgmgbfcl
$ cd pgmgbfcl
$ ls
114456 flp
252954 pgmgbfcl
$ cd ..
$ cd ..
$ cd wgfnlfsd
$ ls
212011 gzjdsn.wlc
$ cd ..
$ cd ..
$ cd wwvmdjz
$ ls
70022 dcgph
dir hjgvstp
dir jhgb
276853 qbfhj.tmn
242756 qdqswjjd.wnn
dir tjhzggs
292963 wcgmgmz.shb
$ cd hjgvstp
$ ls
24056 tdjwdw
$ cd ..
$ cd jhgb
$ ls
90571 gzjdsn.wlc
132326 rrvfml.dms
$ cd ..
$ cd tjhzggs
$ ls
29139 dmrsz.qhc
$ cd ..
$ cd ..
$ cd zlhv
$ ls
315120 dcgph
290175 pgvlcvpb
$ cd ..
$ cd ..
$ cd scbgn
$ ls
258300 bcchv.qsn
$ cd ..
$ cd ..
$ cd wrsjr
$ ls
dir csjncqmr
dir jfbzjz
dir nmfmqb
dir svgtrz
dir zjvhmd
$ cd csjncqmr
$ ls
148619 qbfhj.tmn
$ cd ..
$ cd jfbzjz
$ ls
dir csjncqmr
dir flrhpzt
dir fnfjhvsp
dir gpwv
dir lwrtc
$ cd csjncqmr
$ ls
dir czmlfmf
137365 flp
dir hggbs
107369 mpgm.lbl
$ cd czmlfmf
$ ls
dir hnpjvq
$ cd hnpjvq
$ ls
41339 fnfjhvsp.wnv
$ cd ..
$ cd ..
$ cd hggbs
$ ls
273367 qbfhj.tmn
$ cd ..
$ cd ..
$ cd flrhpzt
$ ls
200923 fwb
62059 hrs
$ cd ..
$ cd fnfjhvsp
$ ls
dir gdnmpgn
256037 hrs
$ cd gdnmpgn
$ ls
64024 jmww.gbb
$ cd ..
$ cd ..
$ cd gpwv
$ ls
159155 hrs
$ cd ..
$ cd lwrtc
$ ls
150299 nzvqj.dsv
129702 pgmgbfcl.lrt
dir zvgb
$ cd zvgb
$ ls
304137 hrs
$ cd ..
$ cd ..
$ cd ..
$ cd nmfmqb
$ ls
139823 jfbzjz
299946 nqqscdn.wsw
$ cd ..
$ cd svgtrz
$ ls
dir jdlvtm
123801 phhrgrbs
$ cd jdlvtm
$ ls
267972 tbgcnf.pqz
$ cd ..
$ cd ..
$ cd zjvhmd
$ ls
287427 csjncqmr.tfj
297578 hhhp.jvt
+29
View File
@@ -0,0 +1,29 @@
dirstack = [] # Stack of directories we are currently at
directories = {} # Maps paths to total filesums
def addsize(size):
for (i, dir) in enumerate(dirstack):
path = "/".join(dirstack[:i+1])
if not path in directories:
directories[path] = 0
directories[path] += size
with open("input.txt", "r") as f:
for line in f.readlines():
line = line.strip()
if line[0] == '$' and line[2] == 'c':
folder = line.split("$ cd ")[1]
if folder == '..':
dirstack.pop()
else:
dirstack.append(folder)
else:
indicator = line.split(" ")[0]
try:
size = int(indicator)
addsize(size)
except:
pass
sum = 0
[sum := sum + directories[x] for x in directories if directories[x] <= 100000]
print(sum)
+40
View File
@@ -0,0 +1,40 @@
dirstack = [] # Stack of directories we are currently at
directories = {} # Maps paths to total filesums
TOTAL = 70000000
REQUIRED = 30000000
def addsize(size):
for (i, dir) in enumerate(dirstack):
path = "/".join(dirstack[:i+1])
if not path in directories:
directories[path] = 0
directories[path] += size
with open("input.txt", "r") as f:
for line in f.readlines():
line = line.strip()
if line[0] == '$' and line[2] == 'c':
folder = line.split("$ cd ")[1]
if folder == '..':
dirstack.pop()
else:
dirstack.append(folder)
else:
indicator = line.split(" ")[0]
try:
size = int(indicator)
addsize(size)
except:
pass
FREE = TOTAL - directories["/"]
NEEDED = REQUIRED-FREE
print(f"We have {FREE} space, but need {REQUIRED} so we need {NEEDED}")
candidates = sorted(directories, key=directories.get)
for candidate in candidates:
if directories[candidate] > NEEDED:
print(directories[candidate])
break
+99
View File
@@ -0,0 +1,99 @@
220311003030020403303010231542401043011111536600504555130543502251500155511123400111142111343321103
112300011121001442140224403450400301003445152052111053406435260452010444113124523432423300221011201
030210134102431134241312344101144221020600111540536441502615542526153154322105541510214043131203100
030101204414334205055102335112246411105640305204415413550445035636165511302522134021011341010042300
231333121332014225332001232453144631040416204620146621036153421503540461150044430323330010312004330
313004122100223501210053543222333364566250521251132261434210544505630145430310211300234000331011113
012412044210025224134545004132405043251661531641253433253260055031356132633542211515154121433313333
223403114014255555503000342035532635342046556443773774444450206405043632662330550032142542032211310
100242031223054535004460205122361434151616645373551326734736364332154140655340554322211502021301422
431401423325414423503035443254641056037467637176755423251235366605645121661130561335005033241143132
303223123304431041420426563622516421776753123353756124574661615471604435005422154332445143042340424
320243144004444013251031465604646513135642442262575441115642435263165223031065313000204222125412104
122002131150055031454645120263773775533157351513157276612761513114315414102323430550452520223024322
442400504041420321512465200531646152466567424527451215215141725631467534743125652340253015312012211
304232133233542213221531357775467547373337162134833471236477571463472456124542445620504144015151422
312145240500031634266120023623337132742563423256554635742447513652312413114404640563132134245504334
102241141135325653546102133652773114325462366462547647422525733353647767521436321451530122543005443
144343141455144014314467421341365346542347332643357578865825554673752135624114640556506602451350232
441243044020543461441135565544322184758342838378753352744524773578231564762432525625353423431225210
304443143022414225106232772261446675445426335438555646846447573843847251274211636600312256555303142
303004450304246266227631711622523887473687878273335526667757385748853425345333774363212605153132341
231541553335163641412412276128558625882683583258732273355654747663247263774611741645413153462012134
512540106462151644671623764557535533877366255767846535753758275354368484766426475560164140560220332
200325003256216624167373756725753386556464596984476493863565874285358286562141147544135646330340152
521423426045110455366477454336662744636375686369848368855656338766535868252365342245652406663635444
325143246625651366452465566472785577755464486833753685334599777574426367357427766647745534646000541
142035142614357527172664626867286864497656647539574736765863985878668537672332143435672354342402200
402115663021231111473735247274463488788389969399794455838777463866665252277554546567456140205305335
414425135566351623353185335555739586888579945549558363373688586773657582484573717756461526021030021
153405106165521616675638523724787758457498763486869486593486777373353973322655234123422714165323213
002454525531472631474628833245565848566559859575785679756548368396867676276727237652414610661211503
302304255114244361477257533433435655836968776565755564555784764387349895587874476525477240213363411
000553414531611151674483872897383653598648797654779776549854495335546648627287687525577125431314005
204232400564226421567584754598534645844885494584598457845957476555468784847282275342654247302314615
045115061065473766727826528379367838467987998655957448955985448979477345343826276272532415200621434
550120546646177774768543785974894546878959965974654898945999699595899795644635465425136225335645046
556302536577536445475544794655563486856474558879957857474886955958533847988473852683676313440303640
100626413557777634338424498589945894456646866588958979857649598485767686537762876484212352433166343
242525032474643788477744736865977694759486568659756698755867877857994399566938462833351471633304353
332244425455234733677627699765738456769446855877656577675969585695578538879868362272556755663030020
046343213215513556668558775536566645456859558759858557585895694767986879363445872877411424542656650
515331306274442182557527878856554588685785787696597767559877799855448956494486733433633675325030100
342114227666721672883353894985987947695867576665575699796996867698487579875567433487831322744642364
540065045713275583625867884979954845798686769595688655769979798559495959557938387255665736254225032
106205316767657824665283537587768649899978685567877997998657967876867864959943625835831345425516321
110141463114412578736753573994676759986999796769898976765559575889778477944885863665286231467300203
644032125671346284562455445368556987856977988668777677796898765568994566565589365633833145272453334
460545273256573436862249486376479568675877557889666967997785859858746988837693345878347636472512302
342136331345115866465777476676554569688888678887879976969695978894988799695783654776835454112416212
434225025543222743684868583694765776998689789867696786677896555888665675748388754436555342746720235
636263555721237243768239677534647848856975986889687766699966676679495588667869627586668724667334426
633103343364326663552898385566948669767567777777999689999758789694789754646685445856262555511451232
152145115364274535448634885836688875775568656777977988887669866875889585488434323387357647235164321
606561462261137874756796373755847876579796979986676786689789579968644748868566647685775135531406152
410250253465337574644637536938599968796887596787787967977585565898468798949444464466542361454714064
030544155175617533452288758984968478476689989798699966779765685659747585749847462537423313543216612
611401537472217227872537567338475586486768666798867797877569576955557776366336886758327422461410414
415330416246627536224487793957998488548995797977587956859855675947744645474575444827645213327445433
463326543611137332345267589896759656899676956979677665577987898996486683785757677647531261533654450
551354362237277258784359489837398969895865988995889897577896657978979937354834372675456336454226041
211262361766132756683339396694359447645468869756878976758868954645658869839363758464364262147012651
301064110125426286655552939776685894477488897677856895895975986758997464544986666756833565662202556
422031301621157472683222989636778884967989975889756595697987999874964343866593357583726217334026440
142162412763327353674277446679689849644977997798579559589469468868677755456373377468464732726265153
526160541173717212627575863388387774875486479777676797468597655477966799599657444765465675456652011
251165660644352242558682573366746386656597499567586485569867549988967847556528856227561237366411636
244163004465433222484736846657978585756446659594884487687847788788366864385335623365445517314254620
434110322132544652235686444994547888848564645978698549679559986658353774636353287547513235651412653
212416233634562415626658545256839386835478785947498686995967444949889456536728324373112557601534261
435434454616326145423432683478946353936357589848746499574966735497735646648468758347532775410534343
024550535014447554553372238424959848484777465879954794488985494338565352746235455264773556034542015
313351426410311176275387482682544444446955766744958787746868936569764356824257673616131462100422002
312201400320061134162664385482788738548983499889989775337437639475985783638433415171251751440654113
154531401000612474551545724587863386473895446934738887837768466589654784428788774456346346103620323
541513516605546126517714738734486588386863574753885799977634778859444263746451367234673456125542350
324542015440362755526154738573554235444678994388498686678788494494784867244816715767735422644331340
521510135354356155436547615523735566855649894646878476694473459843274232545441522235602025363620520
532345411630014517561247224352264584734787368663753568537436638536834367641132615221036214614105230
130500010532446521724141343744446577753367224554979338988268627277568778757764223635125423346352240
005211030240423160452722537744523766476268564266686267267868488672377778241537344633406316523222053
401031212322536165661332777724644222584548667585266553282236873353822564255646212515321264655335000
132050350131063034245353542636634248567866466782822733368854442875738634517754337605264326323310552
242055145053551300641665774617717158484378377847863722225235683876346726415335576520434133423315140
420212431450462115612104535173257643832557837826233786667255842463474555124456032603252542441550451
101143034532526023313401212777267175116483624466566678638424736755742575654354414153232603110043024
004112000553532226456602061357464774411621253576768283372377472122417645272222265456426540303044330
000214140151415353051123241641452172357611716354273226363355267157417641644250131530261244033002212
314433040204132402111422555355165354124166712274546472647636332665351566642543566162041224054110430
120030403353224333631161514616621361515441672717213326172637617441126174245110550454053211154510143
044113301243535050630534325651052732333667672334663256444256677252744553434143625412515552022242411
212301204302220222103310242332364247143553146724275737653536435375450216300335034255232215432400044
100214223250210102122355012452525521151534667317437271422273165610411234111153420355224541411214011
102220004040333521144201535252045402043667711456465135367727200341240201205445503433001025222412401
301132133014323404415304656535542542535034524663742746216234614446555616434144505534244502220323201
001313232330211424313343111141503353422354166003563125012466532322024064101325131033325024441212011
333243322424341532020111415135040623435040550552365600044314634602153465313205551350413104214430410
200313334322431220433010514521302362614466565330411136330544661330564424123435134010442411101434301
213232010014424311402320410540520055056234623535443416222222052412461442122102342224042420233001132
211331340224211003504115003251531130611161462410255033600306643200341042155441434302113114300301010
+41
View File
@@ -0,0 +1,41 @@
map = []
def directionVisible(x, y, tree):
treevis = True
if type(x) == range: # Horizontal
for i in x:
if map[y][i] >= tree:
treevis = False
break
elif type(y) == range: # Vertical
for i in y:
if map[i][x] >= tree:
treevis = False
break
return treevis
with open("input.txt", "r") as f:
for line in f.readlines():
map.append(list(line.strip()))
H = len(map)
W = len(map[0])
print(f"Looking at a forest of {H} by {W}, which has {W*H} trees.")
print(f"It has {(W-2)*2+2*H} edge trees visible")
visible = 0
for y in range(H):
for x in range(W):
if x == 0 or y == 0 or x == W-1 or y == H-1:
# Edge tree
visible += 1
else:
# Center tree
tree = map[y][x]
if (
directionVisible(x, range(y-1, -1, -1), tree) or # Up
directionVisible(x, range(y+1, H), tree) or # Down
directionVisible(range(x-1, -1, -1), y, tree) or # Left
directionVisible(range(x+1, W), y, tree)): # Right
visible += 1
print(visible)
+32
View File
@@ -0,0 +1,32 @@
map = []
def directionScore(x, y, tree):
score = 0
if type(x) == range: # Horizontal
for i in x:
score += 1
if map[y][i] >= tree:
break
elif type(y) == range: # Vertical
for i in y:
score += 1
if map[i][x] >= tree:
break
return score
with open("input.txt", "r") as f:
for line in f.readlines():
map.append(list(line.strip()))
H = len(map)
W = len(map[0])
biggestScore = 0
for y in range(H):
for x in range(W):
tree = map[y][x]
score = (directionScore(x, range(y-1, -1, -1), tree) * # Up
directionScore(x, range(y+1, H), tree) * # Down
directionScore(range(x-1, -1, -1), y, tree) * # Left
directionScore(range(x+1, W), y, tree)) # Right
if score > biggestScore:
biggestScore = score
print(biggestScore)
+2000
View File
File diff suppressed because it is too large Load Diff
+41
View File
@@ -0,0 +1,41 @@
seen = set()
head = (0,0)
tail = (0,0)
direction = {
"R": (1, 0),
"L": (-1, 0),
"U": (0, 1),
"D": (0, -1)
}
def moveTail():
global tail
print(f"Calcing move for tail {tail} towards {head}")
if tail[0] == head[0] and abs(tail[1] - head[1]) > 1:
# Vertical move
tail = (tail[0], int((tail[1] + head[1]) / 2))
elif tail[1] == head[1] and abs(tail[0] - head[0]) > 1:
tail = (int((tail[0] + head[0]) / 2), tail[1])
elif abs(tail[0] - head[0]) <= 1 and abs(tail[1] - head[1]) <= 1:
# Touching diagonal, no action required
pass
else:
# Non-touching diagonal, step required
dir = (min(1, max(-1, head[0] - tail[0])), min(1, max(-1, head[1] - tail[1])))
print(f"Moving in {dir}")
tail = (tail[0] + dir[0], tail[1] + dir[1])
print(tail)
with open("input.txt", "r") as f:
for line in f.readlines():
line = line.strip()
[dir, steps] = line.split(" ")
for _ in range(int(steps)):
head = (head[0] + direction[dir][0], head[1] + direction[dir][1])
print(dir, head)
seen.add(tail)
moveTail()
seen.add(tail)
print(seen)
print(len(seen))
+44
View File
@@ -0,0 +1,44 @@
seen = set()
front = (0,0)
tail = (0,0)
snek = [(0,0) for _ in range(10)]
direction = {
"R": (1, 0),
"L": (-1, 0),
"U": (0, 1),
"D": (0, -1)
}
def move(back, front):
new = (0, 0)
if back[0] == front[0] and abs(back[1] - front[1]) > 1:
# Vertical move
new = (back[0], int((back[1] + front[1]) / 2))
elif back[1] == front[1] and abs(back[0] - front[0]) > 1:
new = (int((back[0] + front[0]) / 2), back[1])
elif abs(back[0] - front[0]) <= 1 and abs(back[1] - front[1]) <= 1:
# Touching diagonal, no action required
new = back
else:
# Non-touching diagonal, step required
dir = (min(1, max(-1, front[0] - back[0])), min(1, max(-1, front[1] - back[1])))
new = (back[0] + dir[0], back[1] + dir[1])
return new
def moveSnek():
for i in range(1, 10):
snek[i] = move(snek[i], snek[i-1])
with open("input.txt", "r") as f:
seen.add(snek[9])
for line in f.readlines():
line = line.strip()
[dir, steps] = line.split(" ")
for _ in range(int(steps)):
snek[0] = (snek[0][0] + direction[dir][0], snek[0][1] + direction[dir][1])
moveSnek()
seen.add(snek[9])
print(len(seen))