generated from public/aoc_template
Compare commits
No commits in common. "55ba58a315a0132aab3d87a40598b5ad4fbeac38" and "c7294385cdc031b97bea004096c85c8d3d322fc5" have entirely different histories.
55ba58a315
...
c7294385cd
74
day03.py
74
day03.py
@ -9,19 +9,15 @@ class Day(AOCDay):
|
|||||||
inputs = [
|
inputs = [
|
||||||
[
|
[
|
||||||
(4361, "input3_test"),
|
(4361, "input3_test"),
|
||||||
(533775, "input3_dennis"),
|
(None, "input3"),
|
||||||
(560670, "input3"),
|
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
(467835, "input3_test"),
|
(None, "input3"),
|
||||||
(78236071, "input3_dennis"),
|
|
||||||
(91622824, "input3"),
|
|
||||||
],
|
],
|
||||||
]
|
]
|
||||||
|
|
||||||
def parse_input(self) -> Grid:
|
def parse_input(self) -> Grid:
|
||||||
grid = Grid()
|
grid = Grid()
|
||||||
num_found = 0
|
|
||||||
for y, l in enumerate(self.getInput()):
|
for y, l in enumerate(self.getInput()):
|
||||||
number_digits = set()
|
number_digits = set()
|
||||||
number = 0
|
number = 0
|
||||||
@ -32,64 +28,44 @@ class Day(AOCDay):
|
|||||||
else:
|
else:
|
||||||
if number_digits:
|
if number_digits:
|
||||||
for nc in number_digits:
|
for nc in number_digits:
|
||||||
grid.set(Coordinate(*nc), (num_found, number))
|
grid.set(Coordinate(*nc), number)
|
||||||
num_found += 1
|
|
||||||
number_digits = set()
|
number_digits = set()
|
||||||
number = 0
|
number = 0
|
||||||
|
|
||||||
if c != ".":
|
if c != ".":
|
||||||
grid.set(Coordinate(x, y), c)
|
grid.set(Coordinate(x, y), c)
|
||||||
|
|
||||||
if number_digits:
|
|
||||||
for nc in number_digits:
|
|
||||||
grid.set(Coordinate(*nc), (num_found, number))
|
|
||||||
num_found += 1
|
|
||||||
|
|
||||||
return grid
|
return grid
|
||||||
|
|
||||||
def part1(self) -> Any:
|
def part1(self) -> Any:
|
||||||
grid = self.parse_input()
|
grid = self.parse_input()
|
||||||
part_number_sum = 0
|
sum = 0
|
||||||
seen = set()
|
seen = set()
|
||||||
for c in grid.getActiveCells():
|
for y in grid.rangeY():
|
||||||
v = grid.get(c)
|
for x in grid.rangeX():
|
||||||
if not isinstance(v, tuple):
|
if Coordinate(x, y) in seen:
|
||||||
continue
|
continue
|
||||||
|
c = grid.get(Coordinate(x, y))
|
||||||
|
if c and isinstance(c, int):
|
||||||
|
print(f"investigate {c} at {x}, {y}")
|
||||||
|
found = False
|
||||||
|
for dx in range(len(str(c))):
|
||||||
|
num_c = Coordinate(x + dx, y)
|
||||||
|
if num_c in seen:
|
||||||
|
continue
|
||||||
|
|
||||||
num_id, num_value = v
|
seen.add(num_c)
|
||||||
if num_id in seen:
|
for n in grid.getNeighboursOf(num_c, includeDiagonal=True, includeDefault=False):
|
||||||
continue
|
if not found and grid.get(n) != c: # and not isinstance(grid.get(n), int):
|
||||||
|
print(f"{c} has {grid.get(n)} at {n}")
|
||||||
|
sum += c
|
||||||
|
found = True
|
||||||
|
break
|
||||||
|
|
||||||
for n in grid.getNeighboursOf(c, includeDefault=False, includeDiagonal=True):
|
return sum
|
||||||
nv = grid.get(n)
|
|
||||||
if nv and not isinstance(nv, tuple):
|
|
||||||
part_number_sum += num_value
|
|
||||||
seen.add(num_id)
|
|
||||||
break
|
|
||||||
|
|
||||||
return part_number_sum
|
|
||||||
|
|
||||||
def part2(self) -> Any:
|
def part2(self) -> Any:
|
||||||
grid = self.parse_input()
|
return ""
|
||||||
gear_ratio_sum = 0
|
|
||||||
for c in grid.getActiveCells():
|
|
||||||
if grid.get(c) != "*":
|
|
||||||
continue
|
|
||||||
|
|
||||||
count = 0
|
|
||||||
ratio = 1
|
|
||||||
seen = set()
|
|
||||||
for n in grid.getNeighboursOf(c, includeDiagonal=True, includeDefault=False):
|
|
||||||
num = grid.get(n)
|
|
||||||
if num and isinstance(num, tuple) and num[0] not in seen:
|
|
||||||
ratio *= num[1]
|
|
||||||
count += 1
|
|
||||||
seen.add(num[0])
|
|
||||||
|
|
||||||
if count == 2:
|
|
||||||
gear_ratio_sum += ratio
|
|
||||||
|
|
||||||
return gear_ratio_sum
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|||||||
@ -1,140 +0,0 @@
|
|||||||
416.........................559...............417...............785.......900.......284...........503...796....992..........................
|
|
||||||
.........702*....772............378..569.........&.49..606...14*..............$.453*.........307....*......$.....-.................995......
|
|
||||||
.....................458...856......+.........+....&..............680.......104.............%....516.................................*......
|
|
||||||
...........822..174..*.....&...........711.746.......&............$....../.............656....#...........265=......634.*.............430...
|
|
||||||
..827.137..*...*....39................*..............856..............767........522......$..773....619..............*...287....501.........
|
|
||||||
..........726...511.............*.....320........476...............................*................%...899....72..731...........%....$.....
|
|
||||||
.....861..............232....223.933...............*.@........424*618.858.......................................$.......338.205........535..
|
|
||||||
.......#.............-....................676...713...427.................-.......615.........126...................=..*.......*...&........
|
|
||||||
....40..........996..............520.974.*..........#......*.566........907......................&...214...996*911.115.363..960..897........
|
|
||||||
....+.............*....................$..172.....559...763.....*............554......*.............*.......................................
|
|
||||||
.......527...#.....90.+....66.................................890..............=...802.93.131..791...209......&........928......303....$....
|
|
||||||
950.....*....773......105..............725........................................................%............886.......*........$.384.....
|
|
||||||
........383......741..............@..=....#.....179.18..%974..........624.......64.266.................701...........%..671.721.........942.
|
|
||||||
..................*.............914..548..........+.*.................*...........*...................*.........834.394.....*...............
|
|
||||||
.......502*80..960........................25........464.........831.846........25.........329..985...458.+.....&................377..659....
|
|
||||||
..........................................*.....292...............*............/..................@......350........938............*....$...
|
|
||||||
...738..............428......+.......311...742.........236*631....816.&......+....86.........81.......................*.973*341.266.........
|
|
||||||
......*.....673......*......614.........*.......689.48.................450...816.....754...........258..@585.......154..............@.......
|
|
||||||
...231.....#.........681...........855...775..........*.....=..257...................................*.............................469..=682
|
|
||||||
........#...................807...&.............418.19.....259....*459..906...185.356.......778.......230....................556............
|
|
||||||
.......924.........459......*..............804.=.........................*...*...........&....*................=........836..+......618.....
|
|
||||||
.....=............#.......900........+...........702..383........%..*...250..503.......637.808.......97/....@...370.......&........#.....710
|
|
||||||
..988........685............../663.273...........*...@..........16.251...........$..............*..........964.......658.....537........*...
|
|
||||||
...............*......171*......................714.....543............737.....372.............941.............113..*....=.......853....733.
|
|
||||||
............470..161......508.....56...170.............$...................389.....544.....208.....98.........%.....617...884......-..@.....
|
|
||||||
.766.591............../.........-......*.......210.........618......*874....-.........#...*....129.=..194......../...................992....
|
|
||||||
....../....170@..140+..753....918....467.854....*................989..........979...............*.............-.907...276...931*618.........
|
|
||||||
..700............................................801....929..859.....#..........*.............594.493......981..........*...................
|
|
||||||
....+............173..............................................251........629..........970........*................136.........388...*...
|
|
||||||
......721.......$......911....766..................541.234....=...........47......614....@.....*217..885.680.742....................#..84...
|
|
||||||
.377*....*81.............*.......&...937...........+...*....155..@......*............*......648............&...*.....&401......493..........
|
|
||||||
.....1.................533............*..399...........861......951..709.331..126.....876.....................289.........@.....*.......*...
|
|
||||||
..........107....452-......594.888.431....*..+660...........79................................$......275*876.......978.....594..400...39....
|
|
||||||
.........+................*....*.........925..........$.......*........599.......228..........60....................+....#..................
|
|
||||||
...283...................177...708...........642....661........294........*............................288*793.867.....482.479.769....73....
|
|
||||||
...........617..855*...&.............605................783.91.........847................&...../...............*..#..........*.......+.....
|
|
||||||
.672..303+...*........967...............*453.....884@......*...208.949........*..........986.....249.....352..818.596.56....................
|
|
||||||
...*..........88...............569.....................975.....*.....*..638....619.......................+.............*.......*.......462..
|
|
||||||
....500.....=...................*.................*205..*..-...228.508....&........................395..............845.....683.365....*....
|
|
||||||
........197.672.841..............214.=...847...912.....24.349...................%....584.257............152.................................
|
|
||||||
.626....-..........*..447............714....&.....................463....287...360........*............*...............*.................717
|
|
||||||
..........53......334...*........................*167......................*.......................554..246...........295.396......./.......
|
|
||||||
.......24..............92...........897.......220...........................930..703...414.....711..*.........723.........*....117...146....
|
|
||||||
.......&...........548.....324.21......................622.........820.404...............*....../..139......&......*.......578...*..........
|
|
||||||
.....*......204......*..........*.............226...........663.......*......555.992.....502...........631..49.#....366........677..........
|
|
||||||
..958.350.....*......44...694...449..-39........*...........-...786.........*......*............................140.........................
|
|
||||||
...............477.........*...................815..............*..........815.................521....................&...273........103....
|
|
||||||
.........828............781....464..................276......646....665-............924..........*.......955........759.........934...#.....
|
|
||||||
........*..........*..........*..........15.193.......*.....................&.................808....347*......963........*....+............
|
|
||||||
.........810.....360........638...434.....*....*751....812.....573...........85.........+.........95.......892...*...153...220..........187.
|
|
||||||
....714*....................................................80*....162=.................214...........842...&...39..........................
|
|
||||||
........265.........................51.......285$.......................586.......=.................................*.....*..............948
|
|
||||||
..989..........22.=......374.......%....................142.......736..@.....507.636.797.....273.........872.....567.978..334.....382...*...
|
|
||||||
..........@.......68..=......................116.130.......%.250../......-...=........*.........*486.415..........................*....813..
|
|
||||||
.......505............61..140..........435..........*691......*........852..........571....408..............12......80.......228...109......
|
|
||||||
.........................*.........207...*..24................402.=...........................@....................../...162................
|
|
||||||
....285.................672.552........492....$./..................3..620.391...............................179............*................
|
|
||||||
...*..........159...428.......*.................390.111.........$.....*...*..................348.355.481.......&.210..99...41...............
|
|
||||||
...52......12..@..........808.810.897...................663..280....57..............476.............*............*.....*........208=........
|
|
||||||
..........*...............*.........@.286..................*...........................*..........................905.296..............148..
|
|
||||||
.......298......119.....172.................622$..637................#......342.......679.111......-968..104*478............#.......*.......
|
|
||||||
.../.............*........../......................*..............658..........*718..........*136.....................503.899....889.498....
|
|
||||||
....691........341.262..36.549...........386........437.............................662...........848............#......*...................
|
|
||||||
.......................*..........936...*...............................-...........*......516....%......358....707..535...........841......
|
|
||||||
......$..............639............*..798.../..67%............137...716.......313.247......................-............@.....371..........
|
|
||||||
....433.677..605.267................1.......930........478........*........565*................................869.......372..@....228......
|
|
||||||
...........@..*..$...794.........................74.......#./......833.348.......................................+................*.........
|
|
||||||
......865...............*.........................*..........839.....................=......................................916..84.@.......
|
|
||||||
.................-....451........541@......468..684....18............759.............499................124.....426*.........*......882.....
|
|
||||||
...68*...........614........509...............*.........&...956*308.%........&....36...........480+....../..........917....32....#..........
|
|
||||||
......363..377.............*..........441.....418..........................279.....*.................139..........................944.......
|
|
||||||
........................412............*..........%....920*585....526*............931.346&.807..840.....*.626-...#....................923...
|
|
||||||
.....283.....924...+..................628.......33....................908..766..............*........336..........446...........191.........
|
|
||||||
...............*.249........@264..35...................502.791.#...........*......=............126....................957....71....*.768....
|
|
||||||
.........144&.36.....216.........*...........................&.730..........201..581.704.........$......715.............=......*.......%....
|
|
||||||
...349..............*....598...949.........189....981.....#.............524...................*............=................440...847.......
|
|
||||||
.................967....#..........999*6..%.........-......604............&.189.626...#774.159.647....................168.........../...329.
|
|
||||||
..............................................481.....*........................*.................................747..%.................#...
|
|
||||||
..........245...878.......495....57....841.........351.517..........-297........................343.599/........&.......360..........-......
|
|
||||||
430........&..............&.....*...&.....*885...........................9....392.......93..336*...........................*321.....86......
|
|
||||||
....469......#.................999..796..................899.........250*........$.......*........247............................+.......328
|
|
||||||
......*...696...615..300..603..............................*....232...................402...501......*.......77.271.....@.........146.......
|
|
||||||
......170......%....$.........*..991..........782.49.......128.............................*........161........*.....648......123...........
|
|
||||||
..........646................901..*.............*......134...........517..2..287........513...............................644...*...........
|
|
||||||
...................999*620.........541.379.....488..18*.......................*...............208....931.338..%143...........*...19.........
|
|
||||||
...+.......938...........................*...%.............&........626......268.418......841*..........*...............820.395..........913
|
|
||||||
.723...834*..........+............162.667.....84............803.804...*............*................399........172..530*....................
|
|
||||||
.....................596............*............................./.287............852....623....@.*..............@........168...965..*17...
|
|
||||||
.....=488...................758....607.....&......53%......................105.683......-...*.860..244.....&....$....232....................
|
|
||||||
.............................*..........333....................197........+....*......334.954.............686...464...............544.......
|
|
||||||
.139=..............754...993.677..../.......933..........391....*....357*.....952......................@..........................*.........
|
|
||||||
..........831............../.........94.600................+.121.........183........18..686.....665*..823...........575...........68........
|
|
||||||
141...800....*....692...........254@.....*...819-.....................................*..@...................17.......*...815...........686.
|
|
||||||
........%.602........%.................186..........562.93....774.....................11....948....912.........*328..243.*..................
|
|
||||||
.......................................................*..........607....280..................&....+.....................548.&897.100@...955
|
|
||||||
......504.....605...........889@.............975..664....$.....#............*....141.................378%.........812.......................
|
|
||||||
.....=...........*.....730...............%...............899..480.....*....375.....-.444.........47*.........@63...........828.....468..462.
|
|
||||||
.......607.../...23....=......=........383.............................522............*.............433..360..................*372...*......
|
|
||||||
........*...975.............428...................592*......@258...114......%......431...................*......+........658.......560.163..
|
|
||||||
........16........................329.......315.......973............*...333....@.......$....782..18...58....533........*...............*...
|
|
||||||
..327.............563...889.......*...........*..595...............913........671..354..937...%..*...&...........&.787...975.......676...247
|
|
||||||
.....+..&...401..*..............713........=.757...#.873*47...#465..................................440..588/..859.%..................*.....
|
|
||||||
.665....133...%..196....907..............348..................................162........305...................................163.-........
|
|
||||||
....*....................*...........170.........222.804....784..............*...................................................=.742......
|
|
||||||
..239..338.....27-.437..543.........*....609......*..*......-...............582..-...........343*560....852.../....636..263.................
|
|
||||||
..........*900.......*............17...........948.....597.....=....922...........682./255................@..35.......*.......211-..#.......
|
|
||||||
.......*...........686........984..........78......896*......13........+....................985...&....................278.........876.835..
|
|
||||||
....630.82....$851.....905.......*..281...*...............................352..........*746........215.877....845..........471.852.....*....
|
|
||||||
.........................*.....757.*......625...........924......878..........912...............-.........*../.....538%......+.........871..
|
|
||||||
..954*712..977.....-..762..........236.........527*674.*.........*........811*.....228....&.....5........739...483..........................
|
|
||||||
..........*.......470..................................707....363.................*......525.......303..........*........463....537.........
|
|
||||||
...460...947...............130.....757./96........*.................=...529....+..466........527................65..%648....=.....*.........
|
|
||||||
.....*......................$....../..............968..............479.&....630............................598.................952..........
|
|
||||||
.......&..........793...................................514...............-...................311..........=....83......#.............124...
|
|
||||||
.975....399.......*...-.......*814...663..................*....*...........381../...............*.............@.........284............*....
|
|
||||||
...*............367....198..........@.....992.....716*529....96.................729.329.688...%.322.-......67.79......-.......335....997....
|
|
||||||
488............................632........*...../......................387.............*....225......491.............391..750...%...........
|
|
||||||
.......861.527......778.165.......*........187..916.......845....-....*.......873.................................@.........................
|
|
||||||
..545.....*.....$.....*..*......627............................736.376..845...*....594........+.......171.........292...........*750..-.....
|
|
||||||
.................407.403............+...342.................+..........*.......897..........400.......$......................910.......350..
|
|
||||||
...........................40..284.66...*......494..........255.......653..............866.................942=..................*52........
|
|
||||||
....&........827.......296...*........$.401......*..............892*...................$.............1.164.......343..........485...........
|
|
||||||
.930............*.........*..944...308...........763....../.........62.....113....=...........421........*..........................580+....
|
|
||||||
........50*.....934......705............................999..................*....541...............847-.950..............*131..............
|
|
||||||
...........209....................................&404...............276..242.............723.652................873...313..............24..
|
|
||||||
......*........606....550#.....2./........@..................899.......*.....................*..........235..112...........704.....337......
|
|
||||||
.......837....*...............*...83...993.....*416.........-....580%..535......../.....-204...............#..*.....93+....*...723./........
|
|
||||||
..............168.....753..593..............504......./........................488..............=.............458.......872...*.............
|
|
||||||
...#85...................&......911/...................880........315..872..........=....494..349....466..428..................40...........
|
|
||||||
........939........648......................*................227...*......*.......924...*...........*.....*.................................
|
|
||||||
918*......&.@........*...902..269..834....87.826.........../...*...919.118...817......109..........933..643...........&..............-......
|
|
||||||
....949......883...111..%......*...%..................710.464.943.........../...................................842....305.....469..289.....
|
|
||||||
..........................%...974......*407..168.647...*..............617.......498/.....848...........@99........*...........+.............
|
|
||||||
..........176...........120.........469........&...#....997......464.......274.............*......./............477.417../.......738........
|
|
||||||
.........*.......964.........291..........................................-.............2..29...272..465...............-..819........718*265
|
|
||||||
....298...747.......#.......*.....+745...........460...741*762.275...491.......+.735*34.*............-....*841......+............*..........
|
|
||||||
...*........................593..............298...#............%....$......225.........943........................23.....702.601.616.......
|
|
||||||
..889................695........654..750.....*.............637........./...............................780....*726....233...*...............
|
|
||||||
..................../.................*.....453.....642....*.........828......@...94...........152/...*....790.......*.....445......../.....
|
|
||||||
...........................51.......681........................271..........719.......................964......399..426...............456...
|
|
||||||
Loading…
Reference in New Issue
Block a user