generated from public/aoc_template
day10 - unpolished
This commit is contained in:
parent
34801a6490
commit
7fc22b858a
78
day10.py
Normal file
78
day10.py
Normal file
@ -0,0 +1,78 @@
|
||||
from collections import deque
|
||||
|
||||
from tools.aoc import AOCDay
|
||||
from tools.coordinate import Coordinate
|
||||
from tools.grid import Grid
|
||||
from typing import Any
|
||||
|
||||
|
||||
def find_nine(grid: Grid, start: Coordinate) -> int:
|
||||
q = deque([start])
|
||||
seen = set()
|
||||
nines = set()
|
||||
while q:
|
||||
pos = q.popleft()
|
||||
cur_val = grid.get(pos)
|
||||
if cur_val == 9:
|
||||
nines.add(pos)
|
||||
continue
|
||||
if pos in seen:
|
||||
continue
|
||||
seen.add(pos)
|
||||
|
||||
for next_pos in grid.getNeighboursOf(pos, includeDiagonal=False):
|
||||
if grid.get(next_pos) == cur_val + 1:
|
||||
q.append(next_pos)
|
||||
|
||||
return len(nines)
|
||||
|
||||
|
||||
def find_nine_ways(grid: Grid, start: Coordinate, next_val: int = 1) -> int:
|
||||
if next_val == 9:
|
||||
return sum(1 for x in grid.getNeighboursOf(start, includeDiagonal=False) if grid.get(x) == 9)
|
||||
else:
|
||||
return sum(
|
||||
find_nine_ways(grid, x, next_val + 1)
|
||||
for x in grid.getNeighboursOf(start, includeDiagonal=False)
|
||||
if grid.get(x) == next_val
|
||||
)
|
||||
|
||||
|
||||
class Day(AOCDay):
|
||||
inputs = [
|
||||
[
|
||||
(1, "input10_test2"),
|
||||
(2, "input10_test3"),
|
||||
(4, "input10_test4"),
|
||||
(3, "input10_test5"),
|
||||
(36, "input10_test"),
|
||||
(644, "input10"),
|
||||
],
|
||||
[
|
||||
(3, "input10_test7"),
|
||||
(81, "input10_test"),
|
||||
(1366, "input10"),
|
||||
],
|
||||
]
|
||||
|
||||
def parse_input(self) -> Grid:
|
||||
return Grid.from_data(self.getInput(), default=0, translate={"[0-9]": int})
|
||||
|
||||
def part1(self) -> Any:
|
||||
grid = self.parse_input()
|
||||
trail_heads = [
|
||||
Coordinate(x, y) for y in grid.rangeY() for x in grid.rangeX() if grid.get(Coordinate(x, y)) == 0
|
||||
]
|
||||
return sum(find_nine(grid, trail) for trail in trail_heads)
|
||||
|
||||
def part2(self) -> Any:
|
||||
grid = self.parse_input()
|
||||
trail_heads = [
|
||||
Coordinate(x, y) for y in grid.rangeY() for x in grid.rangeX() if grid.get(Coordinate(x, y)) == 0
|
||||
]
|
||||
return sum(find_nine_ways(grid, trail) for trail in trail_heads)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
day = Day(2024, 10)
|
||||
day.run(verbose=True)
|
||||
53
inputs/input10
Normal file
53
inputs/input10
Normal file
@ -0,0 +1,53 @@
|
||||
78760345801298896321001230110976301870134341034545687
|
||||
69671236989367765410678345221885432963233452127632796
|
||||
10589987670456001323569896336797010154324569498101845
|
||||
23478678561032132124428987445788923245013478545613932
|
||||
12034569432983045034310176596657654356932103456754301
|
||||
06123765301874126965223456780345543267843212769861212
|
||||
67610854322965437876104320691275676189732301890770023
|
||||
98545921013456946766782111234987089078721450321981167
|
||||
23434530145697854325693003435672128569670965492843298
|
||||
10127647654787765014234512345965432154589876782194587
|
||||
01018758943439890143109671236878941003432106543087656
|
||||
10129667872108743232198780987567650012343267890989943
|
||||
78734531231065654651015697898232109871054154901077830
|
||||
69632340345676544543234506701145696780567063212566321
|
||||
12541256543989035672103215012098785991278343103455410
|
||||
01230167612108120780043454123210034876369752101769511
|
||||
43456898909817431891012763204987121765459861019878700
|
||||
32197899768746532982367874215672100894312772923467011
|
||||
44089432897655673675498985365523456783203689876554322
|
||||
43476521784554984566780189474310327894104501298458943
|
||||
32562340603443295432110276589210016765067898347457654
|
||||
41001456512782106798023345341232108778754106756346655
|
||||
58989867425691065897654301250343419689603245891258743
|
||||
67670198304781478654761298765430589576512231230969512
|
||||
50501078213210569763890181056521677433443100945872402
|
||||
41432189362387659812083212347893478922109811876721321
|
||||
32343276651096543202144307438982560013078320125630430
|
||||
21054565789823430143435698729861011224565410432145561
|
||||
78769834658712894354998705610154398348901565589006776
|
||||
69876765541006765267888214567863287657652651671217889
|
||||
56945454532214890122379823098978101098343780980368923
|
||||
47834503654323012001456702112109780123210891276456914
|
||||
32322112567410163100014511003498898194541201345567805
|
||||
01012012398789654011723621014586767087687632436679876
|
||||
01201034498218765327898734765675432101598543567987015
|
||||
32789125567309014456783349898987013216967845678872126
|
||||
45694876323418123242124456787016524567856934569543034
|
||||
34543945410567032103023456689145434787643021078676545
|
||||
67432876509878749854510965670236543694532122189089496
|
||||
78761789034569858987627874321987231243231821672102387
|
||||
89450321123988567546596765345698100340100910565201256
|
||||
44321450210676875654587034276765657654327823434389855
|
||||
32340565012363966703456123189894398789016434325670765
|
||||
01051876765454567812890012007654289430145045410581678
|
||||
98762998898323234906721063218723176521032156921892569
|
||||
45101237012210105415430874349812067898149867865433454
|
||||
36788946543101076010987965456701098778928766456521043
|
||||
29897654218760187623875478309898105667810610347876542
|
||||
10898743009451296874566329214321234354320521298985031
|
||||
01734542112321345987017812105670985012131494567874120
|
||||
45629610321030996506323901078987876543012383456923454
|
||||
30018723478945887215489765212985432692105672321012765
|
||||
21167634569876774345677894303876501783234561030109876
|
||||
8
inputs/input10_test
Normal file
8
inputs/input10_test
Normal file
@ -0,0 +1,8 @@
|
||||
89010123
|
||||
78121874
|
||||
87430965
|
||||
96549874
|
||||
45678903
|
||||
32019012
|
||||
01329801
|
||||
10456732
|
||||
4
inputs/input10_test2
Normal file
4
inputs/input10_test2
Normal file
@ -0,0 +1,4 @@
|
||||
0123
|
||||
1234
|
||||
8765
|
||||
9876
|
||||
7
inputs/input10_test3
Normal file
7
inputs/input10_test3
Normal file
@ -0,0 +1,7 @@
|
||||
...0...
|
||||
...1...
|
||||
...2...
|
||||
6543456
|
||||
7.....7
|
||||
8.....8
|
||||
9.....9
|
||||
7
inputs/input10_test4
Normal file
7
inputs/input10_test4
Normal file
@ -0,0 +1,7 @@
|
||||
..90..9
|
||||
...1.98
|
||||
...2..7
|
||||
6543456
|
||||
765.987
|
||||
876....
|
||||
987....
|
||||
7
inputs/input10_test5
Normal file
7
inputs/input10_test5
Normal file
@ -0,0 +1,7 @@
|
||||
10..9..
|
||||
2...8..
|
||||
3...7..
|
||||
4567654
|
||||
...8..3
|
||||
...9..2
|
||||
.....01
|
||||
7
inputs/input10_test7
Normal file
7
inputs/input10_test7
Normal file
@ -0,0 +1,7 @@
|
||||
.....0.
|
||||
..4321.
|
||||
..5..2.
|
||||
..6543.
|
||||
..7..4.
|
||||
..8765.
|
||||
..9....
|
||||
Loading…
Reference in New Issue
Block a user