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