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.
64 lines
1.4 KiB
64 lines
1.4 KiB
lines = open("input.txt", "r").read().splitlines()
|
|
|
|
class Knots:
|
|
def __init__(self):
|
|
self.x = 0
|
|
self.y = 0
|
|
self.pos = []
|
|
|
|
def visited(self):
|
|
return len(set(self.pos))
|
|
|
|
t= Knots()
|
|
h = Knots()
|
|
|
|
def move(h, t):
|
|
if abs(h.x - t.x) <= 1 and abs(h.y - t.y) <= 1:
|
|
pass
|
|
elif abs(h.x - t.x) > 1 and abs(h.y - t.y) == 0:
|
|
if h.x > t.x:
|
|
t.x += 1
|
|
else:
|
|
t.x -= 1
|
|
elif abs(h.x - t.x) == 0 and abs(h.y - t.y) > 1:
|
|
if h.y > t.y:
|
|
t.y += 1
|
|
else:
|
|
t.y -= 1
|
|
else:
|
|
if h.x > t.x and h.y > t.y :
|
|
t.x += 1
|
|
t.y += 1
|
|
elif h.x > t.x and h.y < t.y:
|
|
t.x += 1
|
|
t.y -= 1
|
|
elif h.x < t.x and h.y < t.y:
|
|
t.x -= 1
|
|
t.y -= 1
|
|
else:
|
|
t.x -= 1
|
|
t.y += 1
|
|
t.pos.append((t.x,t.y))
|
|
|
|
|
|
t.pos.append((0,0))
|
|
for line in lines:
|
|
cmd = line.split(" ")
|
|
if cmd[0] == "R":
|
|
for i in range(int(cmd[1])):
|
|
h.x = h.x + 1
|
|
move(h, t)
|
|
if cmd[0] == "L":
|
|
for i in range(int(cmd[1])):
|
|
h.x = h.x - 1
|
|
move(h, t)
|
|
if cmd[0] == "U":
|
|
for i in range(int(cmd[1])):
|
|
h.y = h.y + 1
|
|
move(h, t)
|
|
if cmd[0] == "D":
|
|
for i in range(int(cmd[1])):
|
|
h.y = h.y - 1
|
|
move(h, t)
|
|
|
|
print(t.visited()) |