2023 Dec 18th
This commit is contained in:
parent
69dbfddfae
commit
b8754c8a47
1 changed files with 56 additions and 0 deletions
56
Python/2023/18/main.py
Normal file
56
Python/2023/18/main.py
Normal file
|
|
@ -0,0 +1,56 @@
|
||||||
|
input = open("input", 'r')
|
||||||
|
|
||||||
|
|
||||||
|
d = [((p:= line.split(" "))[0], int(p[1]), p[2][2:-2])
|
||||||
|
for line in input]
|
||||||
|
|
||||||
|
def drToC(dr):
|
||||||
|
match dr:
|
||||||
|
case "U" | "3":
|
||||||
|
return 1
|
||||||
|
case "D" | "1":
|
||||||
|
return -1
|
||||||
|
case "R" | "0":
|
||||||
|
return 1j
|
||||||
|
case "L" | "2":
|
||||||
|
return -1j
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def fill(pos,s):
|
||||||
|
q = {pos}
|
||||||
|
while q:
|
||||||
|
c = q.pop()
|
||||||
|
if c in s: continue
|
||||||
|
s.add(c)
|
||||||
|
for dr in {1,-1,1j,-1j}:
|
||||||
|
q.add(c+dr)
|
||||||
|
|
||||||
|
def run():
|
||||||
|
cr = 0
|
||||||
|
s = {0}
|
||||||
|
for dr,ln,_ in d:
|
||||||
|
drC = drToC(dr)
|
||||||
|
for _ in range(ln):
|
||||||
|
cr = cr + drC
|
||||||
|
s.add(cr)
|
||||||
|
fill(-1+1j,s)
|
||||||
|
return len(s)
|
||||||
|
|
||||||
|
def run2():
|
||||||
|
v = [0]
|
||||||
|
cr = 0
|
||||||
|
prev = 0
|
||||||
|
area = 1
|
||||||
|
|
||||||
|
for _,_,color in d:
|
||||||
|
ln,dr = int(color[:-1],16), drToC(color[-1])
|
||||||
|
area += ln
|
||||||
|
prev += dr * ln
|
||||||
|
v.append(prev)
|
||||||
|
|
||||||
|
for v1,v2 in zip(v,(v[1:] + [v[0]])):
|
||||||
|
area += (v1.real * v2.imag) - (v1.imag * v2.real)
|
||||||
|
return int(area // 2)
|
||||||
|
|
||||||
|
print(run())
|
||||||
|
print(run2())
|
||||||
Loading…
Add table
Add a link
Reference in a new issue