drop flood fill from 18
This commit is contained in:
parent
07ee191603
commit
88d9fae7f2
41
achtzehn.py
41
achtzehn.py
|
@ -1,7 +1,6 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
from useful import *
|
||||
import cv2 as cv
|
||||
|
||||
dirind = {'U': (-1, 0),
|
||||
'D': (1, 0),
|
||||
|
@ -21,18 +20,12 @@ def parse2(l):
|
|||
def make_graph(guide):
|
||||
edges = []
|
||||
head = np.asarray((0, 0))
|
||||
# create path
|
||||
# create path
|
||||
for rection, distance in guide:
|
||||
tail = head
|
||||
head = head + rection * distance
|
||||
edges += [(tail, head)]
|
||||
# normalize to be all >=0. blech.
|
||||
low = np.asarray((min(min(e[0][0], e[1][0]) for e in edges),
|
||||
min(min(e[0][1], e[1][1]) for e in edges)))
|
||||
offset = -low
|
||||
for i, e in enumerate(edges):
|
||||
edges[i] = [e[0] + offset, e[1] + offset]
|
||||
return edges, offset
|
||||
return edges
|
||||
|
||||
def shoelace(edges):
|
||||
return abs(sum(e[0][0] * e[1][1] - e[1][0] * e[0][1] for e in edges) // 2)
|
||||
|
@ -40,31 +33,9 @@ def shoelace(edges):
|
|||
linez = lines(open(0))
|
||||
|
||||
guide = [parse(l) for l in linez]
|
||||
edges, offset = make_graph(guide)
|
||||
size = np.asarray((max(max(e[0][0], e[1][0]) for e in edges) + 1,
|
||||
max(max(e[0][1], e[1][1]) for e in edges) + 1))
|
||||
kart = np.zeros(size, dtype='uint8')
|
||||
for e in edges:
|
||||
cv.line(kart, e[0][::-1], e[1][::-1], True)
|
||||
if len(sys.argv) > 1 and sys.argv[1] == '-v':
|
||||
cv.imshow('', kart * 255)
|
||||
cv.waitKey(1)
|
||||
if len(sys.argv) > 1 and sys.argv[1] == '-v':
|
||||
cv.imshow('', kart * 255)
|
||||
cv.waitKey(0)
|
||||
mask = np.pad(kart, (1,1))
|
||||
# point is x, y; not y, x. assume 1, 1 is inside.
|
||||
point = offset[::-1] + np.asarray((1, 1))
|
||||
cv.floodFill(kart, mask, point, 1)
|
||||
if len(sys.argv) > 1 and sys.argv[1] == '-v':
|
||||
cv.imshow('', kart * 255)
|
||||
cv.waitKey(0)
|
||||
answer1 = np.sum(kart)
|
||||
print(answer1)
|
||||
shoe1 = shoelace(edges) + sum(d for (_, d) in guide) // 2
|
||||
magic_number = int(answer1 - shoe1)
|
||||
edges = make_graph(guide)
|
||||
print(shoelace(edges) + sum(d for (_, d) in guide) // 2 + 1)
|
||||
|
||||
guide2 = [parse2(l) for l in linez]
|
||||
edges2, _ = make_graph(guide2)
|
||||
shoe2 = shoelace(edges2) + sum(d for (_, d) in guide2) // 2
|
||||
print(shoe2 + magic_number)
|
||||
edges2 = make_graph(guide2)
|
||||
print(shoelace(edges2) + sum(d for (_, d) in guide2) // 2 + 1)
|
||||
|
|
Loading…
Reference in New Issue