catchup
This commit is contained in:
parent
9eb6a0f2c1
commit
1313b8cb7e
69
2021/09/09.py
Normal file
69
2021/09/09.py
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
hmap = {}
|
||||||
|
with open("input.txt") as f:
|
||||||
|
lines = f.read().split('\n')
|
||||||
|
height = len(lines)
|
||||||
|
width = len(lines[0])
|
||||||
|
for i, line in enumerate(lines):
|
||||||
|
for j, n in enumerate(line):
|
||||||
|
hmap[(i,j)] = int(n)
|
||||||
|
|
||||||
|
def adjacent(i,j):
|
||||||
|
adjacent = [
|
||||||
|
(i-1,j),
|
||||||
|
(i+1,j),
|
||||||
|
(i,j-1),
|
||||||
|
(i,j+1)
|
||||||
|
]
|
||||||
|
return [ (i,j) for (i,j) in adjacent if (-1 < i < height) and (-1 < j < width) ]
|
||||||
|
|
||||||
|
# part 1
|
||||||
|
lowpoints = []
|
||||||
|
for i in range(height):
|
||||||
|
for j in range(width):
|
||||||
|
current = hmap[(i,j)]
|
||||||
|
neighbors = [hmap[(x,y)] for (x,y) in adjacent(i,j)]
|
||||||
|
if current < min(neighbors):
|
||||||
|
lowpoints.append(current)
|
||||||
|
risk = 0
|
||||||
|
for h in lowpoints:
|
||||||
|
risk += (h + 1)
|
||||||
|
print(risk)
|
||||||
|
|
||||||
|
# part 2
|
||||||
|
basins = []
|
||||||
|
allpoints = set(
|
||||||
|
[ (i,j)
|
||||||
|
for i in range(height)
|
||||||
|
for j in range(width)
|
||||||
|
]
|
||||||
|
)
|
||||||
|
def which_basin(i,j,hmap):
|
||||||
|
"""
|
||||||
|
Identifies the basin that (i,j) is part of.
|
||||||
|
"""
|
||||||
|
basin = set()
|
||||||
|
visited = set()
|
||||||
|
q = [(i,j)]
|
||||||
|
|
||||||
|
while q:
|
||||||
|
(x, y) = q.pop()
|
||||||
|
if (x,y) not in visited:
|
||||||
|
visited.add((x,y))
|
||||||
|
if hmap[(x,y)] != 9:
|
||||||
|
basin.add((x,y))
|
||||||
|
neighbors = []
|
||||||
|
q += [(m,n) for (m,n) in adjacent(x,y) if (m,n) not in visited]
|
||||||
|
return basin
|
||||||
|
|
||||||
|
identified = set()
|
||||||
|
for i in range(height):
|
||||||
|
for j in range(width):
|
||||||
|
if (i,j) not in identified:
|
||||||
|
basin = which_basin(i,j,hmap)
|
||||||
|
for point in basin:
|
||||||
|
identified.add(point)
|
||||||
|
basins.append(basin)
|
||||||
|
three_biggest_basins = sorted([len(basin) for basin in basins], reverse=True)[0:3]
|
||||||
|
from math import prod
|
||||||
|
part2 = prod(three_biggest_basins)
|
||||||
|
print(part2)
|
100
2021/09/input.txt
Normal file
100
2021/09/input.txt
Normal file
|
@ -0,0 +1,100 @@
|
||||||
|
9874321292198975458901239986401245679543234590129878943236789999863345679876578901978456778910976423
|
||||||
|
9965434789987854346893498793212357898753125789998767954345789987651266799765457899854234567899997910
|
||||||
|
9876545695986543234989987654323569999654247999898757895456793499540656989755348999765195678978999891
|
||||||
|
5988856894597654345678999876435678998765348998789546796569894568932349876543257998976989989569998789
|
||||||
|
6799768943498785656789456987545989579876456789689235689878965679899499986432167577989878993468987678
|
||||||
|
7999879894679896777892349987656993467987598996563124598989876799767989997621012356798767892389898465
|
||||||
|
9899998796789987888921298798867894678998789876432012457899987987655678998543143456789659910198764343
|
||||||
|
5789997689891298999210987689988965789469898765432123678989999876543568987654554567998799791999953212
|
||||||
|
4579886578910989434991396578999879894398979876543267989567789998712456999875665678929898679899999923
|
||||||
|
6797675487899876526889987467899989999987654998665348995434678939901267899988776899019976535678987899
|
||||||
|
8965452346789865435679876578999894698996543239765467894324579129894345678999988992198765324579876798
|
||||||
|
9894321257894976576789987889698743987989992123986567975434598999789966989129999789349896545698654567
|
||||||
|
6789432345995987987999999996569654596577889965987678996945997876567897891098945689467987657976543456
|
||||||
|
5678943489989998998999898995459875987465679896799789879899876743456789932987334999978998798989942465
|
||||||
|
4599976568978989999998767889310989876323568789989898965789985432579899949996229879899869939399861254
|
||||||
|
7678997679767869899987656778921299975212345679765977896895796431298989898765109768789654321298750123
|
||||||
|
8799398989756556799786545568942349954326656789763256789954989910987676789843297655678969572359842354
|
||||||
|
9892129996545445988654335459959498765545767899854345898769878899886545998764987643789998765498756878
|
||||||
|
3932099987632339876543212367898999876787878998765656789899765798765434899979843212456999879699867889
|
||||||
|
2393989998741024987543101234567899987899989659878767893987654597654323789998732104767898998789978998
|
||||||
|
1989878999843266898754215345788969998930296545989979992098543129973212679876543212378987679992989456
|
||||||
|
9876767998764356999865326456799457999321989432599898789198762098765323567999698345679996565894599568
|
||||||
|
8765659899875667899987547567892398998949878921398779564989654599896464778998796456789876434789798999
|
||||||
|
8954345799986878989798658789943456987894567892987654453578966789987975689999987967894989545678987989
|
||||||
|
7543234689498989877659879999654667976789779999876543212346987894398986799989598978943498956989876567
|
||||||
|
5432129795239998767545990198765678985678989998987662103567899999459997898765439989912987967898965475
|
||||||
|
6554578894346899843235689239876789876789697897998743215678912398967998999875323499899986898987893234
|
||||||
|
7685678965456987656123579345987899998993466976899764376789904987899899789996784789798765989656999645
|
||||||
|
9796789876767999764334989956798999659201245998939878988897899896789653678987895679679989878537898997
|
||||||
|
9898998989878998765445996898989998995313359899910989999976798765678932489899998789543298767423957989
|
||||||
|
3959987693989989876567895789978987989924599789892997896545987654687893599767999896532129854212345678
|
||||||
|
2348799432397879997678964598767576567895978656789765987659976743556789678956799974321045965102389789
|
||||||
|
0147698921236568998989532349754321389999767545699986798798765432345678989347899865432129873216578995
|
||||||
|
1234597990123459219297543498765410499997656434987897899979987631496789690157899976559998765323679343
|
||||||
|
2349986789245569109109694589879531459876542123456789999762198542387899532378989987698759865445789212
|
||||||
|
3498965678976678998999887678998952378997683012567890198951019653498978943489678998797643986776789101
|
||||||
|
4987654549797789456789998789987967456789794324778932987943434966579769894596559879898759997887893212
|
||||||
|
5698643235679896567899989899876798767898765446989993986799659899789656789689349765929898999998985543
|
||||||
|
6987654456998997678999978989765989898959898767897989985678969768997647898789234954310987894319976754
|
||||||
|
7898765769897898899998765678954578989431939878956879874789498756795438999892129865499876789423987976
|
||||||
|
8999879898756789910987654567893465678910123989543768953499319897976656796931012976987654597975699987
|
||||||
|
9998989987645699991296423458921234567891234599532359767988998969988768895432323987899543456797893499
|
||||||
|
9997698765436987889999101568953345798932359698763579899876797655399879996654435699998932345689932349
|
||||||
|
9876579876545696877898242679854656799985498987654578999754986543212989989766545998767891234579321098
|
||||||
|
9775454987679985656987656898765767899876997899786799999643497654523599978987699897658799545678932987
|
||||||
|
8654323498798974345798987999976898954989876899999899878932198976654569867899989654347678968799899876
|
||||||
|
6543212349987661256999098998989999743299987988899989768921019899767698754568979792124567899896799765
|
||||||
|
7684102478999543569892129897991987654368999876789878959432398798998979843979757989235678998975678976
|
||||||
|
8878523567987654799789246796510199875456798765198766698943497656789567959897646879345789597643467897
|
||||||
|
9865439798998786987678957895423469976788899854097954577894989899993469869765434567976898489932345699
|
||||||
|
6976598989459897976568978976534567897899998762196543456789878978932346979887123578987897567896556789
|
||||||
|
5987987978969989875459899987676699989998999973987654567899955767891237898765012356899998989997678998
|
||||||
|
4699876567898776984345789998787988878987998765698765678998643456899998999654323589999989794649789026
|
||||||
|
3498765456799665695656898999899867569876649976799876789987654667978789998765537678989976543239893245
|
||||||
|
2239875349896543469868976989998754398764534989890987997699768778965678999877645789667899694398999656
|
||||||
|
1099874235789662356989765678987654239973223498921298986543979899354567895988789897545798989987698787
|
||||||
|
2987663124578954967999854579998766345985104567892349897932989943213678934599996936435987879543459898
|
||||||
|
3976543023679869899898743498989897459876715779954556789893497654101289025698654321029976768932346999
|
||||||
|
9865432146789998789797654987678989968987896898767967896789589864262568934989896543198765457891097989
|
||||||
|
9876563237899987698689765976565679899998997999979878985679678987653478949876987654239985376789989674
|
||||||
|
5988678945999876576578996985434598778999698987989989764568989698754567899545799865349873265679976543
|
||||||
|
4399989856789986432456789543129987669899899996592099543456996549765678978426578976598762123457897632
|
||||||
|
3297798767899987964589899653298976545799998789439978432349897639876989764212376987679854348967898544
|
||||||
|
9975689899978998875678978969987895434598998677998764321298789321987899543101345698889975457898999656
|
||||||
|
8764789934569899876789467998976789321987797566899954210965678939998998654213456899999876567899789767
|
||||||
|
9643489946698797997892348987675699490196542365789854399899789998999897654338767998754988678925678979
|
||||||
|
8776567897997676798951257896544568989984321234698769988678991987898798965445698999543298789434567899
|
||||||
|
9887879999876545679432345986432345678976542345799998776589890976765679896676789989694349897547698998
|
||||||
|
6998999989987858989543456796543456789987653456967897655458789865454598779788895878989459987698789476
|
||||||
|
4239998975498767897654568987994579896498764878943498432345678986323989568999934567979598998789892345
|
||||||
|
5345987654329878969795979099876689965349876989432987651234789875459876479989423989867987989899954756
|
||||||
|
5467898743210989978976789123997791094234997896521098862345699986599765345678964698754346678999865677
|
||||||
|
6568929854332397899987898236789892989375698997432129877657789997989876234599879989543234598987987789
|
||||||
|
7679019965465456794598997545899919879986999989643334998779996899878987945789998767434123457896598892
|
||||||
|
8989998987698767893459989656898939767899898879965455799892025698767998986898987654321012356789439993
|
||||||
|
9797897698799988976569878967897898656789767767896566893943934599748799998967899976542153467899546789
|
||||||
|
5556986439999799897898769898956984345697656856789677892969895987635689869456789987654767578998958893
|
||||||
|
4349987746997689789997657799439876767987643447899789999898789997546789954347894398786777679997899932
|
||||||
|
4298987659876545678976546689323998998988532138967992398765678999869899875956901239898898789876689321
|
||||||
|
9987598767989756789683634578939889319875421012347890239854789998978954989898913398999989897664598910
|
||||||
|
8976459889899867897542123456998778929876732123456789398753678987989763098789994987999878976543767891
|
||||||
|
7984341996789978965432012359894567999998543234687893987654567896799862198697889996789767989432349943
|
||||||
|
6543210345678989997543143598763456789497654356798901999865678965679654297576678945678959876543998964
|
||||||
|
8765431256789899987656264598654567892398767467899219865976789954778976986464569123799643988999897895
|
||||||
|
9996932345698798999894347698765678901299978578989397654989899853567897985323678934895432499987656989
|
||||||
|
9889893476789577899975498979878789312987989989679986543296998762456789875412357895996591991298545678
|
||||||
|
9765789687895456789989569656989897993976593096578997410145699851267899965101345976789989789987656789
|
||||||
|
9896999798954345878999678948997976889998432123479994321234987540348999754212468897997875679898787898
|
||||||
|
9987979899999234569898789139986565678987643234567989932355699631259398767323456789966764598769898957
|
||||||
|
8998967999887956779789894398765454568998754645679878895456798743459219975456567898755323987654929346
|
||||||
|
7899543597676799898657999999654323456799876896998768789578899854598934989567778999544212598732101245
|
||||||
|
6789432976545678987545298898743212347913987939876456699789967967987895698779899989432103496543212356
|
||||||
|
5678943987435899998932187799993201237895698924954334578994359879896789789989999978999312987695323467
|
||||||
|
3567899876596910976543345698789513456987789939890123689965212996785678996490198969988924598987834678
|
||||||
|
2778943989989921297655456898689434589998999899789235789754329985634579987321987858877895989898945689
|
||||||
|
3469642498979892398986987996578995678919988689699946899866598764323789996469976646566789977659867792
|
||||||
|
6578931987656789989497899975434989789109876534587897896977899876545678987998765431345699867345978893
|
||||||
|
7989649896648799875398989764325678997219765423466798954989965998656789599869896542476789643236989954
|
||||||
|
8999798765536689953239579875537889765329899312345899653297543569767894469953987656789898754547897995
|
||||||
|
9212987654324567892123457986756999976434987501234999867898321349898902398654599877899999865679976789
|
5
2021/09/sample.txt
Normal file
5
2021/09/sample.txt
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
2199943210
|
||||||
|
3987894921
|
||||||
|
9856789892
|
||||||
|
8767896789
|
||||||
|
9899965678
|
42
2021/12/12.py
Normal file
42
2021/12/12.py
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
adj = {}
|
||||||
|
with open("input.txt") as f:
|
||||||
|
for line in f.read().split('\n'):
|
||||||
|
[node1, node2] = line.split('-')
|
||||||
|
if node1 not in adj:
|
||||||
|
adj[node1] = set()
|
||||||
|
if node2 not in adj:
|
||||||
|
adj[node2] = set()
|
||||||
|
if node1 in adj and node2 in adj:
|
||||||
|
adj[node1].add(node2)
|
||||||
|
adj[node2].add(node1)
|
||||||
|
|
||||||
|
search = [['start']]
|
||||||
|
paths = []
|
||||||
|
while search:
|
||||||
|
path = search.pop()
|
||||||
|
current = path[-1]
|
||||||
|
for cave in adj[current]:
|
||||||
|
if cave == 'end':
|
||||||
|
paths.append(path+[cave])
|
||||||
|
elif cave.isupper() or cave not in path:
|
||||||
|
search.append(path+[cave])
|
||||||
|
|
||||||
|
print(len(paths))
|
||||||
|
|
||||||
|
search = [(['start'], True)]
|
||||||
|
paths = []
|
||||||
|
|
||||||
|
while search:
|
||||||
|
path, flag = search.pop()
|
||||||
|
current = path[-1]
|
||||||
|
for cave in adj[current]:
|
||||||
|
if cave == 'end':
|
||||||
|
paths.append(path+[cave])
|
||||||
|
elif cave == 'start':
|
||||||
|
continue # skip this case bc we can't go back
|
||||||
|
elif cave.isupper() or cave not in path: # big cave or unvisited,
|
||||||
|
search.append((path+[cave],flag)) # so explore further
|
||||||
|
elif flag: # we still haven't visited a cave twice,
|
||||||
|
search.append((path+[cave],False)) # so go there and explore, but remember we've used our exception
|
||||||
|
|
||||||
|
print(len(paths))
|
21
2021/12/input.txt
Normal file
21
2021/12/input.txt
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
KF-sr
|
||||||
|
OO-vy
|
||||||
|
start-FP
|
||||||
|
FP-end
|
||||||
|
vy-mi
|
||||||
|
vy-KF
|
||||||
|
vy-na
|
||||||
|
start-sr
|
||||||
|
FP-lh
|
||||||
|
sr-FP
|
||||||
|
na-FP
|
||||||
|
end-KF
|
||||||
|
na-mi
|
||||||
|
lh-KF
|
||||||
|
end-lh
|
||||||
|
na-start
|
||||||
|
wp-KF
|
||||||
|
mi-KF
|
||||||
|
vy-sr
|
||||||
|
vy-lh
|
||||||
|
sr-mi
|
7
2021/12/sample1.txt
Normal file
7
2021/12/sample1.txt
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
start-A
|
||||||
|
start-b
|
||||||
|
A-c
|
||||||
|
A-b
|
||||||
|
b-d
|
||||||
|
A-end
|
||||||
|
b-end
|
10
2021/12/sample2.txt
Normal file
10
2021/12/sample2.txt
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
dc-end
|
||||||
|
HN-start
|
||||||
|
start-kj
|
||||||
|
dc-start
|
||||||
|
dc-HN
|
||||||
|
LN-dc
|
||||||
|
HN-end
|
||||||
|
kj-sa
|
||||||
|
kj-HN
|
||||||
|
kj-dc
|
18
2021/12/sample3.txt
Normal file
18
2021/12/sample3.txt
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
fs-end
|
||||||
|
he-DX
|
||||||
|
fs-he
|
||||||
|
start-DX
|
||||||
|
pj-DX
|
||||||
|
end-zg
|
||||||
|
zg-sl
|
||||||
|
zg-pj
|
||||||
|
pj-he
|
||||||
|
RW-he
|
||||||
|
fs-DX
|
||||||
|
pj-RW
|
||||||
|
zg-RW
|
||||||
|
start-pj
|
||||||
|
he-WI
|
||||||
|
zg-he
|
||||||
|
pj-fs
|
||||||
|
start-RW
|
Loading…
Reference in a new issue