drop flood fill from 18

This commit is contained in:
basicbonobo 2023-12-30 00:08:54 +01:00
parent 07ee191603
commit 88d9fae7f2
1 changed files with 6 additions and 35 deletions

View File

@ -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)