Compare commits
19 Commits
cb0c5fa868
...
main
Author | SHA1 | Date | |
---|---|---|---|
85b64b3ef6 | |||
762f9b0700 | |||
47a16a9b6a | |||
c474e4b25e | |||
4de4e05050 | |||
afcbbaea49 | |||
83a09fb74b | |||
e2515cc93a | |||
9a84104dbe | |||
dae686df17 | |||
35b065f882 | |||
4678f22963 | |||
3ccc8b3ebf | |||
2c9c2248ab | |||
e0dabfc0a1 | |||
ac039d70e3 | |||
e29c8b94eb | |||
d7416215e7 | |||
bf5c0da352 |
2000
2021/01/input
Normal file
2000
2021/01/input
Normal file
File diff suppressed because it is too large
Load Diff
14
2021/01/part1
Executable file
14
2021/01/part1
Executable file
@@ -0,0 +1,14 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
last_depth = -1
|
||||
count = 0
|
||||
|
||||
with open('input') as f:
|
||||
for line in f:
|
||||
depth = int(line)
|
||||
if last_depth > 0 and last_depth < depth:
|
||||
count = count +1
|
||||
last_depth = depth
|
||||
|
||||
print(count)
|
||||
|
25
2021/01/part2
Executable file
25
2021/01/part2
Executable file
@@ -0,0 +1,25 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
last = -1
|
||||
count = 0
|
||||
|
||||
with open('input') as f:
|
||||
window = []
|
||||
for line in f:
|
||||
depth = int(line)
|
||||
|
||||
window.append(depth)
|
||||
if len(window) < 3:
|
||||
continue
|
||||
|
||||
if len(window) > 3:
|
||||
window.pop(0)
|
||||
|
||||
cur = sum(window)
|
||||
|
||||
if last > 0 and last < cur:
|
||||
count = count +1
|
||||
last = cur
|
||||
|
||||
print(count)
|
||||
|
1000
2021/02/input
Normal file
1000
2021/02/input
Normal file
File diff suppressed because it is too large
Load Diff
24
2021/02/part1
Executable file
24
2021/02/part1
Executable file
@@ -0,0 +1,24 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
depth = 0
|
||||
hPos = 0
|
||||
|
||||
with open('input') as f:
|
||||
for line in f:
|
||||
cmd, numStr = line.split(" ", 2)
|
||||
num = int(numStr)
|
||||
|
||||
# match...case is python 3.10+
|
||||
if cmd == "forward":
|
||||
hPos = hPos + num
|
||||
elif cmd == "backward":
|
||||
hPos = hPos - num
|
||||
elif cmd == "up":
|
||||
depth = depth - num
|
||||
elif cmd == "down":
|
||||
depth = depth + num
|
||||
else:
|
||||
raise "unknown command: "+cmd
|
||||
|
||||
print(depth * hPos)
|
||||
|
26
2021/02/part2
Executable file
26
2021/02/part2
Executable file
@@ -0,0 +1,26 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
depth = 0
|
||||
hPos = 0
|
||||
aim = 0
|
||||
|
||||
with open('input') as f:
|
||||
for line in f:
|
||||
cmd, numStr = line.split(" ", 2)
|
||||
num = int(numStr)
|
||||
|
||||
# match...case is python 3.10+
|
||||
if cmd == "forward":
|
||||
hPos = hPos + num
|
||||
depth = depth + (aim*num)
|
||||
elif cmd == "backward":
|
||||
hPos = hPos - num
|
||||
elif cmd == "up":
|
||||
aim = aim - num
|
||||
elif cmd == "down":
|
||||
aim = aim + num
|
||||
else:
|
||||
raise "unknown command: "+cmd
|
||||
|
||||
print(depth * hPos)
|
||||
|
1000
2021/03/input
Normal file
1000
2021/03/input
Normal file
File diff suppressed because it is too large
Load Diff
28
2021/03/part1
Executable file
28
2021/03/part1
Executable file
@@ -0,0 +1,28 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
gamma = 0
|
||||
epsilon = 0
|
||||
|
||||
with open('input') as f:
|
||||
total = 0
|
||||
g_counts = [0,0,0,0,0,0,0,0,0,0,0,0]
|
||||
e_counts = [0,0,0,0,0,0,0,0,0,0,0,0]
|
||||
|
||||
for line in f:
|
||||
total += 1
|
||||
for idx, chr in enumerate(line[0:12]):
|
||||
if chr == '1':
|
||||
g_counts[idx]+=1
|
||||
else:
|
||||
e_counts[idx]+=1
|
||||
|
||||
target = total / 2
|
||||
for idx, val in enumerate(g_counts):
|
||||
if val > target:
|
||||
gamma += (1 << (11-idx))
|
||||
for idx, val in enumerate(e_counts):
|
||||
if val > target:
|
||||
epsilon += (1 << (11-idx))
|
||||
|
||||
print(gamma * epsilon)
|
||||
|
2267
2022/01/input
Normal file
2267
2022/01/input
Normal file
File diff suppressed because it is too large
Load Diff
23
2022/01/part1
Executable file
23
2022/01/part1
Executable file
@@ -0,0 +1,23 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
elves = []
|
||||
|
||||
with open('input') as f:
|
||||
elf = []
|
||||
for line in f:
|
||||
if line == "\n":
|
||||
elves.append(elf)
|
||||
elf = []
|
||||
else:
|
||||
calories = int(line)
|
||||
elf.append(calories)
|
||||
|
||||
most = 0
|
||||
|
||||
for elf in elves:
|
||||
calories = sum(elf)
|
||||
if calories > most:
|
||||
most = calories
|
||||
|
||||
print(most)
|
||||
|
15
2022/01/part2
Executable file
15
2022/01/part2
Executable file
@@ -0,0 +1,15 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
elves = []
|
||||
|
||||
with open('input') as f:
|
||||
elf = []
|
||||
for line in f:
|
||||
if line == "\n":
|
||||
elves.append(elf)
|
||||
elf = []
|
||||
else:
|
||||
calories = int(line)
|
||||
elf.append(calories)
|
||||
|
||||
print(sum(sorted(map(sum, elves), reverse=True)[0:3]))
|
2500
2022/02/input
Normal file
2500
2022/02/input
Normal file
File diff suppressed because it is too large
Load Diff
33
2022/02/part1
Executable file
33
2022/02/part1
Executable file
@@ -0,0 +1,33 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
# lose: 0
|
||||
# draw: 3
|
||||
# win: 6
|
||||
|
||||
outcomes = {
|
||||
'A': { # rock: 1
|
||||
'X': 1 + 3, # rock
|
||||
'Y': 2 + 6, # paper
|
||||
'Z': 3 + 0 # scissors
|
||||
},
|
||||
'B': { # paper: 2
|
||||
'X': 1 + 0, # rock
|
||||
'Y': 2 + 3, # paper
|
||||
'Z': 3 + 6 # scissors
|
||||
},
|
||||
'C': { # scissors: 3
|
||||
'X': 1 + 6, # rock
|
||||
'Y': 2 + 0, # paper
|
||||
'Z': 3 + 3 # scissors
|
||||
}
|
||||
}
|
||||
|
||||
score = 0
|
||||
|
||||
with open('input') as f:
|
||||
for line in f:
|
||||
moves = line.rstrip().split(" ")
|
||||
score = score + outcomes[moves[0]][moves[1]]
|
||||
|
||||
print(score)
|
||||
|
66
2022/02/part2
Executable file
66
2022/02/part2
Executable file
@@ -0,0 +1,66 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
# lose: 0
|
||||
# draw: 3
|
||||
# win: 6
|
||||
|
||||
# x: need to lose
|
||||
# y: need to draw
|
||||
# z: need to win
|
||||
|
||||
ROCK = 'A'
|
||||
PAPER = 'B'
|
||||
SCISSORS = 'C'
|
||||
|
||||
LOSE = 'X'
|
||||
DRAW = 'Y'
|
||||
WIN = 'Z'
|
||||
|
||||
outcomes = {
|
||||
ROCK: { # rock: 1
|
||||
ROCK: 1 + 3, # rock
|
||||
PAPER: 2 + 6, # paper
|
||||
SCISSORS: 3 + 0 # scissors
|
||||
},
|
||||
PAPER: { # paper: 2
|
||||
ROCK: 1 + 0, # rock
|
||||
PAPER: 2 + 3, # paper
|
||||
SCISSORS: 3 + 6 # scissors
|
||||
},
|
||||
SCISSORS: { # scissors: 3
|
||||
ROCK: 1 + 6, # rock
|
||||
PAPER: 2 + 0, # paper
|
||||
SCISSORS: 3 + 3 # scissors
|
||||
}
|
||||
}
|
||||
|
||||
strategies = {
|
||||
ROCK: {
|
||||
LOSE: SCISSORS,
|
||||
DRAW: ROCK,
|
||||
WIN: PAPER
|
||||
},
|
||||
PAPER: {
|
||||
LOSE: ROCK,
|
||||
DRAW: PAPER,
|
||||
WIN: SCISSORS
|
||||
},
|
||||
SCISSORS: {
|
||||
LOSE: PAPER,
|
||||
DRAW: SCISSORS,
|
||||
WIN: ROCK
|
||||
}
|
||||
}
|
||||
|
||||
score = 0
|
||||
|
||||
with open('input') as f:
|
||||
for line in f:
|
||||
parts = line.rstrip().split(" ")
|
||||
|
||||
oppo_move = parts[0]
|
||||
our_move = strategies[oppo_move][parts[1]]
|
||||
score = score + outcomes[oppo_move][our_move]
|
||||
|
||||
print(score)
|
||||
|
300
2022/03/input
Normal file
300
2022/03/input
Normal file
@@ -0,0 +1,300 @@
|
||||
fzmmmfwDWFzlQQqjCQjDGnqq
|
||||
tJHJvLJVVttNsvTtTvgHHSVwCsQRQQZCZZMqQMQBnqBMQs
|
||||
LgThNJhNSgTJVgvgtghPhbpfWzfbwfPmpprb
|
||||
lDLnSnLZRjmWrlhrFF
|
||||
PffQJNqJbPZbpmjrrCVNFmCh
|
||||
qzbcbqfMfZMTfQTqqzzTPPLMHgBBBtHRStvgHRDBnSRL
|
||||
WPZfJlZZCMwwZPWCwWzVHQhsshVSsfNQHdvQNN
|
||||
FLGDGGnGdVjQQQDQ
|
||||
ccFFbggLnRcLFRtFBmnJzdZZzZBMpwJlZMppMp
|
||||
RZsnCZssCnDccJCnfcQfHTdzMzhdLdMTqdRqpRLwqq
|
||||
tNrGNrrvGhTThQqw
|
||||
rrFStPgrFWWgvmPgQjtmNtmJcfJcsJsZblDZfbfHDFHnfl
|
||||
RdTfgbbPbJWDDqRvsDsmVG
|
||||
NSQZLQZHpFGLqnLszrJm
|
||||
ZMSNMHhNZMMSQwhQJWPBJCbhbcgtgfcJ
|
||||
qZfqPvLnnZGpGpCJlvsMsMlHJJHB
|
||||
mTWFFFTTtVSJMzzjWgSH
|
||||
RbVdtdFtcrmbRQDDVHDQTbDNwLPLfnqZnhZhQnNwfNqnnn
|
||||
nhHfSGHGThhZjnhrrSnsSczdzlfzzdQQVzRNFNcFdl
|
||||
JJvCDvmCbtvpvbMmDvLbCJpmqdVVVcMcNGzRcNFcRRzRclQd
|
||||
vwDCwtLmwLBDJmCHHjHHWGZHBnsnnj
|
||||
QWTMqZhThbTbLwtGBrQfQQNr
|
||||
jdzSSccVPPcgcLrDBtDVwCfNNC
|
||||
vcBgcmssccplTnnTqsMhWW
|
||||
FlcwZhBhGZhFJnGtZZFwlGsWRLHdWqMzPjWRLTLJHHjdWq
|
||||
vfmrmbpfpMfzjHjfdM
|
||||
VCSmVpmrNDMZhSMcsFnh
|
||||
nHqQVtVZGGwwwnSF
|
||||
fMBBBWCsCfMMbWfbsGmGzFjQGQFCPhFQhF
|
||||
fbcsWpJRsWlcNVLtqtLLQcZQ
|
||||
rgNJdfNJpgpJVMMVfmfVJgCtCTqqqzwTqrBsTswcCCss
|
||||
lFLHGWLvHQFhnQFhbFnbHWWPBtwqzBPTcsPTswZCPBGCTC
|
||||
QQtbRtLhtjgdfMRMDV
|
||||
jTRhJpGhQPfPLsDhWh
|
||||
wVVMbqbHwVwwMplHWfsfNmWcSLqcLmSs
|
||||
lVCZlHnwHdRpRGvZTBGJ
|
||||
csppppDDbGLbSqndFHHNdHsH
|
||||
lVTlgWgjzCzfgvfggZWWlnHPPBHrSCqBmrSBrHHBnF
|
||||
QFgvFfjTvZjzlvVTWljvTtMbLcccbRRMbwLMMLQLbw
|
||||
tjhLjLJzpJpwjsqqfQqNrNfRnsRR
|
||||
WvwGBPwWZZrnbBNrNnnC
|
||||
PDvGVTgvTMGvZTGTPvWDZVJjljtLzhtmLlJjwJVJLm
|
||||
WbzpSNswNWszwSLgSNMcrrBfPJJcfsHMrvMv
|
||||
CFllhlGFDVFRCmhQDlDTBBcvgBCTcHPHrfrHTJ
|
||||
qGRgVFhDDZmDnDqhgQFGqzwtzSjddwZbzwpLNzjpdS
|
||||
FlpZrQSJJmQpSpqlQgbbRZCgGCZdDdbNdd
|
||||
WswHfjfnhWPFDsFRDcbBbR
|
||||
WjHvjjWTfTvHFjzvPnPtttVTTJVLtJSpmtlltp
|
||||
tnjrnnnnhNlPBtbbcWpZScpjbZSz
|
||||
wmsFqfqqqGHTLbzpLLbgzMcH
|
||||
FGJqsmQGRVFwwQJschPdhPrBndBhtPhrQQ
|
||||
dRdJRfTnCRNlJjPBDmBJsbBDzm
|
||||
wSFWSgGVSLwpFhpLhQjzgPzbtDPDbPBsztrP
|
||||
WMGvVMLLBCclNHHRlM
|
||||
gfSffQBDBtZvwwpWDHcbwb
|
||||
JnCmmJCRmztsVPJRFjFchcGGWFWcGcHFvGLvHF
|
||||
VCPzJnsPVCjtPjdMsMdmVmMBfgTZBTMfSfZSSlfNNgSSfg
|
||||
lwHJSVZHWWVwJQwbbVVtwWVVdpdPfRfgDLPZLTZLDLgRDTZL
|
||||
hhBrBqRcnhsFFfddmdmmCmmppn
|
||||
MNNBBRRshNHbtVMzQJMM
|
||||
NBsSNtLNTtNsvlTBBRLgFSCbFmbHFCFhgcghSm
|
||||
WJWWDdVzDZJjDJQcCDHmmhCnmHmHFm
|
||||
zQVdQZQwqVQHjqzWWWdHpzMwGMBlGLLtTvRvRNsMwwNN
|
||||
ZCztttSjGSqRZgRPDNQQNr
|
||||
hLvmHshLmLcFwwhhwLqMVRRRJQQVNnRJMVRDNNRr
|
||||
HFhTpFqqLcssmqmFftblBSjCjStjbGWBfj
|
||||
crffjHDfrQfnfpLPgbgP
|
||||
TmFvFCmFTFFCtNsmMsRvlRTpPbLGMnGSngPppShGpbdgGJ
|
||||
vmslmwTNmtstzFsCvRFrHBrDZzcQnWqcDDHqQB
|
||||
LQLPVLGdGrRPRhHgwMhllhhs
|
||||
ZbSZTNqSZfNqNCtSSmTttbpSWMlzWlslpWHsWgJWhwJzBMlz
|
||||
bqjqqFFjHqTTTZTmSNbfmdrFQnDdcvVDGQDvvVnQnr
|
||||
mQdcdsSThlccSWhMgDnQnFtjQPtnjPNvtR
|
||||
zzsGwzrrHGBfZJGrJpDtNHFjvNvDvVRvNRtV
|
||||
wZBCGrbrszTbThcTcLcb
|
||||
gJDDDDcPQgQfNFPhhZGDDcZZSLVtlCqzsMlzqpszlsVtFSql
|
||||
bBrdwHTrHWTrTtzLlSMCCCprCq
|
||||
dnBwRvmnbmBvTpbnbWbTjZPQJhhchmJcmcQPfmGNcJ
|
||||
sjMGBLWGZjsLjJTBCCbvNrBCHC
|
||||
mpcRfDSSdqDdlRqdwRvFrHFbrHJFJVvDVrTb
|
||||
qvlgqwpcSQSfLjjhzgnMzsnP
|
||||
VgmLHHNRNVLNhsNgRHLltjjbCWnCWZbldntW
|
||||
GGMFPJqPwJGTvvCCdqdqlqCj
|
||||
rGwGrMQzJQBjJwTVHgDQDHcsfhVhVg
|
||||
pblwGBlFlWwwlgCSFwbLvQZFvzvZhzvmQTLLzJ
|
||||
HfqccHzVDNqLmmPmPPQZ
|
||||
MNtrVdDjHtrzGBdbGWCblw
|
||||
NNhnnLdnnfhdhVjvThvqVvCj
|
||||
tHtHBzBGWHBWGtPBSvvpGZVbSsTFjSqqVbscgjCjqqSC
|
||||
HBtzJHzzpDZpzMWpGPtWHvZwQmNLlmQnmNdfMmNRmwmlwd
|
||||
QzGqGwmbfTdPBgRRcgmMPC
|
||||
NtNZhljrNjrSrtltWlCJCJJfcVVRcJcRgPjf
|
||||
NlWSZZWsHhWWlprSSvZWHrWfQLLQbLGfQpQzzTFQbwzQdd
|
||||
gcwcSnccnwLRRSzcBQRvZZdvtNtvRbQJQv
|
||||
CqrCrrPsVstvbfDfbb
|
||||
TPlPVhWFFMGMnMjbcT
|
||||
gjjHGvcHgsgbSRQbRFWbjC
|
||||
ttnBTNSSfwBLzplWPPdlLlMPlMCQ
|
||||
TBZpDtmnnZNvhJDHggqqgS
|
||||
zfqzzGwMbllcJFqm
|
||||
NpHgpRZrRpSrSZLghlTjchNlNbhFmchb
|
||||
RHLWHgLBggZpHpgHRZrLgZLQCMzCfDWGMCzMQQGvPmvvfC
|
||||
bBWWlFFBBFdVMLfvsfjrtBvTrr
|
||||
qZsgNZzcwfjZrfPf
|
||||
gcnNNcDncsDGzggDnNRJnzHhmlMVSSbhVVVmMbbhVmMlGl
|
||||
dNNRQszqRhPNfddWltvDltMMNlnncv
|
||||
ZjZbpgpSpjpJgpCCpbFlTnSDTlzclDnMvnnMlT
|
||||
GCJpjbgzJCpwZwrHZrgHsRBwBVRRsqdqPhLBQqsP
|
||||
mnnVCcwGwnsVJntmfnBtBhTDzpzzpDWbDbsLLzpWDz
|
||||
FcHQdZSRHbhZZWWhrW
|
||||
dNljMlPPHdMPvRlHMRdjRRNBnwJfCVqwqqffCfCwtcBV
|
||||
ZGtGzBBGjvdZvLWLcrPVcZcsNVNmVpcH
|
||||
MnlgngCJMgJbhfDbCDPrHHVcNNrVpbVpVmmcVq
|
||||
lSPhlClftSSBvdGS
|
||||
jFhGqVCcPMMdGFqczBltzrtglrsrjBgB
|
||||
wWgwvfDZvnpmnHwHTfNpDbtRWbzltRlSrRlbBSbbzt
|
||||
fHJvJvvTwwJPhCccgQCM
|
||||
BrrrBVgNppDVBbTgDvqWdWZqWqwNmNNHvH
|
||||
sHsHnHlcJjFwMMFFvGdPvv
|
||||
HllCQCJQJsnjgtVTbBgpQrSr
|
||||
JgLPLwbhBrCbLBCJPFFlPFZRTNTZFRqlRq
|
||||
pmffSWvDcfSfGmvsNHZsTRsWllssbT
|
||||
vDddMmScdStfzGcpzzwhJwJwnCbLwwLLCwht
|
||||
sWSSvmsZsdZPWdLPRRsmSrrnlnvJjfnggfrgtfjnjr
|
||||
VWWWBhhHBBHtljMMfJHrrt
|
||||
WWqpWVqQqLNGRNZP
|
||||
QHjjGVBQpffpjqppQsSsQHWJcVVgJFWcFTWgNLggFPNc
|
||||
bzzmbzzZnZztFTNJWRqmqcgJ
|
||||
zDZlqMtbwhCBBfppvHDGvf
|
||||
BNTdfWJmzHNHHzzTdLCfCfCswQjRjljVsh
|
||||
FbGnrFnrPGSSvGPFZFFPGClLQpjQRwLjLplQhRlsrQ
|
||||
GbnvvgvPFwbwcnZMMGSFvFHdNHmTBNJNmmmDTJDBmWcT
|
||||
rBhRPrjJrRtTHtWHWcjc
|
||||
SDdGqmhdFSqblLGlHHfHWl
|
||||
DSSmFqhsFqFdzqFgwsVnvBQPPQPQVrnRsJMR
|
||||
NZcgQdmSwZgdPFPVNFPqqVVF
|
||||
hlhhjMhGjLhLDGDhCBJDCrRFRrqqpLPfpfPRVPprPm
|
||||
MlhjlMDDJTCmZddQQSTcTT
|
||||
zRddrwzwNhrzrtCLtLfsLrqflC
|
||||
MbSDZvVwGZpJwvHvBVfsqtjqlsPPfsqsfclb
|
||||
vJpvJvZTVgTdTgwdTn
|
||||
SZMsTTScDMqwtDDJ
|
||||
VWrbzFvnrvFQQtnhzdPFmfwGfqmGPfDwmfPJ
|
||||
rrLbrnVrLvVQpLHSHjsTBBjZBt
|
||||
bSrpbWpPpfzPRWrWvhJgddrcccgFnFss
|
||||
ljGNTCtMNLGQjNMjQMGtZJDDggcldcFcvhdFddnhhF
|
||||
vNCmQMjmvGzpRPPzzmfw
|
||||
BrbdcqcdSZRLQltNDqFpCpHH
|
||||
jnTzWsWjWjwTQnzMvFlCzNDhNhDCFGpHpH
|
||||
wmmvjVQMvwmsQMMwnsTPgVfgJcLcgfSbbBdBbJSdbSBS
|
||||
bJFbMdcmgFSFgmggJFcGwjRdzPWZWGDDGGRwGD
|
||||
hrttffCVVCTVlrttQwzRzwWTqRGDGwjTvG
|
||||
rfLChHhlpHrfHlnWlpWCpQVcMSmMmSJMmggbmMSMLFNSSs
|
||||
JRMBJfMJQJTcNNdD
|
||||
LHsLmspghmmpdwwwcwRCpPTT
|
||||
ttLLlRSlqjrMqFtZ
|
||||
VjtHVHtvVqttCdnGpHtplcshglNgprrlMhrcNghw
|
||||
WTWRvRWFZQLWDvDWzwscNfcflcshlshFlw
|
||||
WQmBQWPTVGnJPnvn
|
||||
cpRwjcQwVfQzQPQl
|
||||
BZgGDBZBsgWBDDJzlhfhJVmzVfmThm
|
||||
FqWDDGrGDFNqFrDZFnplNHnSwtnSRwRplN
|
||||
VMLVRhRLRfhfgGdfVdZWRdTHNqHCDTrSJNBBBgJNQgND
|
||||
swlcpsFPcPwzpSlTTDrNrQPQqQBBrH
|
||||
zsppFscsscmbzsFsbsZbMfRZdVdVMbVSWhLG
|
||||
NjcjHFjrHHFpjGtVtGWVZW
|
||||
fwPlsJqdndPnwJfQdfllwNtWGdtWMMbtbmbGWbMWGN
|
||||
CPlwnCwnwqClTJThTDzzFcHNSShrRh
|
||||
llqlsNsPNTpDNTDNNf
|
||||
cnvcWFjSrMSFnvWHTzTggHCcllzLpg
|
||||
wjJSSrFrrMMJGrFFFGjGvJnFswsRwRdmBdZbbqqsPtQqPZls
|
||||
jlclpqjcRqpjzjnVPgTmBmjCrC
|
||||
vGvsFNGGMZNvdGshQNJvJgbVMrnbrHVBgBTTbBBPBT
|
||||
SvJNGhvvvFdfQvFshSpqPqLzRRPctRcLWwlf
|
||||
LWSSqLVBbNqqLrWHLSHzWbbqQfFgZtmtJCQZzgtCFCQCCnJQ
|
||||
PlldGDGdjGsMPhssjPmQZFJQQZQghChZQJgv
|
||||
jwMcMpsPRRdsRjPwNpTWBLSBqVqTNJWT
|
||||
hWnMWgTffWFbMLfHnFMNfHgjtBSNRzjBBSzSBBcStdzBtz
|
||||
VGrVCGcVJswvPqJQjtQppBzpSwdjpt
|
||||
ZqqsCrmmsfmWcHhngg
|
||||
vnNnssMcZnlnlMFMsnFcZMGqJCbLbNLNqgLbgLNTCpLgwC
|
||||
hmjzBzHmRSfBfmqgQwpQQJbQJmwT
|
||||
WVVtthRtRdsdqtddZd
|
||||
LhZBLfZpmcsFpFzm
|
||||
vTRRwTRRPnCTwlFgmsczzLmgLvFs
|
||||
HVVVNCPPHTTtClRVNSnwLTHSQHBMMHrHWBhrQbJhWMMbZbJZ
|
||||
WPTnnDPjvPlChhJPcgCC
|
||||
DRQdBqsDQHQLHsBSmVLBcbwgCClbgCGlJghgmhgw
|
||||
dHMHQDVVRBsMWTNfWfzWzf
|
||||
PlgFPFFJGgJhhMGZwGbpBtQjjjStBttptlSb
|
||||
TTcDzmHvdvnDDzdTVnTDmSspWspQLpWmSsmqppsWtb
|
||||
CHVdcHvdbrwJCMPRGJwP
|
||||
BtBfcPfBhBGDhwHMlCmrNSCM
|
||||
dQdzLFTQnRnQVvgLnNlrCCpFrJCNrHJrwm
|
||||
zRVLZQRRvQGbwtWfbGZb
|
||||
PPcWcwMmCwwgnphCCLpjHp
|
||||
TtZsJTzzJSSSZJsdJtTrpblhRlHHHMngpLnnjHps
|
||||
ZDrvdFZtJqtStrZfMcGDVwfwffmWmP
|
||||
wCwSzzsHChhMVMhCPsSVLFWcdcWGPccRdjFdJjDR
|
||||
wBTTlBfgTlfpQQltmfgGGctRdGJJJFDJDDWdDt
|
||||
TppwnmlnQQqnlpqlmmwqlpphHqrVrZZSzshzShqzsrZVqs
|
||||
CCqCTgmdMCCCMMsWgqqnTCmJDGJcGGJfrGNGrSrrQpwFFSwG
|
||||
vZbDZvhDbzHzwNzwNGFNpNGc
|
||||
ZjBRVHPRtRLjLMWsCDlmgMdBmW
|
||||
MMsstRChwbChqRBqDrJNpNDsHdlNlJdr
|
||||
vLmPLfGGGGcTmFfTSgvPCvpZQlHHZpdrFJplQdZHQdHH
|
||||
GgPLmvGVSPfmfcfgBtjwCRwwjBbtVWbh
|
||||
LPPgFPccLPRswfsHfJgDsH
|
||||
bpbpTnCCrnmCtjBnTfDshHDwQVTwsDhQ
|
||||
BbrjnjnWCbBWZbPWzLDzDWdNlMWS
|
||||
pnncvLbcppBHgBRpddGd
|
||||
MtJfjVMtMmFJDjWSjVWzGdGgNQRBzBGNBMCGNB
|
||||
ZdDdsJFdDmtJmLTbwcvcbcnwZv
|
||||
FGsfFdNdhfbDdbhbLMhbNNTPJVCCZTLJnCRVJLPCRTVR
|
||||
qHjsczptHpmgHZBBVVTrrPzrBP
|
||||
lmpSlcglQtqWtcWjpQQfWsGDMhGFwdbGGNWhDv
|
||||
hNNNjMFMwthjFfvZBjFFvNSdnzSGGdGmHzHgGWSfHWSR
|
||||
ppJpcCVslpQJpJJDWHCHmRHHWWGSDn
|
||||
QbsrJQTQJVJNMNnZTZNZvZ
|
||||
NmRNLtGNmfcRrtDtrJCnWHJD
|
||||
blSzzSBssgfslWCCCJWFWHrsZF
|
||||
zTzbPBhMlTVSzMlMldlgMvvvvMLGcQRmqLLfvRwQ
|
||||
nnZsfsPLLfZfHLWdsZWZHdmcSpTcGmNScJTRGsTJmNcF
|
||||
gqVqDMgBlDbwwCqVbQFpTNFcTRSJNSrqqTSm
|
||||
jlMVMjljQBjMwhLfWWzhhfhZtmLH
|
||||
bfHwMvzwFBNpRjfZ
|
||||
nddcVJpGVpGqPVBBFBmhBhmsNRJs
|
||||
DWcPgPcPgnqCPlWWVWGMwbzwvQSSLbvgLpHHMz
|
||||
NMVqtdPVHgVlrfVrpnjCwNjjpCpNNpCb
|
||||
zhSvfWWzRfRLfvSpQjwbmmmvQvwwCD
|
||||
LBRRTRcLJSgqqMJlVVft
|
||||
GpgNzzSMGpGTrgzgMzJTrPgzjRwBdBlBbLRBjdBwVbLRVbSR
|
||||
sQWCfQcflhtQQcWCmsmlsbLnRdwqqBmmbBVbLVLwnB
|
||||
fCtQWFWDZFCQhCctFDsftNpzPPzZJpgJJNTgNlPZgH
|
||||
DqLtMSDLLttjdDSRdjZtdpdqVWFslFWrqWPqhwhfFwwCFw
|
||||
CvTbNvvTJNGHnVJwPfwFFFwsrh
|
||||
cQBzGBHnTQGgcNtdMMBpDBtCdtLL
|
||||
QsNDfdDNQsSTtrQZQtJJZC
|
||||
lLvRWMVMLzWbRjvVgVVGvmTtCrZBrTFFbmJCmsBCrr
|
||||
lljvlgpMGgRpsjsRlGGsMdqDdpDqNqfhqqSdncpqdP
|
||||
sVSJVmmtmsCCwschrbNMbcBs
|
||||
ZgLLfqvzzqgfdqHQLnTLfQQFhFMrhbNGBwgGbMlNcFclwN
|
||||
LTzqZrHHQvjLHnHdQTdTQvZQJjCpCJDPmCRRtCpStRRmVtmm
|
||||
ccQVcVHwnnDqNqSWNnVvqwcgJblgRslgmdGlssmGbQdddb
|
||||
rpFtPrzrMFZvZTLPpglhdssFshssJhsggG
|
||||
pTtLtBMjZLfHvNWqcBHf
|
||||
PZnSjnnsVfjfLLff
|
||||
crvccpglrtHfNbzbHLzmGN
|
||||
lptTLFFpdgvttFWltTclplDvhJMSMPhJPhChShPBZBMJhPMT
|
||||
mPSPdnhznPdhSmPGchJdFDtBhghgFgWpFBQhTBMg
|
||||
rHNNvbqHHHwZwMGMWtgtQMZQFQ
|
||||
wRqqRffvvNHwrHqrNqLvCrqvmPnzdsGJsSsSdSsLPVVPnjsn
|
||||
CzlngWpClJlzRJpDnpmzCndrhBcrhwcsBcLsNcsmLdQQ
|
||||
qqSjqFGTFbPFSPTVjcBcBsDdQrwBVLrNcc
|
||||
PtDDtZTvGDvFCMzZlRJCfWfJ
|
||||
vtQDpvpvVvvcSFrrljZZsVjFrV
|
||||
RqcTTRddRrlsjZrwrT
|
||||
zmbdRdMmMgbPDcGhGmnDpcQn
|
||||
gZqJRZRZdltFVGZQDZwV
|
||||
MCMSRHCMRHBBVtVCGwDCFGtD
|
||||
jcHsTMBNSSrBMjmMrcTMpRqpJggllnprqzRPzdlP
|
||||
mWSWHdmHWZWjBnGs
|
||||
TvchwtTfcTvhzwVGNtdrbjnnBnsnNr
|
||||
JTdwghvMzwfdcMVJqPmQFRPpCDJRJFFC
|
||||
DsHDCrszvvhHsshvsrrsgwdPpdLFgWLpbRpWFfMjWjWF
|
||||
BVJPJmPmGZVnfbVfMWpdLMWb
|
||||
cNGtnttqmJHNvNzDPPHN
|
||||
gpjmMQMrfmMntCSCNmSNCm
|
||||
vDRqphDhzHSdtqdCNH
|
||||
LFLLcbJRJLppFQlpMFfF
|
||||
SnSdvchzZZczndNvwcwnQrGfqrTTfhhTDgRGGLQQ
|
||||
lVWHWMmWmttsFBMLLqLTRRRqqDBGTf
|
||||
bsFPbFFssmFjWRmjVFjHbczvpZCwvwZccndpvzpzCP
|
||||
jzngbHrlHQllcbcTCtHGWtftGCHqWC
|
||||
JJgmsJRwFqChLGtqGs
|
||||
SmJmSmDdSPRwSMppJdPPwVvvzNQvjrNMNjMZZrQgZNgQ
|
||||
PvPlPcZPZFllzNzCDdhhdHjrpHNjHBHB
|
||||
VmgWtJWrqbQmqGDBdGQjjhBGdG
|
||||
tmbgggbgnMWnStttgnfnTzrCfPvFnccnPclT
|
||||
RQQbdSRdpprQSNVqqqfrffjvnjnJnhnVvHhBhVjJtjJz
|
||||
WGgGgLmLgGZMPDBhDJDHjMBFnD
|
||||
WPPwPGwlLgZwmWlslCLRNbrsTrfRrNNQqsspBT
|
||||
dNNpHpchLppdccTNtZZTRRPSSnwPPSbSnhhrhnSJ
|
||||
qfqsFsqffgQMznJrPznbMrrB
|
||||
vglfqQCgDgFjglCDCjLZpTHNPHttdcZVVN
|
||||
FWtDHDStZwrFCDwrgWPFDsWQJZzlMdpZzlNpNjdjjQzNzj
|
||||
BqnVGVcbTmGfHLGVzvpQpvJvQlflMdJp
|
||||
ThRRchnHqLTGbFCCCrrSSFhFCs
|
||||
wJrwdZPnJwqPbJPCnjFZdvHtMvsLsTsDtHsHDDqvpH
|
||||
RWzNRWjRfgjNMMLvcMcLNt
|
||||
WGGRQzzRmRmVQSgwrwJjjCbJhnbShJ
|
||||
cjngcvcwbMwWnbMWjbgvnsjPftsqfthqsBtsJJJJBt
|
||||
HrGFmDDzpmLTHpDsPfsBNBPfzZNPqN
|
||||
DDVmDplDrpGSVSTTHGlpLnPwCRnWcvWCdPbbMvcVdW
|
||||
BVRlBfPBffWswVWQsfwBNNPMFMmmGFZGnWZGtztrzMZMnz
|
||||
HqSJchHTHbTgHhGhvmRzFmnFtzRF
|
||||
RJqHTpgDLJDSqLJJPNVjsfPwBVsVLlfN
|
||||
NDrBlSmrFBlbbJllmtHHwhNNhZztqHVRzQ
|
||||
CMTCGLcvvtfCdCcCvCnMTMcTzjHwVZVRLjRRjQjRHRwzwjVH
|
||||
dfGdgGMGPggnvfvgbtDtlSJPDSFJPslJ
|
25
2022/03/part1
Executable file
25
2022/03/part1
Executable file
@@ -0,0 +1,25 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
VALS = {}
|
||||
|
||||
for i in range(ord('a'), ord('z')+1):
|
||||
VALS[chr(i)] = i - ord('a') + 1
|
||||
|
||||
for i in range(ord('A'), ord('Z')+1):
|
||||
VALS[chr(i)] = i - ord('A') + 27
|
||||
|
||||
score = 0
|
||||
|
||||
with open('input') as f:
|
||||
for line in f:
|
||||
line = line.rstrip()
|
||||
half = len(line)//2
|
||||
compA = line[0:half]
|
||||
compB = line[half:len(line)]
|
||||
common = set(compA) & set(compB)
|
||||
|
||||
score = score + VALS[common.pop()]
|
||||
|
||||
print(score)
|
||||
|
||||
|
26
2022/03/part2
Executable file
26
2022/03/part2
Executable file
@@ -0,0 +1,26 @@
|
||||
#!/usr/bin/env python
|
||||
import itertools
|
||||
|
||||
VALS = {}
|
||||
|
||||
for i in range(ord('a'), ord('z')+1):
|
||||
VALS[chr(i)] = i - ord('a') + 1
|
||||
|
||||
for i in range(ord('A'), ord('Z')+1):
|
||||
VALS[chr(i)] = i - ord('A') + 27
|
||||
|
||||
score = 0
|
||||
|
||||
with open('input') as f:
|
||||
for elfA,elfB,elfC in itertools.zip_longest(*[f]*3):
|
||||
elfA = elfA.rstrip()
|
||||
elfB = elfB.rstrip()
|
||||
elfC = elfC.rstrip()
|
||||
|
||||
common = set(elfA) & set(elfB) & set(elfC)
|
||||
|
||||
score = score + VALS[common.pop()]
|
||||
|
||||
print(score)
|
||||
|
||||
|
1000
2022/04/input
Normal file
1000
2022/04/input
Normal file
File diff suppressed because it is too large
Load Diff
20
2022/04/part1
Executable file
20
2022/04/part1
Executable file
@@ -0,0 +1,20 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
def build_range(text):
|
||||
first, last = text.split("-")
|
||||
return range(int(first), int(last)+1)
|
||||
|
||||
count = 0
|
||||
|
||||
with open('input') as f:
|
||||
for line in f:
|
||||
aS, bS = line.rstrip().split(",")
|
||||
a = build_range(aS)
|
||||
b = build_range(bS)
|
||||
|
||||
if (a[0] in b and a[-1] in b) or (b[0] in a and b[-1] in a):
|
||||
count = count + 1
|
||||
|
||||
print(count)
|
||||
|
||||
|
20
2022/04/part2
Executable file
20
2022/04/part2
Executable file
@@ -0,0 +1,20 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
def build_range(text):
|
||||
first, last = text.split("-")
|
||||
return range(int(first), int(last)+1)
|
||||
|
||||
count = 0
|
||||
|
||||
with open('input') as f:
|
||||
for line in f:
|
||||
aS, bS = line.rstrip().split(",")
|
||||
a = build_range(aS)
|
||||
b = build_range(bS)
|
||||
|
||||
if (a[0] in b or a[-1] in b) or (b[0] in a or b[-1] in a):
|
||||
count = count + 1
|
||||
|
||||
print(count)
|
||||
|
||||
|
513
2022/05/input
Normal file
513
2022/05/input
Normal file
@@ -0,0 +1,513 @@
|
||||
[N] [C] [Z]
|
||||
[Q] [G] [V] [S] [V]
|
||||
[L] [C] [M] [T] [W] [L]
|
||||
[S] [H] [L] [C] [D] [H] [S]
|
||||
[C] [V] [F] [D] [D] [B] [Q] [F]
|
||||
[Z] [T] [Z] [T] [C] [J] [G] [S] [Q]
|
||||
[P] [P] [C] [W] [W] [F] [W] [J] [C]
|
||||
[T] [L] [D] [G] [P] [P] [V] [N] [R]
|
||||
1 2 3 4 5 6 7 8 9
|
||||
|
||||
move 6 from 2 to 1
|
||||
move 4 from 6 to 3
|
||||
move 1 from 6 to 5
|
||||
move 8 from 3 to 8
|
||||
move 13 from 8 to 2
|
||||
move 2 from 7 to 6
|
||||
move 10 from 1 to 6
|
||||
move 3 from 2 to 8
|
||||
move 5 from 4 to 2
|
||||
move 15 from 6 to 5
|
||||
move 1 from 1 to 4
|
||||
move 2 from 7 to 3
|
||||
move 2 from 4 to 2
|
||||
move 12 from 5 to 1
|
||||
move 4 from 8 to 9
|
||||
move 15 from 1 to 3
|
||||
move 10 from 9 to 7
|
||||
move 1 from 5 to 1
|
||||
move 1 from 4 to 8
|
||||
move 3 from 7 to 6
|
||||
move 8 from 2 to 6
|
||||
move 1 from 9 to 8
|
||||
move 5 from 2 to 3
|
||||
move 1 from 4 to 1
|
||||
move 16 from 3 to 1
|
||||
move 2 from 2 to 7
|
||||
move 13 from 1 to 6
|
||||
move 1 from 2 to 4
|
||||
move 2 from 2 to 9
|
||||
move 1 from 4 to 7
|
||||
move 2 from 8 to 2
|
||||
move 2 from 2 to 9
|
||||
move 1 from 6 to 8
|
||||
move 2 from 3 to 8
|
||||
move 2 from 1 to 9
|
||||
move 1 from 3 to 9
|
||||
move 1 from 3 to 2
|
||||
move 5 from 5 to 1
|
||||
move 2 from 9 to 3
|
||||
move 1 from 2 to 3
|
||||
move 2 from 1 to 3
|
||||
move 3 from 3 to 2
|
||||
move 1 from 5 to 7
|
||||
move 2 from 7 to 6
|
||||
move 2 from 8 to 3
|
||||
move 1 from 8 to 9
|
||||
move 6 from 3 to 4
|
||||
move 3 from 9 to 6
|
||||
move 8 from 6 to 4
|
||||
move 1 from 2 to 3
|
||||
move 1 from 2 to 6
|
||||
move 1 from 2 to 9
|
||||
move 1 from 3 to 9
|
||||
move 5 from 9 to 5
|
||||
move 7 from 7 to 4
|
||||
move 14 from 4 to 6
|
||||
move 1 from 5 to 3
|
||||
move 5 from 1 to 9
|
||||
move 4 from 5 to 4
|
||||
move 1 from 1 to 7
|
||||
move 1 from 3 to 8
|
||||
move 1 from 8 to 4
|
||||
move 4 from 9 to 7
|
||||
move 6 from 6 to 5
|
||||
move 10 from 4 to 6
|
||||
move 1 from 9 to 6
|
||||
move 1 from 4 to 3
|
||||
move 1 from 3 to 6
|
||||
move 1 from 4 to 2
|
||||
move 35 from 6 to 3
|
||||
move 1 from 2 to 3
|
||||
move 4 from 5 to 8
|
||||
move 2 from 5 to 4
|
||||
move 3 from 8 to 2
|
||||
move 2 from 4 to 8
|
||||
move 26 from 3 to 8
|
||||
move 3 from 2 to 9
|
||||
move 6 from 3 to 5
|
||||
move 3 from 5 to 7
|
||||
move 3 from 7 to 4
|
||||
move 3 from 4 to 5
|
||||
move 1 from 9 to 5
|
||||
move 6 from 5 to 1
|
||||
move 2 from 8 to 6
|
||||
move 11 from 8 to 5
|
||||
move 9 from 5 to 4
|
||||
move 1 from 9 to 7
|
||||
move 2 from 7 to 9
|
||||
move 3 from 1 to 4
|
||||
move 1 from 5 to 7
|
||||
move 8 from 6 to 1
|
||||
move 5 from 7 to 9
|
||||
move 7 from 9 to 2
|
||||
move 3 from 2 to 9
|
||||
move 3 from 7 to 1
|
||||
move 4 from 9 to 8
|
||||
move 2 from 5 to 6
|
||||
move 2 from 2 to 8
|
||||
move 2 from 6 to 9
|
||||
move 13 from 8 to 1
|
||||
move 1 from 2 to 8
|
||||
move 3 from 3 to 5
|
||||
move 1 from 9 to 8
|
||||
move 3 from 5 to 4
|
||||
move 1 from 9 to 3
|
||||
move 1 from 2 to 3
|
||||
move 4 from 8 to 2
|
||||
move 3 from 2 to 4
|
||||
move 19 from 1 to 2
|
||||
move 8 from 1 to 8
|
||||
move 1 from 4 to 3
|
||||
move 1 from 4 to 1
|
||||
move 7 from 2 to 1
|
||||
move 1 from 3 to 1
|
||||
move 2 from 3 to 1
|
||||
move 15 from 4 to 5
|
||||
move 1 from 1 to 7
|
||||
move 11 from 2 to 8
|
||||
move 2 from 2 to 9
|
||||
move 1 from 3 to 5
|
||||
move 2 from 9 to 4
|
||||
move 12 from 8 to 3
|
||||
move 16 from 5 to 1
|
||||
move 3 from 4 to 3
|
||||
move 1 from 7 to 5
|
||||
move 2 from 8 to 6
|
||||
move 1 from 5 to 4
|
||||
move 1 from 4 to 9
|
||||
move 18 from 1 to 9
|
||||
move 8 from 3 to 8
|
||||
move 9 from 8 to 2
|
||||
move 4 from 9 to 2
|
||||
move 8 from 1 to 2
|
||||
move 2 from 6 to 4
|
||||
move 17 from 2 to 1
|
||||
move 1 from 4 to 5
|
||||
move 3 from 2 to 6
|
||||
move 1 from 2 to 9
|
||||
move 2 from 6 to 1
|
||||
move 3 from 3 to 6
|
||||
move 1 from 4 to 6
|
||||
move 2 from 3 to 2
|
||||
move 16 from 9 to 5
|
||||
move 14 from 5 to 4
|
||||
move 3 from 5 to 8
|
||||
move 1 from 2 to 4
|
||||
move 4 from 8 to 6
|
||||
move 1 from 2 to 8
|
||||
move 1 from 3 to 9
|
||||
move 1 from 3 to 9
|
||||
move 2 from 9 to 1
|
||||
move 10 from 8 to 7
|
||||
move 7 from 6 to 9
|
||||
move 16 from 1 to 5
|
||||
move 7 from 4 to 3
|
||||
move 1 from 8 to 4
|
||||
move 5 from 4 to 2
|
||||
move 1 from 5 to 9
|
||||
move 5 from 9 to 1
|
||||
move 5 from 1 to 2
|
||||
move 2 from 9 to 7
|
||||
move 1 from 1 to 7
|
||||
move 1 from 6 to 8
|
||||
move 4 from 4 to 5
|
||||
move 1 from 6 to 9
|
||||
move 9 from 2 to 1
|
||||
move 11 from 5 to 6
|
||||
move 2 from 9 to 2
|
||||
move 4 from 3 to 4
|
||||
move 4 from 4 to 6
|
||||
move 1 from 3 to 4
|
||||
move 11 from 7 to 4
|
||||
move 9 from 4 to 7
|
||||
move 11 from 7 to 2
|
||||
move 2 from 3 to 5
|
||||
move 2 from 4 to 8
|
||||
move 7 from 5 to 2
|
||||
move 1 from 8 to 3
|
||||
move 1 from 5 to 1
|
||||
move 1 from 3 to 7
|
||||
move 6 from 2 to 9
|
||||
move 1 from 8 to 9
|
||||
move 6 from 9 to 2
|
||||
move 15 from 6 to 2
|
||||
move 1 from 7 to 2
|
||||
move 31 from 2 to 7
|
||||
move 22 from 7 to 3
|
||||
move 2 from 5 to 1
|
||||
move 3 from 7 to 4
|
||||
move 1 from 4 to 9
|
||||
move 3 from 4 to 3
|
||||
move 1 from 8 to 6
|
||||
move 1 from 9 to 6
|
||||
move 15 from 1 to 5
|
||||
move 1 from 9 to 5
|
||||
move 1 from 1 to 8
|
||||
move 2 from 6 to 8
|
||||
move 1 from 8 to 4
|
||||
move 1 from 4 to 6
|
||||
move 1 from 6 to 9
|
||||
move 10 from 3 to 1
|
||||
move 1 from 9 to 7
|
||||
move 2 from 7 to 8
|
||||
move 10 from 5 to 1
|
||||
move 12 from 1 to 4
|
||||
move 1 from 3 to 8
|
||||
move 11 from 4 to 8
|
||||
move 1 from 8 to 3
|
||||
move 5 from 5 to 8
|
||||
move 1 from 5 to 8
|
||||
move 6 from 8 to 6
|
||||
move 3 from 2 to 1
|
||||
move 1 from 6 to 2
|
||||
move 5 from 1 to 6
|
||||
move 3 from 1 to 4
|
||||
move 3 from 2 to 8
|
||||
move 1 from 2 to 9
|
||||
move 8 from 3 to 5
|
||||
move 2 from 1 to 3
|
||||
move 3 from 7 to 5
|
||||
move 2 from 3 to 5
|
||||
move 3 from 5 to 2
|
||||
move 1 from 7 to 9
|
||||
move 2 from 9 to 1
|
||||
move 1 from 6 to 9
|
||||
move 2 from 4 to 8
|
||||
move 5 from 6 to 5
|
||||
move 1 from 6 to 7
|
||||
move 1 from 9 to 8
|
||||
move 3 from 6 to 5
|
||||
move 7 from 8 to 9
|
||||
move 5 from 9 to 1
|
||||
move 2 from 4 to 8
|
||||
move 11 from 5 to 9
|
||||
move 3 from 2 to 3
|
||||
move 2 from 5 to 8
|
||||
move 4 from 3 to 7
|
||||
move 11 from 9 to 5
|
||||
move 3 from 7 to 5
|
||||
move 1 from 3 to 5
|
||||
move 8 from 1 to 4
|
||||
move 5 from 3 to 9
|
||||
move 15 from 5 to 4
|
||||
move 8 from 4 to 1
|
||||
move 12 from 8 to 1
|
||||
move 4 from 5 to 8
|
||||
move 12 from 4 to 5
|
||||
move 3 from 7 to 2
|
||||
move 11 from 5 to 7
|
||||
move 8 from 8 to 7
|
||||
move 7 from 9 to 8
|
||||
move 2 from 5 to 7
|
||||
move 4 from 7 to 8
|
||||
move 9 from 8 to 4
|
||||
move 11 from 4 to 5
|
||||
move 6 from 7 to 8
|
||||
move 9 from 8 to 7
|
||||
move 18 from 7 to 5
|
||||
move 1 from 8 to 1
|
||||
move 4 from 1 to 5
|
||||
move 1 from 7 to 2
|
||||
move 6 from 1 to 9
|
||||
move 1 from 2 to 4
|
||||
move 1 from 4 to 3
|
||||
move 3 from 1 to 7
|
||||
move 1 from 4 to 2
|
||||
move 3 from 2 to 5
|
||||
move 2 from 9 to 5
|
||||
move 1 from 2 to 6
|
||||
move 4 from 7 to 8
|
||||
move 1 from 6 to 2
|
||||
move 1 from 2 to 4
|
||||
move 4 from 8 to 5
|
||||
move 3 from 9 to 7
|
||||
move 1 from 9 to 5
|
||||
move 1 from 4 to 3
|
||||
move 2 from 3 to 8
|
||||
move 2 from 7 to 4
|
||||
move 28 from 5 to 8
|
||||
move 1 from 8 to 9
|
||||
move 1 from 9 to 3
|
||||
move 6 from 5 to 6
|
||||
move 5 from 5 to 2
|
||||
move 1 from 3 to 4
|
||||
move 1 from 7 to 4
|
||||
move 1 from 5 to 6
|
||||
move 16 from 8 to 3
|
||||
move 7 from 1 to 8
|
||||
move 4 from 4 to 9
|
||||
move 1 from 2 to 4
|
||||
move 3 from 2 to 3
|
||||
move 6 from 6 to 8
|
||||
move 10 from 3 to 8
|
||||
move 1 from 2 to 7
|
||||
move 1 from 6 to 7
|
||||
move 11 from 8 to 5
|
||||
move 2 from 7 to 8
|
||||
move 1 from 1 to 9
|
||||
move 5 from 9 to 5
|
||||
move 4 from 3 to 2
|
||||
move 1 from 4 to 2
|
||||
move 1 from 3 to 8
|
||||
move 3 from 8 to 2
|
||||
move 19 from 8 to 7
|
||||
move 6 from 7 to 6
|
||||
move 4 from 5 to 2
|
||||
move 9 from 7 to 5
|
||||
move 1 from 7 to 1
|
||||
move 5 from 6 to 9
|
||||
move 1 from 7 to 4
|
||||
move 1 from 6 to 7
|
||||
move 1 from 4 to 7
|
||||
move 1 from 1 to 2
|
||||
move 2 from 7 to 3
|
||||
move 6 from 5 to 9
|
||||
move 9 from 9 to 1
|
||||
move 17 from 5 to 4
|
||||
move 2 from 3 to 1
|
||||
move 13 from 4 to 7
|
||||
move 3 from 3 to 5
|
||||
move 7 from 1 to 4
|
||||
move 1 from 5 to 8
|
||||
move 2 from 5 to 2
|
||||
move 6 from 7 to 3
|
||||
move 1 from 5 to 7
|
||||
move 1 from 9 to 1
|
||||
move 2 from 3 to 2
|
||||
move 1 from 9 to 3
|
||||
move 9 from 7 to 3
|
||||
move 10 from 3 to 5
|
||||
move 8 from 4 to 2
|
||||
move 1 from 4 to 1
|
||||
move 13 from 2 to 4
|
||||
move 5 from 4 to 3
|
||||
move 1 from 5 to 9
|
||||
move 1 from 7 to 2
|
||||
move 6 from 4 to 2
|
||||
move 4 from 1 to 8
|
||||
move 3 from 4 to 6
|
||||
move 9 from 8 to 9
|
||||
move 17 from 2 to 3
|
||||
move 2 from 8 to 6
|
||||
move 1 from 4 to 3
|
||||
move 2 from 6 to 3
|
||||
move 2 from 1 to 3
|
||||
move 13 from 3 to 4
|
||||
move 8 from 9 to 8
|
||||
move 7 from 4 to 6
|
||||
move 3 from 5 to 6
|
||||
move 5 from 8 to 2
|
||||
move 9 from 6 to 1
|
||||
move 7 from 2 to 4
|
||||
move 2 from 6 to 9
|
||||
move 1 from 1 to 5
|
||||
move 18 from 3 to 8
|
||||
move 5 from 1 to 3
|
||||
move 1 from 6 to 1
|
||||
move 9 from 4 to 7
|
||||
move 11 from 8 to 7
|
||||
move 5 from 7 to 5
|
||||
move 2 from 4 to 5
|
||||
move 1 from 6 to 2
|
||||
move 13 from 7 to 8
|
||||
move 1 from 4 to 9
|
||||
move 1 from 9 to 6
|
||||
move 4 from 1 to 5
|
||||
move 1 from 7 to 6
|
||||
move 9 from 5 to 7
|
||||
move 8 from 5 to 6
|
||||
move 10 from 7 to 2
|
||||
move 1 from 5 to 7
|
||||
move 1 from 7 to 1
|
||||
move 17 from 8 to 2
|
||||
move 9 from 6 to 7
|
||||
move 6 from 7 to 1
|
||||
move 2 from 7 to 2
|
||||
move 1 from 4 to 2
|
||||
move 12 from 2 to 8
|
||||
move 7 from 1 to 2
|
||||
move 6 from 8 to 6
|
||||
move 3 from 8 to 2
|
||||
move 1 from 7 to 2
|
||||
move 2 from 3 to 4
|
||||
move 1 from 4 to 9
|
||||
move 2 from 3 to 5
|
||||
move 2 from 3 to 7
|
||||
move 1 from 4 to 6
|
||||
move 2 from 7 to 1
|
||||
move 7 from 2 to 7
|
||||
move 6 from 7 to 1
|
||||
move 1 from 5 to 2
|
||||
move 6 from 8 to 4
|
||||
move 4 from 9 to 7
|
||||
move 1 from 5 to 2
|
||||
move 3 from 8 to 1
|
||||
move 1 from 9 to 4
|
||||
move 1 from 7 to 8
|
||||
move 1 from 8 to 1
|
||||
move 4 from 7 to 8
|
||||
move 1 from 4 to 2
|
||||
move 3 from 6 to 9
|
||||
move 2 from 9 to 7
|
||||
move 1 from 9 to 3
|
||||
move 2 from 4 to 3
|
||||
move 2 from 8 to 3
|
||||
move 5 from 3 to 4
|
||||
move 4 from 6 to 2
|
||||
move 8 from 2 to 9
|
||||
move 1 from 6 to 5
|
||||
move 10 from 2 to 3
|
||||
move 2 from 8 to 3
|
||||
move 8 from 9 to 3
|
||||
move 9 from 2 to 5
|
||||
move 1 from 2 to 4
|
||||
move 1 from 2 to 3
|
||||
move 7 from 5 to 6
|
||||
move 1 from 5 to 7
|
||||
move 13 from 3 to 4
|
||||
move 2 from 7 to 8
|
||||
move 5 from 3 to 1
|
||||
move 1 from 5 to 3
|
||||
move 1 from 8 to 5
|
||||
move 1 from 2 to 8
|
||||
move 1 from 7 to 9
|
||||
move 1 from 4 to 2
|
||||
move 15 from 4 to 8
|
||||
move 6 from 4 to 7
|
||||
move 6 from 7 to 8
|
||||
move 1 from 6 to 5
|
||||
move 1 from 4 to 6
|
||||
move 1 from 9 to 6
|
||||
move 2 from 5 to 2
|
||||
move 6 from 6 to 4
|
||||
move 6 from 1 to 8
|
||||
move 6 from 4 to 9
|
||||
move 2 from 6 to 1
|
||||
move 1 from 2 to 9
|
||||
move 26 from 8 to 1
|
||||
move 4 from 3 to 7
|
||||
move 2 from 2 to 5
|
||||
move 16 from 1 to 4
|
||||
move 3 from 9 to 8
|
||||
move 3 from 8 to 7
|
||||
move 3 from 5 to 1
|
||||
move 2 from 9 to 2
|
||||
move 1 from 9 to 7
|
||||
move 1 from 9 to 1
|
||||
move 8 from 4 to 1
|
||||
move 4 from 4 to 9
|
||||
move 1 from 2 to 3
|
||||
move 1 from 3 to 7
|
||||
move 2 from 8 to 2
|
||||
move 3 from 4 to 2
|
||||
move 1 from 4 to 7
|
||||
move 9 from 7 to 5
|
||||
move 1 from 9 to 8
|
||||
move 2 from 9 to 8
|
||||
move 5 from 5 to 7
|
||||
move 1 from 9 to 5
|
||||
move 6 from 2 to 6
|
||||
move 1 from 8 to 2
|
||||
move 5 from 6 to 5
|
||||
move 1 from 7 to 4
|
||||
move 3 from 8 to 9
|
||||
move 3 from 9 to 7
|
||||
move 1 from 6 to 4
|
||||
move 2 from 4 to 1
|
||||
move 2 from 5 to 8
|
||||
move 1 from 2 to 9
|
||||
move 2 from 8 to 9
|
||||
move 3 from 9 to 3
|
||||
move 8 from 7 to 3
|
||||
move 4 from 5 to 8
|
||||
move 1 from 3 to 9
|
||||
move 3 from 5 to 8
|
||||
move 1 from 5 to 3
|
||||
move 6 from 8 to 6
|
||||
move 3 from 3 to 9
|
||||
move 5 from 3 to 2
|
||||
move 5 from 6 to 4
|
||||
move 14 from 1 to 5
|
||||
move 8 from 5 to 6
|
||||
move 2 from 3 to 2
|
||||
move 4 from 9 to 1
|
||||
move 1 from 8 to 7
|
||||
move 7 from 2 to 3
|
||||
move 6 from 3 to 7
|
||||
move 3 from 5 to 3
|
||||
move 1 from 3 to 9
|
||||
move 12 from 1 to 5
|
||||
move 1 from 9 to 7
|
||||
move 2 from 3 to 1
|
||||
move 1 from 7 to 8
|
||||
move 1 from 8 to 7
|
||||
move 2 from 3 to 6
|
||||
move 2 from 1 to 9
|
||||
move 2 from 5 to 6
|
||||
move 2 from 9 to 7
|
||||
move 9 from 7 to 3
|
||||
move 7 from 1 to 5
|
||||
move 5 from 5 to 2
|
||||
move 8 from 6 to 8
|
||||
move 5 from 8 to 9
|
48
2022/05/part1
Executable file
48
2022/05/part1
Executable file
@@ -0,0 +1,48 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import re
|
||||
|
||||
crates = []
|
||||
|
||||
def process_crates(spec):
|
||||
for i in range(0, len(spec), 4):
|
||||
pos = i // 4
|
||||
if len(crates) < pos + 1:
|
||||
crates.append([])
|
||||
|
||||
if spec[i] != '[':
|
||||
continue
|
||||
|
||||
crates[pos].append(spec[i+1])
|
||||
|
||||
def process_instruction(spec):
|
||||
m = re.search('^move (\d+) from (\d+) to (\d+)$', spec)
|
||||
count = int(m.group(1))
|
||||
src = int(m.group(2)) - 1
|
||||
dst = int(m.group(3)) - 1
|
||||
|
||||
for i in range(0, count):
|
||||
crates[dst].append(crates[src].pop())
|
||||
|
||||
with open('input') as f:
|
||||
# Read the diagram + separating line
|
||||
for line in f:
|
||||
if line[0] == ' ':
|
||||
continue
|
||||
if line == "\n":
|
||||
break
|
||||
process_crates(line.rstrip())
|
||||
|
||||
# We filled the lines upside down, so flip them
|
||||
for pos in crates:
|
||||
pos.reverse()
|
||||
|
||||
for line in f:
|
||||
process_instruction(line.rstrip())
|
||||
|
||||
out = ""
|
||||
for pos in crates:
|
||||
out = out + pos[-1]
|
||||
|
||||
print(out)
|
||||
|
51
2022/05/part2
Executable file
51
2022/05/part2
Executable file
@@ -0,0 +1,51 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import re
|
||||
|
||||
crates = []
|
||||
|
||||
def process_crates(spec):
|
||||
for i in range(0, len(spec), 4):
|
||||
pos = i // 4
|
||||
if len(crates) < pos + 1:
|
||||
crates.append([])
|
||||
|
||||
if spec[i] != '[':
|
||||
continue
|
||||
|
||||
crates[pos].append(spec[i+1])
|
||||
|
||||
def process_instruction(spec):
|
||||
m = re.search('^move (\d+) from (\d+) to (\d+)$', spec)
|
||||
count = int(m.group(1))
|
||||
src = int(m.group(2)) - 1
|
||||
dst = int(m.group(3)) - 1
|
||||
|
||||
items = []
|
||||
for i in range(0, count):
|
||||
items.append(crates[src].pop())
|
||||
items.reverse()
|
||||
crates[dst] = crates[dst] + items
|
||||
|
||||
with open('input') as f:
|
||||
# Read the diagram + separating line
|
||||
for line in f:
|
||||
if line[0] == ' ':
|
||||
continue
|
||||
if line == "\n":
|
||||
break
|
||||
process_crates(line.rstrip())
|
||||
|
||||
# We filled the lines upside down, so flip them
|
||||
for pos in crates:
|
||||
pos.reverse()
|
||||
|
||||
for line in f:
|
||||
process_instruction(line.rstrip())
|
||||
|
||||
out = ""
|
||||
for pos in crates:
|
||||
out = out + pos[-1]
|
||||
|
||||
print(out)
|
||||
|
1
2022/06/input
Normal file
1
2022/06/input
Normal file
@@ -0,0 +1 @@
|
||||
srlsrsnnwhwwmddwfddgldlglppcnpptftzzchzhbhmmvwmvwvvjsjnjbbvbmvmnmqmfmjfjjmllzddrvrrnsncnznndwwqrqjjsfsjsjsvsvzvtvfvrvhhbwwltttbhhvphhtqqnffsppdqqrmmfrmfrrwvrvrsvrsrzssrqqrfqrfrttqntnpttvrrcncnfftjfjwwfwjwpwwltlwwwvnvcnvvdgvddqlddnllrggqvgvzzjddfgdfdgfffsbfsffjmffprrmgmtmqqgzzlwldlbbgjjnfjnnvlnnlbbnjnzngglmggwtgwttnvtnvndndmnmdmcddzbdbbspbpwbpplvpvnnmtmqqwnwgglhghdhbhqbhhqrqhqcqmmmrwwlvvfnvfnnpddbfbgfgqglgddrggbgbqqfwfjfdjfflzldlbbsbbtftccgqggzgdglglzljjzbzfbzffgftfvtfvvvjmjzjmjfjqqccpcjppzfpzzsvvzjvvfgfmgffzhhdphdpdwdwmdwwlqljjzffzvfzfwzfzcztctssdpssndssvbbtbstbtnngjjspplttpffjggbbqsqnqcncscpcmccbmbdbtbcbbgqgwgwqgwgwsszqznzvvntvvmlvlvqqvgvwgwlldbblclqcqggtqqlsqlsqlqcczzqgghmgmrgmrggljlbjbsbsmmnlmmdppnpfnnvhnnzggchgggbwwvtvpptgpplsljjshhnphhblbnbpbgppfllhsllbtlbtllrprqrvvfgvgpgcpcdddjjplpssjrjqjggncnzccqdqfqpffvddhlhdllgzzrtrztrztzptztwwbjbnjnsjsfsbfbdbccnhnmhnhrhwhfhbbtzbtztzrttrzrfrcrtctqqrlrsshphwphwpwwcmczzpqzqztqqvzzshhddrvdrrztrrqcqbcqbbhnnpfnpfnnmcnmnccnmmhccjjwzwcwbwcwnngtnngrngnsnzzcvvvtnvvtpvtpvtvvhffbsfsnsdsmmzbbrqbqpbpcpdppzmzbmmtdmttvgvrvlrvvhddjgdjdbbthtjhjdjhdjjmssdldjllwppvbvnbnlbbbszbblpbpfbpblbzzszvssbcbgcghgbbcpbbqrrdjdnnjcjddjcdjjcqqhggflftftfhttvlttgdtdrttwppwvvrzzbggrjjmssrjsjmssdtttdbdvddpllpgllthhvfvhvddrhhnznwznwzzpbblvvpmvpmpddjvdvcddvsshfhrrghgnhghmhhmhffrsfrflrfrjrddzgzsggchcfhhsbbsrszzgjggnrrgfffhthdthtnhtntllsjjjwqqsbsttbtzbttlfttczzbfbwfwvvhllltjjsqsdqqspqsszqzhhdrrhccgbcgggcbggnvgvmmwcmmpqmqccshsnnnwrwfrrwrllvhvlvmlvljjgrgvrvddfqfwqfqlfqqqppvmvrmrfrvrwrqrjqrrvmrvmrrvffmtffsfdfdrdwrwjrrcgcwwcdwdrdnrnzztqzzzgdzgdgldltdtvtnnhllrtltbtrbbttgssdhsssrmsscnssmtmqqtssmzzjqzqddfrdrtdrdpdzzppwggsrrfvfnvvmgvgmmdnnbwnntlnntncchcmcjmmvzzzngznnbgbnbnvbvzzfqqmtmrmcmqmvmbmbmcmscsjcsshswsjsvswshwwlnnsslmslmmzgmgsmssrwwmjwmwllvbvppplmmwgmgzgzdgzdgzztrtzzchcssbppdbbmvmqmmzhztzdtzdznnqhhmcmnnncbnngjnjmjnmmqqsnqsnslnlqlppvbvwwvtwtfwtfmzsbdjfvhzcflstpbtprpzmwcwwgzshfssnjdgflcsfglhbvvdctfrccfmwgfvjtvqfqpzzmqtlbvrjqwlwclfzhfzcmwsvprdhzcrghdscprrnqgdgmhhwbcfcfzrcgrwvbstpwbcvcnpmftwwthnsjznzslfdfqhtpsgmjsddmhlhtlzfsnhlcbgnqpqbzppnbcgtzvwdpmgftgsmrwjqwsdnjrrmwrmlcvlqgwldnvmsgnwccwzmdzwdhpmpqffgbnrrrvzqhtlnvqfhgwbbwsghwbrjzjcjmjmsspcmnfbbpmwffbdqffqfwsvtcrghbnldspdhjhjvtdhgmvrzqqlhvnwbdhfprwqdtzswfdzdwhzvfzsfqlzcflhbsvjhnjnthrdrgmjrrbftflpvrmrvvsgnjhrhjffvznmbjtshwgjmcqbfqjlptsrcgzvrhctwsdclrstmsbsbpqpjcvftmvmsmpwmmphlwmljhvllhrmfcncdprrwfmqrlllmsrvrwtbsqddbmblhvqqlcbbtjbslggrshflrddsphbvzhprcvbpmfldnmwtchddbdwhwpgbmjqptsbdzhrbqfwgfltchsggjlbqbhmzbjdncnvsqjvftpwrpdcjzsrvrlzwqfptwzssqpltjhdmtmmgvjzzqswwrsqrqfpdllgzsdlvhfdnzlrmlqdclwhqqbtwdqcrlfdjphjvcfzpwwgphmrldnwjpnmsjnqpwtwglcbthmcbnvpmjbdhmjglgccsmrmbvbqphdlbrrgnbljlhqvgqbctmthvmsfzflwvctwmdgmrlhnmwnsjtzndlwfttcvtslppjwsgbzhztlpzhmjlrbtzfnblwwlddzwqvzbjmffbflvmvnsgjlqwjqvrcrtwbhfzbzzmtwsndqmtnbjbsqjpnwhzqgwwltwgrqfbhjtpzrqvvhgjsbzqmfdsmzjdnplvblvqlrtzsbjgdptdhgvvrblbjppnnhhnvqtmjgwqzwtmjglrjlwsrfdjfmzlsszzzpbwvjbwpcwlplhcmhgpclztjcrmcntnqbnlrmcnhcnhnmjggtqbtvcfmcbdpqhdrvspbrgcwhgjhggwpvjbplhdsnnvgbzhmcrjqvqlwsdvrrnntmwdgdqdvzznjflctlfmfzsdfbpftsscnbtnqcsvtltvnsqpghzcwtjctvwqqnvnddlzbftwrdqzltpczrbmvsmlpfjzphtpnngzdfrjqrtbppbvztsddblspbltsnrtdftmwbblgdqvmscjqpwfvdzphwqgrbpdfcvtvmddgjjpswrqnwjfghtzwzbhtjnwjsrnwhjwcwnrtwrmbmqjhrbmbsslnvtsqnlbzlfdjvmnlhccpzmvpmrnttnshdjsswjlbtpwdwgmzqcthbczngwnfpzbmmrdffqsbrmsgzrtpsstfmdgbclwthflfbzvtptdfpzznvdwncqzvjwsmczwcnwgjpffcbhrtmtnbtjgcvtwdjtrftjwgvzmlfvgdjjjgsftzctplmjjmqfdzzwrtfmwqhwzglwbvsdvtgphsmngvppvlfdjdrzhhzsrvqgfwjbqdqlrwbgdmrglzrchvgwlhhwbvhfszntbrhshvqdznfvngdmhctjnlfhsmchqbqhdtmlntsnpvdzrvwjcjflfqgnprcpscfcmlgbwzmbnfdfnbwngrrbpnvbcdfgcpgtwmtbzptsdvjhwnzpsffglnqlczgsrdzshrfpqtqbmsrgzwwjvqhzjfzldcggvfhtcvzsgfspnlgtjfglwcnbprvssdfbtzqbblzjzmtftfcfprlwsvswjvtpzcpfphvmdnbczzjbjjrpwrncdszrtqjvznvgzcwdvpfvfcqlsdmhsswpnfsvtffnjhstcznwghlpmmqbnhqtddbjdrpvfhgdwjcnfgggmwnqhmsvgzsssbfcfrmbwpfqhrmtdvhbpwzggdvfjnlrgmvjjbqhjmbvszfzdcwrcjhfdczbhmcrwngmrgrldvbjjdgddhbbvqvwztfstfzqnqwvmmdzhzqtrmnqfrhmtdfhrgfqclpqdwthrbgsprccwcsvdbnclglgflhtqstvpwrmnsvflpplrgftlvjwttmdcqwjnbttjqqlwsntplmfrncqzplwgrjpzljtmnwsqfqnzgnrbtscbfzqwnqttnghcgl
|
14
2022/06/part1
Executable file
14
2022/06/part1
Executable file
@@ -0,0 +1,14 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
from collections import deque
|
||||
|
||||
with open('input') as f:
|
||||
offset = 0
|
||||
buf = deque([], 4)
|
||||
|
||||
while True:
|
||||
buf.append(f.read(1))
|
||||
offset += 1
|
||||
if len(set(buf)) == 4:
|
||||
print(offset)
|
||||
break
|
14
2022/06/part2
Executable file
14
2022/06/part2
Executable file
@@ -0,0 +1,14 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
from collections import deque
|
||||
|
||||
with open('input') as f:
|
||||
offset = 0
|
||||
buf = deque([], 14)
|
||||
|
||||
while True:
|
||||
buf.append(f.read(1))
|
||||
offset += 1
|
||||
if len(set(buf)) == 14:
|
||||
print(offset)
|
||||
break
|
899
2022/07/input
Normal file
899
2022/07/input
Normal file
@@ -0,0 +1,899 @@
|
||||
$ cd /
|
||||
$ ls
|
||||
dir ctd
|
||||
80649 mwcj.pmh
|
||||
212527 nbb.ztq
|
||||
dir pgqmwn
|
||||
152170 scr.smr
|
||||
17637 snqcgbs.nhv
|
||||
dir tmw
|
||||
dir vtm
|
||||
$ cd ctd
|
||||
$ ls
|
||||
dir bblsqnwl
|
||||
dir gzcjrs
|
||||
dir pgqmwn
|
||||
dir qzgjp
|
||||
dir shmvmqv
|
||||
$ cd bblsqnwl
|
||||
$ ls
|
||||
dir rng
|
||||
$ cd rng
|
||||
$ ls
|
||||
dir jncpmzcs
|
||||
dir pttvmghm
|
||||
293353 qcjbfggw.tjj
|
||||
dir sgm
|
||||
$ cd jncpmzcs
|
||||
$ ls
|
||||
36126 tstwmrbr.bmr
|
||||
$ cd ..
|
||||
$ cd pttvmghm
|
||||
$ ls
|
||||
38802 ctttjn.nzr
|
||||
$ cd ..
|
||||
$ cd sgm
|
||||
$ ls
|
||||
dir djcbdbgr
|
||||
dir gqrr
|
||||
$ cd djcbdbgr
|
||||
$ ls
|
||||
254050 nbb.ztq
|
||||
$ cd ..
|
||||
$ cd gqrr
|
||||
$ ls
|
||||
168685 jgsqvf.tql
|
||||
302004 shmvmqv
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd gzcjrs
|
||||
$ ls
|
||||
319972 bwnjnmmh.wwd
|
||||
25495 fzthlhcp.nst
|
||||
291270 ghjc.nvf
|
||||
244664 jrlfb.fvz
|
||||
$ cd ..
|
||||
$ cd pgqmwn
|
||||
$ ls
|
||||
dir zpvthlgp
|
||||
$ cd zpvthlgp
|
||||
$ ls
|
||||
128092 dqvcqs.zpb
|
||||
140511 nvqsqtjw
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd qzgjp
|
||||
$ ls
|
||||
23062 jgsqvf.tql
|
||||
254685 nbb.ztq
|
||||
dir pgqmwn
|
||||
320683 shmvmqv
|
||||
105368 shmvmqv.hmg
|
||||
60805 snqcgbs
|
||||
$ cd pgqmwn
|
||||
$ ls
|
||||
47287 gffvwmr.pbd
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd shmvmqv
|
||||
$ ls
|
||||
80751 crtwwqb
|
||||
dir dbfm
|
||||
dir dhhghph
|
||||
dir pgqmwn
|
||||
195177 qnm
|
||||
dir qpbn
|
||||
dir rwmsqdw
|
||||
dir shmvmqv
|
||||
16133 shmvmqv.vwq
|
||||
187938 tmw
|
||||
$ cd dbfm
|
||||
$ ls
|
||||
dir gbpnjrt
|
||||
265813 glzz.mjv
|
||||
108147 nbb.ztq
|
||||
229253 nvqsqtjw
|
||||
85743 pgqmwn
|
||||
261375 qnm
|
||||
$ cd gbpnjrt
|
||||
$ ls
|
||||
179812 mtp.lnf
|
||||
234550 shmvmqv.qvq
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd dhhghph
|
||||
$ ls
|
||||
dir ghmpb
|
||||
70514 zqv.ssn
|
||||
$ cd ghmpb
|
||||
$ ls
|
||||
132693 shmvmqv.csb
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd pgqmwn
|
||||
$ ls
|
||||
dir hcbtbr
|
||||
200292 pgqmwn
|
||||
67530 sgm
|
||||
15442 snqcgbs
|
||||
$ cd hcbtbr
|
||||
$ ls
|
||||
249252 dqvcqs.zpb
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd qpbn
|
||||
$ ls
|
||||
dir pmbw
|
||||
261142 qnm
|
||||
dir rsfh
|
||||
239788 sgm
|
||||
dir wfwl
|
||||
$ cd pmbw
|
||||
$ ls
|
||||
dir gwwdtzp
|
||||
dir jszzc
|
||||
32725 rnggjs.cbv
|
||||
dir sldv
|
||||
dir tptrlz
|
||||
$ cd gwwdtzp
|
||||
$ ls
|
||||
dir dlvbdn
|
||||
63066 dslb.mrp
|
||||
dir shmvmqv
|
||||
dir tzssf
|
||||
$ cd dlvbdn
|
||||
$ ls
|
||||
190731 nqv.csc
|
||||
$ cd ..
|
||||
$ cd shmvmqv
|
||||
$ ls
|
||||
223667 nbb.ztq
|
||||
$ cd ..
|
||||
$ cd tzssf
|
||||
$ ls
|
||||
27296 rlgswwzq.dgj
|
||||
dir tfdq
|
||||
206881 wrdqg.pfj
|
||||
$ cd tfdq
|
||||
$ ls
|
||||
26512 wsgh
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd jszzc
|
||||
$ ls
|
||||
218701 qpz.hdm
|
||||
$ cd ..
|
||||
$ cd sldv
|
||||
$ ls
|
||||
dir hsbzqtml
|
||||
3895 jgsqvf.tql
|
||||
181815 nbb.ztq
|
||||
294048 shmvmqv.fcm
|
||||
dir snqcgbs
|
||||
dir tmw
|
||||
203484 zfpjq.pvn
|
||||
dir zlpwdp
|
||||
$ cd hsbzqtml
|
||||
$ ls
|
||||
dir shmvmqv
|
||||
$ cd shmvmqv
|
||||
$ ls
|
||||
103536 nbb.ztq
|
||||
32635 wmc
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd snqcgbs
|
||||
$ ls
|
||||
95112 dch
|
||||
$ cd ..
|
||||
$ cd tmw
|
||||
$ ls
|
||||
dir dplm
|
||||
275451 hsr.zhn
|
||||
9766 qnm
|
||||
177383 ztbmqjqb.hwj
|
||||
$ cd dplm
|
||||
$ ls
|
||||
277671 dqvcqs.zpb
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd zlpwdp
|
||||
$ ls
|
||||
315030 snqcgbs.mlz
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd tptrlz
|
||||
$ ls
|
||||
dir jfflz
|
||||
154685 qbbpstff.fcs
|
||||
dir sjjgljg
|
||||
dir zsssqcsb
|
||||
$ cd jfflz
|
||||
$ ls
|
||||
1330 fvldwzn.dbb
|
||||
227153 nbb.ztq
|
||||
$ cd ..
|
||||
$ cd sjjgljg
|
||||
$ ls
|
||||
295745 frjnfsgt.fmq
|
||||
105131 jtbltpv.vhm
|
||||
174279 pgqmwn
|
||||
104317 sgm
|
||||
$ cd ..
|
||||
$ cd zsssqcsb
|
||||
$ ls
|
||||
246361 bnzsv.dqf
|
||||
dir ggcvqf
|
||||
dir htqpwzw
|
||||
249833 jgsqvf.tql
|
||||
dir lbtjth
|
||||
dir lcfwb
|
||||
306768 mmd.gjw
|
||||
121112 pgqmwn
|
||||
dir sgm
|
||||
dir shmvmqv
|
||||
dir snqcgbs
|
||||
55055 tmw.rqm
|
||||
$ cd ggcvqf
|
||||
$ ls
|
||||
46573 fcwznd
|
||||
$ cd ..
|
||||
$ cd htqpwzw
|
||||
$ ls
|
||||
dir bmzvdzsv
|
||||
193713 fpp.vwd
|
||||
39898 mfjcnl.szn
|
||||
65370 msljctr
|
||||
10685 ppgzbc.trg
|
||||
94843 shmvmqv.hqn
|
||||
dir thfdg
|
||||
$ cd bmzvdzsv
|
||||
$ ls
|
||||
74898 pgqmwn.wwh
|
||||
$ cd ..
|
||||
$ cd thfdg
|
||||
$ ls
|
||||
dir cpsgcll
|
||||
$ cd cpsgcll
|
||||
$ ls
|
||||
244683 gdfw
|
||||
17203 tmw
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd lbtjth
|
||||
$ ls
|
||||
dir snqcgbs
|
||||
$ cd snqcgbs
|
||||
$ ls
|
||||
122394 grhbhpw.fsl
|
||||
55324 jgsqvf.tql
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd lcfwb
|
||||
$ ls
|
||||
138053 nvqsqtjw
|
||||
$ cd ..
|
||||
$ cd sgm
|
||||
$ ls
|
||||
314313 dqvcqs.zpb
|
||||
146274 fftqvs.ltt
|
||||
225372 jtq.rzq
|
||||
85697 rctzgq.rsr
|
||||
dir sgm
|
||||
262221 tqpng
|
||||
$ cd sgm
|
||||
$ ls
|
||||
dir cmvvd
|
||||
277366 mhs.tpn
|
||||
77975 nbb.ztq
|
||||
160966 qrwbvbd.ghf
|
||||
55949 snqcgbs.qzc
|
||||
$ cd cmvvd
|
||||
$ ls
|
||||
28054 lfsvfsl
|
||||
165671 tmw.zwh
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd shmvmqv
|
||||
$ ls
|
||||
51884 bsbwrjnz.dmt
|
||||
231236 jfmsg.mts
|
||||
dir qpb
|
||||
256063 zhmw
|
||||
65512 zrnhr
|
||||
$ cd qpb
|
||||
$ ls
|
||||
228289 dqvcqs.zpb
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd snqcgbs
|
||||
$ ls
|
||||
dir mnwgf
|
||||
$ cd mnwgf
|
||||
$ ls
|
||||
178834 qgnwvlfd.cps
|
||||
255140 sls.mnw
|
||||
9546 tvhbm
|
||||
281615 vntrb
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd rsfh
|
||||
$ ls
|
||||
310413 snqcgbs
|
||||
$ cd ..
|
||||
$ cd wfwl
|
||||
$ ls
|
||||
dir fmvg
|
||||
129025 jgsqvf.tql
|
||||
$ cd fmvg
|
||||
$ ls
|
||||
276100 nvqsqtjw
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd rwmsqdw
|
||||
$ ls
|
||||
46554 qzdmgl
|
||||
55785 shmvmqv
|
||||
127982 tfffrg.sbz
|
||||
$ cd ..
|
||||
$ cd shmvmqv
|
||||
$ ls
|
||||
dir ntstz
|
||||
dir vprlz
|
||||
$ cd ntstz
|
||||
$ ls
|
||||
304801 nvqsqtjw
|
||||
28969 wzfb.fjv
|
||||
$ cd ..
|
||||
$ cd vprlz
|
||||
$ ls
|
||||
dir cmmtnt
|
||||
dir shmvmqv
|
||||
$ cd cmmtnt
|
||||
$ ls
|
||||
270129 shmvmqv
|
||||
$ cd ..
|
||||
$ cd shmvmqv
|
||||
$ ls
|
||||
dir sgm
|
||||
$ cd sgm
|
||||
$ ls
|
||||
287889 hghh.mwt
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd pgqmwn
|
||||
$ ls
|
||||
85368 qnm
|
||||
$ cd ..
|
||||
$ cd tmw
|
||||
$ ls
|
||||
dir fnpjwg
|
||||
dir gdt
|
||||
dir ggs
|
||||
dir llh
|
||||
69470 nvqsqtjw
|
||||
dir sgm
|
||||
$ cd fnpjwg
|
||||
$ ls
|
||||
161820 dndq.tfl
|
||||
dir dwmcs
|
||||
205155 tdccsw.qlq
|
||||
165352 vvmnpj
|
||||
$ cd dwmcs
|
||||
$ ls
|
||||
121466 dqvcqs.zpb
|
||||
274171 qbbqmf.ltf
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd gdt
|
||||
$ ls
|
||||
dir cnvtrw
|
||||
dir gdcvdsv
|
||||
dir hcn
|
||||
dir hsmhn
|
||||
dir jnhqz
|
||||
78446 pgqmwn.mwr
|
||||
dir qwfl
|
||||
dir snqcgbs
|
||||
$ cd cnvtrw
|
||||
$ ls
|
||||
dir hfvzm
|
||||
$ cd hfvzm
|
||||
$ ls
|
||||
305880 tmw.lvw
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd gdcvdsv
|
||||
$ ls
|
||||
69690 jhscd
|
||||
$ cd ..
|
||||
$ cd hcn
|
||||
$ ls
|
||||
166775 dqvcqs.zpb
|
||||
294325 nvqsqtjw
|
||||
$ cd ..
|
||||
$ cd hsmhn
|
||||
$ ls
|
||||
172897 lrjf.dnw
|
||||
dir npgr
|
||||
225227 pbcmjg.rhf
|
||||
234530 pgqmwn.cqb
|
||||
dir qlz
|
||||
dir snqcgbs
|
||||
52808 tnntq.wjt
|
||||
$ cd npgr
|
||||
$ ls
|
||||
141280 qnm
|
||||
64422 rwv
|
||||
$ cd ..
|
||||
$ cd qlz
|
||||
$ ls
|
||||
258070 nbb.ztq
|
||||
$ cd ..
|
||||
$ cd snqcgbs
|
||||
$ ls
|
||||
3723 frcr.jmn
|
||||
109486 sgm.nsw
|
||||
114054 shmvmqv.frr
|
||||
142024 snqcgbs
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd jnhqz
|
||||
$ ls
|
||||
dir gpztwnqm
|
||||
dir nwpqbf
|
||||
dir sgm
|
||||
dir tmw
|
||||
$ cd gpztwnqm
|
||||
$ ls
|
||||
303103 bjbpj
|
||||
281422 hgp
|
||||
284044 jgsqvf.tql
|
||||
dir qzts
|
||||
133248 sgm
|
||||
$ cd qzts
|
||||
$ ls
|
||||
2428 dqvcqs.zpb
|
||||
283206 hzs.smg
|
||||
dir lmlw
|
||||
$ cd lmlw
|
||||
$ ls
|
||||
dir sjrfmpc
|
||||
$ cd sjrfmpc
|
||||
$ ls
|
||||
164708 nbb.ztq
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd nwpqbf
|
||||
$ ls
|
||||
192033 dqvcqs.zpb
|
||||
298220 jqd.bfh
|
||||
dir mhtsg
|
||||
100921 snqcgbs
|
||||
dir zbtb
|
||||
$ cd mhtsg
|
||||
$ ls
|
||||
140813 cgcn.rjn
|
||||
$ cd ..
|
||||
$ cd zbtb
|
||||
$ ls
|
||||
201213 gjglrmf.dzv
|
||||
dir grbl
|
||||
81636 pgqmwn.zfm
|
||||
265992 pwhbflzn.sch
|
||||
dir twjrlzpj
|
||||
$ cd grbl
|
||||
$ ls
|
||||
82894 jgsqvf.tql
|
||||
$ cd ..
|
||||
$ cd twjrlzpj
|
||||
$ ls
|
||||
304952 cwhtqv.zvh
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd sgm
|
||||
$ ls
|
||||
56329 ftfvfpz.srv
|
||||
3875 nbb.ztq
|
||||
4766 shmvmqv.fdt
|
||||
247272 vbw.hsv
|
||||
$ cd ..
|
||||
$ cd tmw
|
||||
$ ls
|
||||
dir ddbvd
|
||||
$ cd ddbvd
|
||||
$ ls
|
||||
83200 tnrwdc.dzm
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd qwfl
|
||||
$ ls
|
||||
dir bcfnz
|
||||
23440 nvqsqtjw
|
||||
dir pwb
|
||||
206984 shmvmqv.fjb
|
||||
35453 snqcgbs
|
||||
297136 snqcgbs.fnr
|
||||
dir tmw
|
||||
181689 wcbdwwq
|
||||
$ cd bcfnz
|
||||
$ ls
|
||||
dir fnrclwn
|
||||
dir fslh
|
||||
258656 gtbhdpt.pth
|
||||
238261 psbsmvpf.lmt
|
||||
dir sgm
|
||||
$ cd fnrclwn
|
||||
$ ls
|
||||
30297 crhjfzlp.gtb
|
||||
297557 gvvnbmt.spr
|
||||
189301 nvqsqtjw
|
||||
45159 sndmlvw.lsb
|
||||
259295 sqd
|
||||
$ cd ..
|
||||
$ cd fslh
|
||||
$ ls
|
||||
246662 bpvcj.hnf
|
||||
$ cd ..
|
||||
$ cd sgm
|
||||
$ ls
|
||||
dir jpr
|
||||
dir tmw
|
||||
dir wscvtrd
|
||||
$ cd jpr
|
||||
$ ls
|
||||
49005 dqvcqs.zpb
|
||||
$ cd ..
|
||||
$ cd tmw
|
||||
$ ls
|
||||
201387 sgm
|
||||
$ cd ..
|
||||
$ cd wscvtrd
|
||||
$ ls
|
||||
77175 blczlqf.pnv
|
||||
207393 shmvmqv.qbs
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd pwb
|
||||
$ ls
|
||||
89451 bqcmzzf
|
||||
207548 gfwgnft.php
|
||||
dir gsn
|
||||
dir jtvpnvz
|
||||
144792 nbb.ztq
|
||||
dir nzzqj
|
||||
214209 pgqmwn.sjv
|
||||
236845 pzvjqqvz
|
||||
dir sgm
|
||||
dir snqcgbs
|
||||
dir vfvttj
|
||||
$ cd gsn
|
||||
$ ls
|
||||
93490 snqcgbs.fbv
|
||||
$ cd ..
|
||||
$ cd jtvpnvz
|
||||
$ ls
|
||||
dir fdnvff
|
||||
208857 gpvwzhd
|
||||
229559 rnc
|
||||
225519 snqcgbs
|
||||
162969 tmw
|
||||
$ cd fdnvff
|
||||
$ ls
|
||||
286944 dztqqtf.nmp
|
||||
dir rwc
|
||||
181737 snqcgbs
|
||||
$ cd rwc
|
||||
$ ls
|
||||
115290 nbb.ztq
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd nzzqj
|
||||
$ ls
|
||||
154210 jgsqvf.tql
|
||||
dir sgm
|
||||
182438 snqcgbs.wpg
|
||||
dir zpvghr
|
||||
$ cd sgm
|
||||
$ ls
|
||||
123163 rjgc.ccm
|
||||
dir rqn
|
||||
291622 tflv.pqc
|
||||
$ cd rqn
|
||||
$ ls
|
||||
220655 rtbrwmjn.clj
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd zpvghr
|
||||
$ ls
|
||||
288859 dqvcqs.zpb
|
||||
218036 hfdcrjp
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd sgm
|
||||
$ ls
|
||||
107183 sgm.nsf
|
||||
225832 sjwn
|
||||
dir tgf
|
||||
$ cd tgf
|
||||
$ ls
|
||||
258766 nvqsqtjw
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd snqcgbs
|
||||
$ ls
|
||||
56144 whjpg.ffz
|
||||
$ cd ..
|
||||
$ cd vfvttj
|
||||
$ ls
|
||||
dir ptmggmsl
|
||||
$ cd ptmggmsl
|
||||
$ ls
|
||||
dir psd
|
||||
dir wdzptvjc
|
||||
$ cd psd
|
||||
$ ls
|
||||
121637 dqvcqs.zpb
|
||||
$ cd ..
|
||||
$ cd wdzptvjc
|
||||
$ ls
|
||||
dir shmvmqv
|
||||
$ cd shmvmqv
|
||||
$ ls
|
||||
23754 dqmrj.fhh
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd tmw
|
||||
$ ls
|
||||
17390 hqz
|
||||
dir jnsb
|
||||
31072 nvqsqtjw
|
||||
dir tmw
|
||||
144511 vvwjcqr.rtz
|
||||
$ cd jnsb
|
||||
$ ls
|
||||
265907 snqcgbs.swh
|
||||
$ cd ..
|
||||
$ cd tmw
|
||||
$ ls
|
||||
dir gfncpvw
|
||||
$ cd gfncpvw
|
||||
$ ls
|
||||
dir ctvwgtlh
|
||||
$ cd ctvwgtlh
|
||||
$ ls
|
||||
29825 ccjvs.qqq
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd snqcgbs
|
||||
$ ls
|
||||
230355 ccl.ddg
|
||||
dir csfdmhmb
|
||||
dir drpgbvzf
|
||||
313060 hhcpw.nbs
|
||||
dir pfpn
|
||||
dir ptwnpdnc
|
||||
273250 qfsnmbm
|
||||
dir shmvmqv
|
||||
244767 tmw.zjg
|
||||
$ cd csfdmhmb
|
||||
$ ls
|
||||
50690 nbb.ztq
|
||||
282078 vzrw
|
||||
$ cd ..
|
||||
$ cd drpgbvzf
|
||||
$ ls
|
||||
dir bhwvqf
|
||||
803 dqvcqs.zpb
|
||||
49859 hhw.gpd
|
||||
180202 nbb.ztq
|
||||
dir nfh
|
||||
64808 pgqmwn
|
||||
276746 qnm
|
||||
dir shmvmqv
|
||||
dir tmw
|
||||
$ cd bhwvqf
|
||||
$ ls
|
||||
76667 qcgpdwm.sbs
|
||||
$ cd ..
|
||||
$ cd nfh
|
||||
$ ls
|
||||
23774 jgsqvf.tql
|
||||
34652 pnp.lvp
|
||||
120264 zvp
|
||||
$ cd ..
|
||||
$ cd shmvmqv
|
||||
$ ls
|
||||
47748 cswm.dsr
|
||||
dir pgqmwn
|
||||
$ cd pgqmwn
|
||||
$ ls
|
||||
109587 qnm
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd tmw
|
||||
$ ls
|
||||
105578 snqcgbs
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd pfpn
|
||||
$ ls
|
||||
194628 wgc
|
||||
$ cd ..
|
||||
$ cd ptwnpdnc
|
||||
$ ls
|
||||
142456 rvwtfvr.tsc
|
||||
$ cd ..
|
||||
$ cd shmvmqv
|
||||
$ ls
|
||||
118642 hgqlrt.btl
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd ggs
|
||||
$ ls
|
||||
231223 hmtp.djc
|
||||
$ cd ..
|
||||
$ cd llh
|
||||
$ ls
|
||||
dir hbq
|
||||
dir svt
|
||||
$ cd hbq
|
||||
$ ls
|
||||
157243 fhpsb
|
||||
36981 rdbqnbfr.cwz
|
||||
282257 tmw.wwv
|
||||
$ cd ..
|
||||
$ cd svt
|
||||
$ ls
|
||||
161395 sgm.hdl
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd sgm
|
||||
$ ls
|
||||
247276 fss
|
||||
dir pgqmwn
|
||||
68084 pgqmwn.vfl
|
||||
28475 sgm.swb
|
||||
dir shmvmqv
|
||||
223438 snqcgbs.bng
|
||||
$ cd pgqmwn
|
||||
$ ls
|
||||
134640 dqvcqs.zpb
|
||||
dir nrdd
|
||||
25431 nvqsqtjw
|
||||
149751 qhzqw
|
||||
dir vfmcjhwz
|
||||
dir zlfhr
|
||||
$ cd nrdd
|
||||
$ ls
|
||||
dir pgqmwn
|
||||
$ cd pgqmwn
|
||||
$ ls
|
||||
57090 nfbd
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd vfmcjhwz
|
||||
$ ls
|
||||
24256 fdzfwfh.rcv
|
||||
$ cd ..
|
||||
$ cd zlfhr
|
||||
$ ls
|
||||
20504 fgbpndj.wgm
|
||||
181769 qnm
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd shmvmqv
|
||||
$ ls
|
||||
208988 nbb.ztq
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd vtm
|
||||
$ ls
|
||||
dir lqvjm
|
||||
dir msmtcnsj
|
||||
dir qmtgdn
|
||||
dir tmw
|
||||
$ cd lqvjm
|
||||
$ ls
|
||||
239772 hnj.zqf
|
||||
$ cd ..
|
||||
$ cd msmtcnsj
|
||||
$ ls
|
||||
48711 clfl.fsl
|
||||
245929 ddh.gdq
|
||||
dir fvlb
|
||||
241040 nvqsqtjw
|
||||
dir shmvmqv
|
||||
305567 vdzzqpz.jfs
|
||||
$ cd fvlb
|
||||
$ ls
|
||||
25669 ddz.tbc
|
||||
$ cd ..
|
||||
$ cd shmvmqv
|
||||
$ ls
|
||||
283905 nvqsqtjw
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd qmtgdn
|
||||
$ ls
|
||||
246479 pgqmwn
|
||||
35386 rtf.cdp
|
||||
217551 sgm.mrz
|
||||
$ cd ..
|
||||
$ cd tmw
|
||||
$ ls
|
||||
dir qfggmdvd
|
||||
dir tlv
|
||||
dir tmw
|
||||
$ cd qfggmdvd
|
||||
$ ls
|
||||
288091 djwfq.wzc
|
||||
37383 pwnzdj
|
||||
214119 shmvmqv.wlg
|
||||
29747 tmw.ntw
|
||||
146556 zgbd
|
||||
$ cd ..
|
||||
$ cd tlv
|
||||
$ ls
|
||||
142924 grj.qhw
|
||||
210672 qhmn
|
||||
209554 zbcqcb.mhn
|
||||
141215 zjmrgw.wlc
|
||||
$ cd ..
|
||||
$ cd tmw
|
||||
$ ls
|
||||
dir fwsgn
|
||||
dir tmw
|
||||
$ cd fwsgn
|
||||
$ ls
|
||||
dir qbbhrst
|
||||
306142 sgm
|
||||
$ cd qbbhrst
|
||||
$ ls
|
||||
dir sgm
|
||||
dir srbn
|
||||
$ cd sgm
|
||||
$ ls
|
||||
80992 bbvqrcf.chp
|
||||
$ cd ..
|
||||
$ cd srbn
|
||||
$ ls
|
||||
161382 nvqsqtjw
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd ..
|
||||
$ cd tmw
|
||||
$ ls
|
||||
219508 dqvcqs.zpb
|
||||
dir tmw
|
||||
134434 wbvvgqwn.bmh
|
||||
$ cd tmw
|
||||
$ ls
|
||||
209116 pgqmwn
|
61
2022/07/part1
Normal file
61
2022/07/part1
Normal file
@@ -0,0 +1,61 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import re
|
||||
from functools import reduce
|
||||
|
||||
FS = {}
|
||||
POS = [] # empty dict is /
|
||||
|
||||
def dig(d, keys):
|
||||
if keys == []:
|
||||
return d
|
||||
else:
|
||||
return reduce(dict.__getitem__, keys, d)
|
||||
|
||||
def process_instruction(spec):
|
||||
_, cmd, *args = spec.split(" ")
|
||||
if cmd == "cd":
|
||||
if args[0] == "/":
|
||||
POS.clear()
|
||||
elif args[0] == "..":
|
||||
POS.pop()
|
||||
else:
|
||||
POS.append(args[0])
|
||||
elif cmd != "ls": # nothing to do for ls
|
||||
raise "Unknown command: " + spec
|
||||
|
||||
def process_output(spec):
|
||||
cwd = dig(FS, POS)
|
||||
size_or_dir, name = spec.split(" ")
|
||||
|
||||
if size_or_dir == "dir":
|
||||
cwd[name] = {}
|
||||
else:
|
||||
cwd[name] = int(size_or_dir)
|
||||
|
||||
with open('input') as f:
|
||||
# Read the diagram + separating line
|
||||
for line in f:
|
||||
if line[0] == '$':
|
||||
process_instruction(line.rstrip())
|
||||
else:
|
||||
process_output(line.rstrip())
|
||||
|
||||
SIZE = []
|
||||
# Recursively sum each dictionary and add the sums together
|
||||
def sum_sizes(d):
|
||||
sz = 0
|
||||
|
||||
for v in d.values():
|
||||
if isinstance(v, dict):
|
||||
sz = sz + sum_sizes(v)
|
||||
else:
|
||||
sz = sz + v
|
||||
|
||||
if sz <= 100000:
|
||||
SIZE.append(sz)
|
||||
|
||||
return sz
|
||||
|
||||
sum_sizes(FS)
|
||||
print(sum(SIZE))
|
67
2022/07/part2
Executable file
67
2022/07/part2
Executable file
@@ -0,0 +1,67 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import re
|
||||
from functools import reduce
|
||||
|
||||
FS = {}
|
||||
POS = [] # empty dict is /
|
||||
|
||||
def dig(d, keys):
|
||||
if keys == []:
|
||||
return d
|
||||
else:
|
||||
return reduce(dict.__getitem__, keys, d)
|
||||
|
||||
def process_instruction(spec):
|
||||
_, cmd, *args = spec.split(" ")
|
||||
if cmd == "cd":
|
||||
if args[0] == "/":
|
||||
POS.clear()
|
||||
elif args[0] == "..":
|
||||
POS.pop()
|
||||
else:
|
||||
POS.append(args[0])
|
||||
elif cmd != "ls": # nothing to do for ls
|
||||
raise "Unknown command: " + spec
|
||||
|
||||
def process_output(spec):
|
||||
cwd = dig(FS, POS)
|
||||
size_or_dir, name = spec.split(" ")
|
||||
|
||||
if size_or_dir == "dir":
|
||||
cwd[name] = {}
|
||||
else:
|
||||
cwd[name] = int(size_or_dir)
|
||||
|
||||
with open('input') as f:
|
||||
# Read the diagram + separating line
|
||||
for line in f:
|
||||
if line[0] == '$':
|
||||
process_instruction(line.rstrip())
|
||||
else:
|
||||
process_output(line.rstrip())
|
||||
|
||||
SIZE = []
|
||||
|
||||
# Recursively sum each dictionary and add the sums together
|
||||
def sum_sizes(d):
|
||||
sz = 0
|
||||
|
||||
for v in d.values():
|
||||
if isinstance(v, dict):
|
||||
sz = sz + sum_sizes(v)
|
||||
else:
|
||||
sz = sz + v
|
||||
|
||||
SIZE.append(sz)
|
||||
|
||||
return sz
|
||||
|
||||
total_used = sum_sizes(FS)
|
||||
space_free = 70000000 - total_used
|
||||
target = 30000000 - space_free
|
||||
|
||||
for v in sorted(SIZE):
|
||||
if v >= target:
|
||||
print(v)
|
||||
break
|
99
2022/08/input
Normal file
99
2022/08/input
Normal file
@@ -0,0 +1,99 @@
|
||||
230302102312303431324124303141114045300001501242156105363242032123135210143324224140132332112100221
|
||||
322200120140130323143433402101444233512140224062422011111403231052521053542252401012232443102111032
|
||||
220300201042003221454531141345330151415344324656555610153343240503352304331551230452141112120303320
|
||||
131301034134041313145104311104431531104002136262204021050462633364005504230105333250310334430012231
|
||||
021000431324243205221240551231546346005546113055526350502461501303260444304552521404504240012202100
|
||||
130032042140100501120530551053341401664420533042546256013026351632616214431331333233341222140143402
|
||||
102213021202104044154525451632332223320015014365014110000262152226451306654102512123512023131343201
|
||||
331321033401405043214153225511265312435604105124767542760400104362304616510410004451235001241134031
|
||||
234010022341252215202325124644011146300614531262461555623242615510132104506502155353245030411321214
|
||||
304102101231325220244422554336626240225366453655233535214545356712401516453566460554521045401410034
|
||||
124222310241022025221634021203456261377536264451547554432421672616632511164231351545110100421124041
|
||||
231432431351552412035636562534314116212363155763515352233177566413166344310511112324524355103343213
|
||||
103031123324141030040550165506212465546735652123674755314542271633361443500442335114204031255241224
|
||||
320113443131100311503426244335257671411253247761166615472155473411374661621210160254602143000503002
|
||||
003031503150544521324165216521624371212157515435232724117746343274255223574322040541222535240125320
|
||||
431234101124435354234422257673575575175341283683836588272273446224536761435621240216142511140302323
|
||||
123130200251405600130545412766211145442246588283778878426386645127335561311156623533260243441410122
|
||||
432402514341626355125037245134531317588423262388855625822687585244364351651321623121561560010312113
|
||||
312341305215255100304471152277172523637784345263433358277226635245516164123212336452605424200110430
|
||||
001434330142034560665237211325533756327872855833882354736845633764265764254723135136216531341302425
|
||||
345110412256633232261137637156368637757634446735753883783375577533786454271246611655350133245255344
|
||||
130515311233246602623742771612278266785844368233445235428485736334867477631346361563230603123034134
|
||||
330040046512436325746335744443684727248746257893478978476233834562664674872164576161101306065422041
|
||||
222154026412500467311716243862854643768585738339383839693837627262625554423155651645532206206134414
|
||||
542550455123342216235327358832483365754856794969568679863575688486863754828773355515541016335040545
|
||||
404234533623052522751165344644483278684968464647937735374953694986883822877673474565215510426220344
|
||||
314254353400344713147333655472357537587356967673598874457668767889935746887521663427411521635661241
|
||||
250301522140303127537224263455464893375697787574446387685355687386368545878447447117247625662212301
|
||||
531245634640354662654558667774728435789865389774334746464789766764944468568554351264634206163162541
|
||||
254210565205047575772722425336239545866857335764867899689375964484886366575237326255114412442436305
|
||||
254440240052645344117878758858477694934868449869846797495773435673485582766622343237654674230614650
|
||||
302350056253421457757382352837655457348549979584868566587675763536549455773244366226575120110432202
|
||||
524251410101643732555863746673768898357598988876769465556757759865678788677845447537546514520246465
|
||||
412424366507365464723435562846447777556788564867748886999988659539789863738827284322243654235650222
|
||||
302260630341726247764652638469957786688964699758599945666799457875988357894464748565724572166261234
|
||||
215150213244237121847528247786444449998976749466844877974565875546766745893426378444445742710223525
|
||||
424160233533557213425484474439489658786978977985856797555685676569553489768586885887425626363046446
|
||||
153322066741372433344452464455559968984567799888687677756697744545783483874576867684647332571001005
|
||||
145420124453223247785888737894569596698676567955697655669665679864796955354676474465373675660155614
|
||||
033506450161333145373824444348436889577445897969987595896979686466678689467597644746532527513131131
|
||||
225012522655144432763537973395798658496758867787886779885975689947696977368784268458336146373115143
|
||||
216342537614133655675625959443677654855666875698895757965779667678777945996749485327555574145424460
|
||||
166106344353256563624325443477776845578965867968867569996565856754694668864655545773383227234335414
|
||||
150522031675635233237668486584959896545865765899786958699768689485564988376498275457676373151605464
|
||||
412336103615667832572493349365459748765865988788966796676798558958658889874394465442751254315016610
|
||||
352326617457732528434753466738454444568858687988678798897989789856878957499594873552874152661460523
|
||||
062415331267566426437243673895878674897896558788889897878987955994767455333837536424584567627336053
|
||||
411350266636525852438469567638886987958577976996868967687585597767547999698594634538245463464543005
|
||||
052464462614766832722735867947598567878869668679877788879769878876988899643845375267672315514353000
|
||||
543545564473648376567477376798669977686956967668898889969875757785956549649485643782434576251353131
|
||||
634033674455736672452884665689654778778759896979877869977686568577555776433947564287374612267436364
|
||||
620541245674573376723897469464969646966776677799787978979857977798869788359344972235473531452736105
|
||||
602620347126374653254296764775476547797557857869988876878957998886476566934646536357683276776151421
|
||||
453313013613244386884696349435758974966876787969887886879899685595858499393337785854825724737215563
|
||||
633162016753461244685737989459664898569667899679799786798979988797998958559548885735471347141136630
|
||||
000101426742225562735894769979656676989556887676998666978968879767489645833678358457422477754521142
|
||||
620262606411662643533249376858748847498879757666997687879595676878844467633967768755461265735510400
|
||||
360023137544654575733228376896988578467698566656988978959969695576685749457685864437734765717026064
|
||||
453004005155344764583728835857979544659758957678779579869558958494954483997436423583442547122611144
|
||||
542364512554772785834745874957646879945679759867877799887755596454644564849589474263221373377352410
|
||||
002404034225236156254239388474876685554666797767767967895789558759867549659597464467365225556245635
|
||||
245410135477125426663788797639838547747878866579559887665897566567957973945395387477415314463463430
|
||||
134134265157751574644752634743354666668958565798799857969998998868959355953856752485414215452524346
|
||||
134233063522723113742886693543696949958945798696986777765986578999899884698774475872617234240653423
|
||||
244361001066345154366465584498936779955869489578987799745999756687935697875536775754117227145563503
|
||||
424615513054521426726444456756894679964484855474988695686689467459399699543485425832215323565610231
|
||||
010511022361177421578425884488933866869996559974758675556944646898573447548734866775441423552334113
|
||||
455000614233131572534883424588896457684489858997764475858957676964979965647378323342574224433221410
|
||||
554234433657562455545554335673953366894875796478846544767476975987878676385863745315342113644542314
|
||||
334234343615275457652768335759749448996379787584585465788795884334949898848654742611353314261636503
|
||||
333304555356366151638427333872998755488366686597689567687856687846596683534345663212543346305030250
|
||||
221202454261633375664542356764698437549939857548989949987335436749598666277762261737227146546505534
|
||||
240412550420563537276688628732843367868467736695759997434973759746799657483248636225432651522613045
|
||||
234101415413036337546543888388563596433499988836578844689689497975764628525732325317653041241353030
|
||||
431410263125326725415234754275746658476797893535668937455785755994425345326575247342241464251000421
|
||||
235305105630506142127546572374764553754685586586673543349859396362874755756655416517334460144522501
|
||||
053230360255455453432625173284836864837934635996948769536785973725832747476731215716516416145320150
|
||||
220341023145561653434447455522778482225563875986777563368797985846552555226462623761223514365411344
|
||||
555505021215644010564473315638562438843876455985785666379866472746877227331266714741141010601131000
|
||||
453335252144616255521312353556677472322787423527747647554222386736627248134362414253412412531431213
|
||||
042151015320560413551651234262565787675225582872838475557456742335545484137617276444245016450453552
|
||||
014404334344615462565743465273746656366752555484464325685467246827267515345457117051354205241444340
|
||||
213041551013263163616741653367152326275633684378845888827238722532735171772265542620411543050510551
|
||||
224455113205603560061536164734146772822552432636277537568582283454552565546556622004610432104440414
|
||||
120034300413036442405642132721761733145582724757284464865848374626544672733422446132110450322334043
|
||||
321102323253550034451665134657546626247721386824348475375862731112516436572563504423615532222151203
|
||||
423413023253053651012440232734663275166577433646527244777525111735773767313620631626060044333201413
|
||||
310311122105544263022025236566616265144255413423733523634375771573412213343520014446112203251501244
|
||||
242112304444105230054262221514232727536351532732445557376642241447573270443566533260102401044113312
|
||||
300401122201443130504625604224103567247721576334262357161547725313757534624304442441502400005401420
|
||||
312140241542522534423315456561105236441214136262754317657256235334116150340065011324403154142414212
|
||||
144233324321121441233255150514400352347655162673141155544742475145632635002103305025150134340421444
|
||||
111103103110050242122311312046534446626061741554364774752533752234163656421540312341011215100222430
|
||||
303431234002202314522440214134041163045124514037641775350115015005306206502562310105314100032000400
|
||||
022101131200322543535350013343206260166164021153334624135541245000601615213233143310354543221432032
|
||||
233233001110344441512334010360062644015111403065346201116113310635016323603102000435213440203331333
|
||||
221234200414024043305553013402501300310163441031202131631042043410330561032554522352320341422042103
|
||||
321123401142123425525550311314256215506650120142506242614512364236453401432552531430304012423410223
|
||||
122333244113420243051112411113522042223653563261365250113056645225530145055223432541231304233333203
|
40
2022/08/part1
Executable file
40
2022/08/part1
Executable file
@@ -0,0 +1,40 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
TGRID = [] # heights
|
||||
VGRID = [] # visibility
|
||||
|
||||
def check_visible(x, y, xr, yr):
|
||||
target = TGRID[y][x]
|
||||
for y in yr:
|
||||
for x in xr:
|
||||
if TGRID[y][x] >= target:
|
||||
return False
|
||||
return True
|
||||
|
||||
with open('input') as f:
|
||||
for line in f:
|
||||
l = []
|
||||
for tree in line.rstrip():
|
||||
l.append(int(tree))
|
||||
TGRID.append(l)
|
||||
|
||||
max_y = len(TGRID)
|
||||
for y in range(0, max_y):
|
||||
max_x = len(TGRID[y])
|
||||
l = []
|
||||
for x in range(0, max_x):
|
||||
l.append(
|
||||
check_visible(x, y, range(0, x), range(y, y+1)) or # left to right
|
||||
check_visible(x, y, range(x, x+1), range(0, y)) or # top to bottom
|
||||
check_visible(x, y, range(max_x-1, x, -1), range(y, y+1)) or # right to left
|
||||
check_visible(x, y, range(x, x+1), range(max_y-1, y, -1)) # bottom to top
|
||||
)
|
||||
VGRID.append(l)
|
||||
|
||||
count = 0
|
||||
for row in VGRID:
|
||||
for col in row:
|
||||
if col:
|
||||
count = count + 1
|
||||
|
||||
print(count)
|
45
2022/08/part2
Executable file
45
2022/08/part2
Executable file
@@ -0,0 +1,45 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
TGRID = [] # heights
|
||||
VGRID = [] # scenic score
|
||||
|
||||
def count_visible(x, y, xr, yr):
|
||||
target = TGRID[y][x]
|
||||
count = 0
|
||||
|
||||
for y in yr:
|
||||
for x in xr:
|
||||
if TGRID[y][x] >= target:
|
||||
if x > 0 and y > 0:
|
||||
count += 1
|
||||
return count
|
||||
count+=1
|
||||
return count
|
||||
|
||||
with open('input') as f:
|
||||
for line in f:
|
||||
l = []
|
||||
for tree in line.rstrip():
|
||||
l.append(int(tree))
|
||||
TGRID.append(l)
|
||||
|
||||
max_y = len(TGRID)
|
||||
for y in range(0, max_y):
|
||||
max_x = len(TGRID[y])
|
||||
l = []
|
||||
for x in range(0, max_x):
|
||||
l.append(
|
||||
count_visible(x, y, range(x, x+1), range(y-1, -1, -1)) * # north
|
||||
count_visible(x, y, range(x+1, max_x), range(y, y+1)) * # east
|
||||
count_visible(x, y, range(x, x+1), range(y+1, max_y)) * # south
|
||||
count_visible(x, y, range(x-1, -1, -1), range(y, y+1)) # west
|
||||
)
|
||||
VGRID.append(l)
|
||||
|
||||
best_seen = 0
|
||||
for y in range(0, len(VGRID)):
|
||||
for x in range(0, len(VGRID[y])):
|
||||
if VGRID[y][x] > best_seen:
|
||||
best_seen = VGRID[y][x]
|
||||
|
||||
print(best_seen)
|
2000
2022/09/input
Normal file
2000
2022/09/input
Normal file
File diff suppressed because it is too large
Load Diff
40
2022/09/part1
Executable file
40
2022/09/part1
Executable file
@@ -0,0 +1,40 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import math
|
||||
|
||||
MOVES = {
|
||||
'U': ( 0, -1),
|
||||
'D': ( 0, +1),
|
||||
'L': (-1, 0),
|
||||
'R': (+1, 0),
|
||||
}
|
||||
|
||||
TAIL_POSITIONS = set([])
|
||||
HEAD = (0, 0)
|
||||
TAIL = (0, 0)
|
||||
|
||||
def point_add(a, b):
|
||||
return tuple(map(lambda i, j: i + j, a, b))
|
||||
|
||||
def move(delta):
|
||||
global TAIL_POSITIONS, HEAD, TAIL
|
||||
|
||||
last_head = HEAD
|
||||
HEAD = point_add(HEAD, delta)
|
||||
|
||||
if ed := math.dist(HEAD, TAIL) < 2.0:
|
||||
_ # do nothing
|
||||
elif ed == 2.0:
|
||||
TAIL = point_add(TAIL, delta)
|
||||
else:
|
||||
TAIL = last_head
|
||||
|
||||
TAIL_POSITIONS.add(TAIL)
|
||||
|
||||
with open('input') as f:
|
||||
for line in f:
|
||||
direction, count = line.rstrip().split(" ")
|
||||
for _ in range(int(count)):
|
||||
move(MOVES[direction])
|
||||
|
||||
print(len(TAIL_POSITIONS))
|
60
2022/09/part2
Executable file
60
2022/09/part2
Executable file
@@ -0,0 +1,60 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import math
|
||||
|
||||
MOVES = {
|
||||
'U': ( 0, -1),
|
||||
'D': ( 0, +1),
|
||||
'L': (-1, 0),
|
||||
'R': (+1, 0),
|
||||
}
|
||||
|
||||
TAIL_POSITIONS = set([])
|
||||
HEAD = (0, 0)
|
||||
TAILS = [(0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0)]
|
||||
|
||||
def point_add(a, b):
|
||||
return tuple(map(lambda i, j: i + j, a, b))
|
||||
|
||||
def move(delta):
|
||||
global TAIL_POSITIONS, HEAD, TAIL
|
||||
|
||||
HEAD = point_add(HEAD, delta)
|
||||
|
||||
leader = HEAD
|
||||
for idx, tail in enumerate(TAILS):
|
||||
ed = math.dist(leader, tail);
|
||||
if ed < 2.0:
|
||||
_ # do nothing
|
||||
elif ed == 2.0: # follow the leader: linear
|
||||
x, y = 0,0
|
||||
if leader[0] < tail[0]:
|
||||
x = -1
|
||||
elif leader[0] > tail[0]:
|
||||
x = 1
|
||||
if leader[1] < tail[1]:
|
||||
y = -1
|
||||
elif leader[1] > tail[1]:
|
||||
y = 1
|
||||
TAILS[idx] = point_add(tail, (x,y))
|
||||
else: # follow the leader: diagonal
|
||||
x, y = 1, 1
|
||||
if leader[0] < tail[0]:
|
||||
x = -1
|
||||
if leader[1] < tail[1]:
|
||||
y = -1
|
||||
TAILS[idx] = point_add(tail, (x,y))
|
||||
|
||||
leader = TAILS[idx]
|
||||
|
||||
TAIL_POSITIONS.add(TAILS[-1])
|
||||
|
||||
|
||||
|
||||
with open('input') as f:
|
||||
for line in f:
|
||||
direction, count = line.rstrip().split(" ")
|
||||
for _ in range(int(count)):
|
||||
move(MOVES[direction])
|
||||
|
||||
print(len(TAIL_POSITIONS))
|
143
2022/10/input
Normal file
143
2022/10/input
Normal file
@@ -0,0 +1,143 @@
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx 5
|
||||
addx 1
|
||||
addx 4
|
||||
addx 1
|
||||
noop
|
||||
addx 4
|
||||
noop
|
||||
addx 1
|
||||
addx 4
|
||||
addx 8
|
||||
addx -7
|
||||
addx 3
|
||||
addx 1
|
||||
noop
|
||||
addx 4
|
||||
addx 2
|
||||
addx 5
|
||||
addx -1
|
||||
noop
|
||||
addx -37
|
||||
noop
|
||||
noop
|
||||
addx 3
|
||||
addx 2
|
||||
addx 13
|
||||
addx 12
|
||||
addx -15
|
||||
addx -2
|
||||
addx 2
|
||||
addx -11
|
||||
addx 18
|
||||
addx 2
|
||||
addx -15
|
||||
addx 16
|
||||
addx 5
|
||||
addx 2
|
||||
addx 5
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx 3
|
||||
addx -2
|
||||
addx -38
|
||||
noop
|
||||
addx 3
|
||||
addx 4
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx 5
|
||||
addx 5
|
||||
noop
|
||||
noop
|
||||
addx 21
|
||||
addx -17
|
||||
addx 6
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx 5
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx 3
|
||||
addx 5
|
||||
addx -38
|
||||
noop
|
||||
noop
|
||||
addx 5
|
||||
addx -2
|
||||
addx 1
|
||||
addx 7
|
||||
noop
|
||||
addx 22
|
||||
addx -18
|
||||
addx -11
|
||||
addx 27
|
||||
addx -13
|
||||
addx 2
|
||||
addx 5
|
||||
addx -8
|
||||
addx 9
|
||||
addx 2
|
||||
noop
|
||||
addx 7
|
||||
noop
|
||||
addx 1
|
||||
noop
|
||||
addx -38
|
||||
noop
|
||||
addx 2
|
||||
addx 5
|
||||
addx -3
|
||||
noop
|
||||
addx 8
|
||||
addx 11
|
||||
addx -6
|
||||
noop
|
||||
addx 24
|
||||
addx -31
|
||||
addx 10
|
||||
addx 2
|
||||
addx 5
|
||||
addx 3
|
||||
noop
|
||||
addx 2
|
||||
addx -29
|
||||
addx 21
|
||||
addx 11
|
||||
addx 5
|
||||
addx -39
|
||||
addx 4
|
||||
addx -2
|
||||
addx 2
|
||||
addx 7
|
||||
noop
|
||||
addx -1
|
||||
addx 2
|
||||
noop
|
||||
addx 4
|
||||
noop
|
||||
addx 1
|
||||
addx 2
|
||||
addx 5
|
||||
addx 2
|
||||
noop
|
||||
noop
|
||||
addx -6
|
||||
addx 9
|
||||
addx -18
|
||||
addx 25
|
||||
addx 3
|
||||
noop
|
||||
addx -17
|
||||
noop
|
28
2022/10/part1
Executable file
28
2022/10/part1
Executable file
@@ -0,0 +1,28 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
CLOCK = 1
|
||||
X = 1
|
||||
|
||||
X_VALUES = []
|
||||
|
||||
with open('input') as f:
|
||||
for line in f:
|
||||
ins, *args = line.rstrip().split(" ")
|
||||
|
||||
if ins == "noop":
|
||||
CLOCK += 1
|
||||
X_VALUES.append(X)
|
||||
elif ins == "addx":
|
||||
CLOCK += 2
|
||||
X_VALUES.append(X)
|
||||
X_VALUES.append(X)
|
||||
X += int(args[0])
|
||||
|
||||
print(
|
||||
(X_VALUES[19] * 20) +
|
||||
(X_VALUES[59] * 60) +
|
||||
(X_VALUES[99] * 100) +
|
||||
(X_VALUES[139] * 140) +
|
||||
(X_VALUES[179] * 180) +
|
||||
(X_VALUES[219] * 220)
|
||||
)
|
32
2022/10/part2
Executable file
32
2022/10/part2
Executable file
@@ -0,0 +1,32 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
CLOCK = 0
|
||||
X = 1
|
||||
OUT = []
|
||||
|
||||
def clock():
|
||||
global CLOCK, X, OUT
|
||||
pos = CLOCK%40
|
||||
|
||||
if X == pos or X-1 == pos or X+1 == pos:
|
||||
OUT.append('#')
|
||||
else:
|
||||
OUT.append('.')
|
||||
|
||||
if pos == 39:
|
||||
OUT.append("\n")
|
||||
|
||||
CLOCK += 1
|
||||
|
||||
with open('input') as f:
|
||||
for line in f:
|
||||
ins, *args = line.rstrip().split(" ")
|
||||
|
||||
if ins == "noop":
|
||||
clock()
|
||||
elif ins == "addx":
|
||||
clock()
|
||||
clock()
|
||||
X += int(args[0])
|
||||
|
||||
print(''.join(OUT))
|
55
2022/11/input
Normal file
55
2022/11/input
Normal file
@@ -0,0 +1,55 @@
|
||||
Monkey 0:
|
||||
Starting items: 89, 73, 66, 57, 64, 80
|
||||
Operation: new = old * 3
|
||||
Test: divisible by 13
|
||||
If true: throw to monkey 6
|
||||
If false: throw to monkey 2
|
||||
|
||||
Monkey 1:
|
||||
Starting items: 83, 78, 81, 55, 81, 59, 69
|
||||
Operation: new = old + 1
|
||||
Test: divisible by 3
|
||||
If true: throw to monkey 7
|
||||
If false: throw to monkey 4
|
||||
|
||||
Monkey 2:
|
||||
Starting items: 76, 91, 58, 85
|
||||
Operation: new = old * 13
|
||||
Test: divisible by 7
|
||||
If true: throw to monkey 1
|
||||
If false: throw to monkey 4
|
||||
|
||||
Monkey 3:
|
||||
Starting items: 71, 72, 74, 76, 68
|
||||
Operation: new = old * old
|
||||
Test: divisible by 2
|
||||
If true: throw to monkey 6
|
||||
If false: throw to monkey 0
|
||||
|
||||
Monkey 4:
|
||||
Starting items: 98, 85, 84
|
||||
Operation: new = old + 7
|
||||
Test: divisible by 19
|
||||
If true: throw to monkey 5
|
||||
If false: throw to monkey 7
|
||||
|
||||
Monkey 5:
|
||||
Starting items: 78
|
||||
Operation: new = old + 8
|
||||
Test: divisible by 5
|
||||
If true: throw to monkey 3
|
||||
If false: throw to monkey 0
|
||||
|
||||
Monkey 6:
|
||||
Starting items: 86, 70, 60, 88, 88, 78, 74, 83
|
||||
Operation: new = old + 4
|
||||
Test: divisible by 11
|
||||
If true: throw to monkey 1
|
||||
If false: throw to monkey 2
|
||||
|
||||
Monkey 7:
|
||||
Starting items: 81, 58
|
||||
Operation: new = old + 5
|
||||
Test: divisible by 17
|
||||
If true: throw to monkey 3
|
||||
If false: throw to monkey 5
|
58
2022/11/part1
Executable file
58
2022/11/part1
Executable file
@@ -0,0 +1,58 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import re
|
||||
|
||||
MONKEYS = []
|
||||
|
||||
def parse_factor(old, factor):
|
||||
if factor == 'old':
|
||||
return old
|
||||
|
||||
return int(factor)
|
||||
|
||||
OPS = {
|
||||
'*': lambda old, factor: old * parse_factor(old, factor),
|
||||
'+': lambda old, factor: old + parse_factor(old, factor),
|
||||
}
|
||||
|
||||
with open('input') as f:
|
||||
monkey = {'inspections': 0}
|
||||
|
||||
for line in f:
|
||||
if line == "\n":
|
||||
MONKEYS.append(monkey)
|
||||
monkey = {'inspections': 0}
|
||||
elif match := re.match('^Monkey (\d+):$', line):
|
||||
monkey['id'] = int(match[1])
|
||||
elif match := re.match('^ Starting items:', line):
|
||||
_, items = line.rstrip().split(":")
|
||||
monkey['items'] = list(map(int, items.split(", ")))
|
||||
elif match := re.match('^ Operation: new = old ([\*\+]) (\w+)', line):
|
||||
monkey['op_op'] = match[1]
|
||||
monkey['op_factor'] = match[2]
|
||||
elif match := re.match('^ Test: divisible by (\d+)$', line):
|
||||
monkey['test_factor'] = int(match[1])
|
||||
elif match := re.match('^ If (true|false): throw to monkey (\d+)$', line):
|
||||
monkey['test_'+match[1]] = int(match[2])
|
||||
else:
|
||||
raise Exception('unhandled line: '+line)
|
||||
MONKEYS.append(monkey)
|
||||
|
||||
for idx, monkey in enumerate(MONKEYS):
|
||||
assert(idx == monkey['id'])
|
||||
|
||||
for r in range(1, 21): # round
|
||||
for monkey in MONKEYS: # turn
|
||||
for item in monkey['items']:
|
||||
item = OPS[monkey['op_op']](item, monkey['op_factor'])
|
||||
item = item // 3
|
||||
if item % monkey['test_factor'] == 0:
|
||||
MONKEYS[monkey['test_true']]['items'].append(item)
|
||||
else:
|
||||
MONKEYS[monkey['test_false']]['items'].append(item)
|
||||
monkey['inspections'] = monkey['inspections'] + 1
|
||||
monkey['items'] = []
|
||||
|
||||
by_inspections = sorted(MONKEYS, key=lambda monkey: monkey['inspections'])
|
||||
|
||||
print(by_inspections[-1]['inspections'] * by_inspections[-2]['inspections'])
|
62
2022/11/part2
Executable file
62
2022/11/part2
Executable file
@@ -0,0 +1,62 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import re
|
||||
import math
|
||||
|
||||
MONKEYS = []
|
||||
|
||||
def parse_factor(old, factor):
|
||||
if factor == 'old':
|
||||
return old
|
||||
|
||||
return int(factor)
|
||||
|
||||
OPS = {
|
||||
'*': lambda old, factor: old * parse_factor(old, factor),
|
||||
'+': lambda old, factor: old + parse_factor(old, factor),
|
||||
}
|
||||
|
||||
with open('input') as f:
|
||||
monkey = {'inspections': 0}
|
||||
|
||||
for line in f:
|
||||
if line == "\n":
|
||||
MONKEYS.append(monkey)
|
||||
monkey = {'inspections': 0}
|
||||
elif match := re.match('^Monkey (\d+):$', line):
|
||||
monkey['id'] = int(match[1])
|
||||
elif match := re.match('^ Starting items:', line):
|
||||
_, items = line.rstrip().split(":")
|
||||
monkey['items'] = list(map(int, items.split(", ")))
|
||||
elif match := re.match('^ Operation: new = old ([\*\+]) (\w+)', line):
|
||||
monkey['op_op'] = match[1]
|
||||
monkey['op_factor'] = match[2]
|
||||
elif match := re.match('^ Test: divisible by (\d+)$', line):
|
||||
monkey['test_factor'] = int(match[1])
|
||||
elif match := re.match('^ If (true|false): throw to monkey (\d+)$', line):
|
||||
monkey['test_'+match[1]] = int(match[2])
|
||||
else:
|
||||
raise Exception('unhandled line: '+line)
|
||||
MONKEYS.append(monkey)
|
||||
|
||||
for idx, monkey in enumerate(MONKEYS):
|
||||
assert(idx == monkey['id'])
|
||||
|
||||
# keep the size of the numbers down
|
||||
lcm = math.lcm(*map(lambda monkey: monkey['test_factor'], MONKEYS))
|
||||
|
||||
for r in range(0,10000): # round
|
||||
for monkey in MONKEYS: # turn
|
||||
for item in monkey['items']:
|
||||
item = OPS[monkey['op_op']](item, monkey['op_factor'])
|
||||
item = item % lcm
|
||||
if item % monkey['test_factor'] == 0:
|
||||
MONKEYS[monkey['test_true']]['items'].append(item)
|
||||
else:
|
||||
MONKEYS[monkey['test_false']]['items'].append(item)
|
||||
monkey['inspections'] = monkey['inspections'] + 1
|
||||
monkey['items'] = []
|
||||
|
||||
by_inspections = sorted(MONKEYS, key=lambda monkey: monkey['inspections'])
|
||||
|
||||
print(by_inspections[-1]['inspections'] * by_inspections[-2]['inspections'])
|
41
2022/12/input
Normal file
41
2022/12/input
Normal file
@@ -0,0 +1,41 @@
|
||||
abccccccccccccccccaaccccccccccccccccccccaaaaaaaaaaaaacccccccccccccccccccccccccccccccccccccccccccccccccccccccaaaaaa
|
||||
abcccccccccccccaaaaaccccccccccccccccccccaaaaaaaaaaaaaccccccccccccccccccccccccccccccccccccccccccccccccccccccccaaaaa
|
||||
abccccccccccccccaaaaaccccccccccccccaaaaacccaaaaaacccccaaccccccccccccccccccccccccccccccccccccccccccccccccccccccaaaa
|
||||
abccccccccccccccaaaaacccccccccaacccaaaaacccaaaaaaaccccaaaacaacaaccccccccccccccccccccccccaaaccccaaaccccccccccccaaaa
|
||||
abcccccccccccccaaaaacccccccaaaaaccaaaaaacccaaaaaaaacaaaaaacaaaaaccccccccccccccccccccccccaaacccaaaaccccccccccccaaac
|
||||
abccccccaacaaaccccaaccccccccaaaaacaaaaaaccaaaacaaaacaaaaaccaaaaaaccccccccccccccccccccccccaaaaaaaacccccccccccccaacc
|
||||
abccccccaaaaaaccccccccccccccaaaaacaaaaaaccaaaaccaaaacaaaaacaaaaaacccccccccccccccccccccccaaaaaaaaaccccccccccccccccc
|
||||
abccccccaaaaaacccccccccccccaaaaaccccaaccccaacccccaaccaacaacaaaaaccccccccccccccccccccccccccaaakkkkllllcccaaaccccccc
|
||||
abccccccaaaaaaacccccccccccccccaaccccaacccccccccccccccccccccccaaaccccccaaaacccccccccjjjjkkkkkkkkkkllllccccaacaccccc
|
||||
abcccccaaaaaaaacccccaaccccccccccccccaaaaaaccccccccccccccccccaaccccccccaaaaccccccccjjjjjkkkkkkkkkppllllcccaaaaacccc
|
||||
abcccccaaaaaaaaccaaaacccccccccccccccaaaaaccccccccccccccccaacaaccccccccaaaacccccccjjjjjjjkkkkkppppppplllccaaaaacccc
|
||||
abccccccccaaaccccaaaaaacccccccccccaaaaaaaccccccccccccccccaaaaacccccccccaacccccccjjjjoooooooppppppppplllcccaaaccccc
|
||||
abccccccccaaccccccaaaaaccccaacccccaaaaaaaaccccaaacccccccccaaaaaaacccccccccccccccjjjooooooooppppuuppppllcccaaaccccc
|
||||
abccccccaacccccccaaaaacccccaaaccaaaaaaaaaaccaaaaaaccccccaaaaaaaaaacaaaccccccccccjjjoooouuuoopuuuuupppllcccaaaccccc
|
||||
abacccccaaccccccccccaacccccaaaaaaaccaaaaaaccaaaaaaccccccaaaaaccaaaaaaaccccaaccccjjoootuuuuuuuuuuuuvpqlllcccccccccc
|
||||
abaccaaaaaaaacccccccccccccccaaaaaaccaacccccccaaaaacccccccacaaaccaaaaaaccaaaacaccjjooottuuuuuuuxyuvvqqljjccddcccccc
|
||||
abcccaaaaaaaaccccccccccccaaaaaaaaacaacaaccccaaaaaccccccccccaaaaaaaaaacccaaaaaacciijootttxxxuuxyyyvvqqjjjjdddcccccc
|
||||
abcccccaaaaccccaaacccccccaaaaaaaaacaaaaaccccaaaaaccccccccccccaaaaaaaaacccaaaaccciiinntttxxxxxxyyvvqqqqjjjddddccccc
|
||||
abccccaaaaaccccaaaaacccccaaaaaaaaaaaaaaaaccccccccccccccccccccaaaaaaaaaaccaaaaccciiinntttxxxxxxyyvvvqqqqjjjdddccccc
|
||||
abccccaaaaaaccaaaaaccccccccaaaaaaaaaaaaaacccccccccccccccccccccccaaacaaacaacaaccciiinnnttxxxxxyyyvvvvqqqqjjjdddcccc
|
||||
SbccccaaccaaccaaaaacccccccccaaaaaaaaaaaaacccccccccccccccccccccccaaacccccccccccciiinnntttxxxEzzyyyyvvvqqqjjjdddcccc
|
||||
abcccccccccccccaaaaacccccccaaaaaaaaacaaaccccccccccccccccccccccccaaccccccccccccciiinnnttxxxxyyyyyyyyvvvqqqjjjdddccc
|
||||
abcccccccccccccaaccccccccccaaaaaaaaccccccccccccccccccccccccccccccccccccccccccciiinnntttxxyyyyyyyyyvvvvqqqjjjdddccc
|
||||
abccccccccccccccccccccccccaaaaaaaacccccccccccccccccccccccccccccccccccccccccccciiinntttxxxwwwyyywwvvvvrqqjjjjdddccc
|
||||
abcccccccccccccccccccccccccccaaaaaaccccccccccccccccccccccccccccccccccccccccccciinnntttxwwwwwyyywwvvvrrrqkkkeddcccc
|
||||
abcccccccccccccccccccccccccccaaaaaaccccccccccccccccccccccccccccccccccccccccccchhnnntttsswwswwyywwrrrrrrkkkkeeecccc
|
||||
abcccccccccccccccccccccccccccaaaaaacccccccccccccccccccaccccccccccccaaacccccccchhhnmmssssssswwwwwwrrrkkkkkeeeeecccc
|
||||
abcccccccccccccccccccccccccccccaaacccccccccccccccccccaaccccccccccaaaaaacccccaahhhmmmmmsssssswwwwrrrkkkkkeeeeeccccc
|
||||
abaacccccccccccccaccccccccccccccccccccccccccccccccaaaaacaacccccccaaaaaacaaaaaahhhhmmmmmmmmssswwwrrkkkkeeeeeacccccc
|
||||
abacccccccccccccaaaaaaaaccccccccaaacccccccaaccccccaaaaaaaacccccccaaaaaacaaaaaaahhhhmmmmmmmmsssrrrrkkkeeeeeaacccccc
|
||||
abaaaccccaaccccccaaaaaacccccccccaaacccaacaaaccccccccaaaacccccccccaaaaacccaaaaaaahhhhhhhmmmmlsssrrllkfeeeeaaaaacccc
|
||||
abaaaccaaaaccccccaaaaaacccccccccaaaaaaaaaaaaaacccccaaaaacccccccccaaaaacccaaaaaaachhhhhgggmllsssrrllkffeaaaaaaacccc
|
||||
abaacccaaaaaacccaaaaaaaacccccaaaaaaaaaaaaaaaaacccccaacaaacccccccccccccccaaaaaacccccchggggglllllllllfffaaaaaaaacccc
|
||||
abaaccccaaaacccaaaaaaaaaaccccaaaaaaaaacaaaaaaaccaccaccaaacccccccccccccccaaaaaacccccccccgggglllllllffffaaaaaacccccc
|
||||
abcccccaaaaacccaaaaaaaaaacccccaaaaaaaccaaaaacccaaaccccccccccccccccccccccccccaacccccccccagggglllllffffccccaaacccccc
|
||||
abcccccaacaaccccccaaaaacaccaacccaaaaaaaaaaaaaccaaacccccccccccccccccccccccccccccccccccccaagggggffffffcccccccccccccc
|
||||
abcccccccccccaaaaaaaaacccccaaccaaaaaaaccaaaaacaaaaccccccccccccccccccccccccccccccccccccaaaacgggfffffccccccccccccccc
|
||||
abcccccccccccaaaaacaacccaaaaaaaaaaccaacccaaaaaaaacccaaccccccccccccccccccccccccccccccccccccccggfffccccccccccccaaaca
|
||||
abccccccccccaaaaaaccccccaaaaaaaaacccccccccaaaaaaaaaaaacccccccccccccaaaccccccccccccccccccccccaaaccccccccccccccaaaaa
|
||||
abccccccccccaaaaaaccccccccaaaacccccccccccccaaaaaaaaaaaaccccccccccccaaaaccccccccccccccccccccccaaaccccccccccccccaaaa
|
||||
abcccccccccccaaaaacccccccaaaaaaccccccccccaaaaaaaaaaaaaaccccccccccccaaaaccccccccccccccccccccccccccccccccccccccaaaaa
|
63
2022/12/part1
Executable file
63
2022/12/part1
Executable file
@@ -0,0 +1,63 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import math
|
||||
|
||||
MAP = []
|
||||
START = (0, 0)
|
||||
END = (0, 0)
|
||||
DISTANCES = {}
|
||||
|
||||
def possible(x, y):
|
||||
global MAP
|
||||
|
||||
threshold = MAP[y][x] + 1 # Can't go higher than this, can always go lower
|
||||
points = [(x-1,y),(x+1,y),(x,y-1),(x,y+1)]
|
||||
|
||||
out = []
|
||||
for (x,y) in points:
|
||||
if x < 0 or y < 0:
|
||||
continue
|
||||
if len(MAP) < y+1 or len(MAP[y]) < x+1:
|
||||
continue
|
||||
if MAP[y][x] > threshold:
|
||||
continue
|
||||
|
||||
out.append((x,y))
|
||||
|
||||
return out
|
||||
|
||||
with open('input') as f:
|
||||
for y, line in enumerate(f):
|
||||
row = []
|
||||
for x, byte in enumerate(line.rstrip()):
|
||||
DISTANCES[(x,y)] = math.inf
|
||||
if byte == 'S':
|
||||
byte = 'a'
|
||||
START = (x,y)
|
||||
DISTANCES[START] = 0
|
||||
elif byte == 'E':
|
||||
byte = 'z'
|
||||
END = (x,y)
|
||||
row.append(ord(byte) - ord('a'))
|
||||
MAP.append(row)
|
||||
|
||||
|
||||
visited = set([])
|
||||
queue = [START]
|
||||
|
||||
while len(queue) > 0:
|
||||
pos = queue.pop(0)
|
||||
visited.add(pos)
|
||||
|
||||
for neighbour in possible(*pos):
|
||||
if neighbour == END:
|
||||
print(DISTANCES[pos] + 1)
|
||||
quit()
|
||||
|
||||
if DISTANCES[neighbour] > DISTANCES[pos] + 1:
|
||||
DISTANCES[neighbour] = DISTANCES[pos] + 1
|
||||
|
||||
if neighbour not in visited and neighbour not in queue:
|
||||
queue.append(neighbour)
|
||||
|
||||
print("Couldn't find it!")
|
68
2022/12/part2
Executable file
68
2022/12/part2
Executable file
@@ -0,0 +1,68 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import math
|
||||
from collections import defaultdict
|
||||
|
||||
MAP = []
|
||||
END = (0, 0)
|
||||
|
||||
def possible(x, y):
|
||||
global MAP
|
||||
|
||||
threshold = MAP[y][x] + 1 # Can't go higher than this, can always go lower
|
||||
points = [(x-1,y),(x+1,y),(x,y-1),(x,y+1)]
|
||||
|
||||
out = []
|
||||
for (x,y) in points:
|
||||
if x < 0 or y < 0:
|
||||
continue
|
||||
if len(MAP) < y+1 or len(MAP[y]) < x+1:
|
||||
continue
|
||||
if MAP[y][x] > threshold:
|
||||
continue
|
||||
out.append((x,y))
|
||||
return out
|
||||
|
||||
with open('input') as f:
|
||||
for y, line in enumerate(f):
|
||||
row = []
|
||||
for x, byte in enumerate(line.rstrip()):
|
||||
if byte == 'S':
|
||||
byte = 'a'
|
||||
elif byte == 'E':
|
||||
byte = 'z'
|
||||
END = (x,y)
|
||||
row.append(ord(byte) - ord('a'))
|
||||
MAP.append(row)
|
||||
|
||||
def search(start):
|
||||
distances = defaultdict(lambda: math.inf)
|
||||
distances[start] = 0
|
||||
visited = set([])
|
||||
queue = [start]
|
||||
|
||||
while len(queue) > 0:
|
||||
pos = queue.pop(0)
|
||||
visited.add(pos)
|
||||
|
||||
for neighbour in possible(*pos):
|
||||
if neighbour == END:
|
||||
return distances[pos] + 1
|
||||
|
||||
if distances[neighbour] > distances[pos] + 1:
|
||||
distances[neighbour] = distances[pos] + 1
|
||||
|
||||
if neighbour not in visited and neighbour not in queue:
|
||||
queue.append(neighbour)
|
||||
|
||||
return None # Some start positions may not have a valid path
|
||||
|
||||
results = []
|
||||
for y, row in enumerate(MAP):
|
||||
for x, height in enumerate(row):
|
||||
if height == 0:
|
||||
result = search((x,y))
|
||||
if result != None:
|
||||
results.append(result)
|
||||
|
||||
print(sorted(results)[0])
|
23
README.md
23
README.md
@@ -0,0 +1,23 @@
|
||||
# Advent of Code
|
||||
|
||||
In this repository are my Advent of Code solutions.
|
||||
|
||||
I don't religiously take part, and tend to bow out before halfway through even
|
||||
on the years I do take part. Mostly, it's how I find an excuse to write code in
|
||||
a programming language I'm interested in learning more about.
|
||||
|
||||
2018, 2019, and 2020 were in their own separate repositories, but have been
|
||||
`git subtree`'d into this one - no point creating a new repository every year.
|
||||
|
||||
* [2022](https://code.ur.gs/lupine/advent-of-code/src/branch/main/2022) 🌟 `24` - Python
|
||||
* [2021](https://code.ur.gs/lupine/advent-of-code/src/branch/main/2021) 🌟 ` 5` - Python
|
||||
* [2020](https://code.ur.gs/lupine/advent-of-code/src/branch/main/2020) 🌟 `20` - Javascript
|
||||
* [2019](https://code.ur.gs/lupine/advent-of-code/src/branch/main/2019) 🌟 `22` - Zig
|
||||
* [2018](https://code.ur.gs/lupine/advent-of-code/src/branch/main/2018) 🌟 ` 6` - Rust
|
||||
* 2017 🌟 ` 0` - ?
|
||||
* 2016 🌟 `16` - LISP?
|
||||
* 2015 🌟 ` 9` - Ruby?
|
||||
|
||||
Total: 🌟 `102`
|
||||
|
||||
Maybe I'll backfill some of the old years one day.
|
||||
|
Reference in New Issue
Block a user