You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

82 lines
1.7 KiB

#!/usr/bin/env python3
import sys
import re
def parse(line):
groups = re.compile(r"(?P<x1>\d+),(?P<y1>\d+) -> (?P<x2>\d+),(?P<y2>\d+)").search(line)
return groups
def calc(x1, y1, x2, y2, mem):
if x1 == x2:
if y1 > y2:
y = y2
y2 = y1
y1 = y
for y in range(y1, y2+1):
if (x1, y) not in mem:
mem[(x1, y)] = 1
else:
mem[(x1, y)] += 1
elif y1 == y2:
if x1 > x2:
x = x2
x2 = x1
x1 = x
for x in range(x1, x2+1):
if (x, y1) not in mem:
mem[(x, y1)] = 1
else:
mem[(x, y1)] += 1
def calc2(x1, y1, x2, y2):
if x1 != x2 and y1 != y2:
if x1 > x2:
dif = x1-x2+1
m1 = -1
else:
dif = x2-x1+1
m1 = 1
if y1 > y2:
m2 = -1
else:
m2 = 1
for i in range(dif):
if (x1+m1*i, y1+m2*i) not in memo2:
memo2[(x1+m1*i, y1+m2*i)] = 1
else:
memo2[(x1+m1*i, y1+m2*i)] += 1
if __name__ == '__main__':
lines = open(sys.argv[1]).readlines()
coords = [tuple(map(int,parse(line).groups())) for line in lines]
# challenge 1
memo = {}
for c in coords:
calc(*c,memo)
res1 = 0
for v in memo.values():
if v > 1:
res1 += 1
print("challenge 1:" + "\n" + str(res1) + "\n")
# challenge 2
memo2 = {}
for c in coords:
calc(*c,memo2)
calc2(*c)
res2 = 0
for v in memo2.values():
if v > 1:
res2 += 1
print("challenge 2:" + "\n" + str(res2) + "\n")