37 lines
884 B
Python
37 lines
884 B
Python
|
#!/usr/bin/env python3
|
||
|
|
||
|
import sys
|
||
|
import numpy
|
||
|
import networkx
|
||
|
|
||
|
def solve(cave):
|
||
|
G = networkx.DiGraph()
|
||
|
for i, row in enumerate(cave):
|
||
|
for j, v in enumerate(row):
|
||
|
if 0 <= i-1:
|
||
|
G.add_edge((i-1, j), (i, j), weight=v)
|
||
|
if 0 <= j-1:
|
||
|
G.add_edge((i, j-1), (i, j), weight=v)
|
||
|
if i+1 < len(cave):
|
||
|
G.add_edge((i+1, j), (i, j), weight=v)
|
||
|
if j+1 < len(cave):
|
||
|
G.add_edge((i, j+1), (i, j), weight=v)
|
||
|
|
||
|
return networkx.dijkstra_path_length(G, (0,0), (len(cave)-1,len(cave[0])-1))
|
||
|
|
||
|
cave = numpy.genfromtxt(sys.stdin, dtype=int, delimiter=1)
|
||
|
|
||
|
print("Silver:", solve(cave))
|
||
|
|
||
|
largecave = numpy.tile(cave, (5,5))
|
||
|
|
||
|
for i in range(1,5):
|
||
|
largecave[i*len(cave):]+=1
|
||
|
largecave[:,i*len(cave):]+=1
|
||
|
|
||
|
largecave-=1
|
||
|
largecave%=9
|
||
|
largecave+=1
|
||
|
|
||
|
print("Gold:", solve(largecave))
|