1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
#!/usr/bin/env python3
# import numpy as np
from functools import reduce
from re import findall
from copy import deepcopy
import sys
# filename = "ref.txt"
# filename = "ref2.txt"
filename = "pzl.txt"
data = open(filename).read()
lines = [line for line in data.rstrip('\n').split('\n')]
moves = []
for a in lines:
m = [0, 0]
direction, count = a.split(' ')
if direction == 'R':
m = [1, 0]
elif direction == 'U':
m = [0, 1]
elif direction == 'D':
m = [0, -1]
elif direction == 'L':
m = [-1, 0]
# m = [int(count)*i for i in m]
for _ in range(int(count)):
moves.append(m)
# print(moves)
res1 = 0
h = [0,0]
t = [0,0]
visited = set()
visited.add(tuple(t))
for m in moves:
h = [hi + mi for hi,mi in zip(h,m)]
dx = h[0] - t[0]
dy = h[1] - t[1]
if abs(dx) > 1 or (abs(dx) > 0 and abs(dy) > 1):
t[0] += dx//abs(dx)
if abs(dy) > 1 or (abs(dy) > 0 and abs(dx) > 1):
t[1] += dy//abs(dy)
visited.add(tuple(t))
res2 = 0
ht = [[0,0] for i in range(10)]
visited9 = set()
visited9.add(tuple(ht[9]))
for m in moves:
ht[0] = [hi + mi for hi,mi in zip(ht[0],m)]
for i,_ in enumerate(ht):
if i == 0:
continue
dx = ht[i-1][0] - ht[i][0]
dy = ht[i-1][1] - ht[i][1]
if abs(dx) > 1 or (abs(dx) > 0 and abs(dy) > 1):
ht[i][0] += dx//abs(dx)
if abs(dy) > 1 or (abs(dy) > 0 and abs(dx) > 1):
ht[i][1] += dy//abs(dy)
# print(ht)
visited9.add(tuple(ht[9]))
# print(visited9)
res1 = len(visited)
res2 = len(visited9)
print('res1:', res1)
print('res2:', res2)
|