-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsolutionb.awk
71 lines (57 loc) · 961 Bytes
/
solutionb.awk
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
function sign(x) {
return x < 0 ? -1 : x > 0 ? 1 : 0
}
function max(x, y) {
return x >= y ? x : y
}
function abs(x) {
return max(x, -x)
}
function dist(i) {
return max(abs(ropex[i - 1] - ropex[i]), abs(ropey[i - 1] - ropey[i]))
}
function move_tail() {
for (k = 1; k < 10; k++) {
if (dist(k) <= 1)
return
ropex[k] += sign(ropex[k - 1] - ropex[k])
ropey[k] += sign(ropey[k - 1] - ropey[k])
visited[ropex[9], ropey[9]] = true
}
}
BEGIN {
for (i = 0; i < 10; i++) {
ropex[i] = 0
ropey[i] = 0
}
visited[0, 0] = true
}
$1 == "R" {
for (i = 0; i < $2; i++) {
ropex[0]++
move_tail()
}
}
$1 == "L" {
for (i = 0; i < $2; i++) {
ropex[0]--
move_tail()
}
}
$1 == "U" {
for (i = 0; i < $2; i++) {
ropey[0]++
move_tail()
}
}
$1 == "D" {
for (i = 0; i < $2; i++) {
ropey[0]--
move_tail()
}
}
END {
for (key in visited)
total_visited++
print total_visited
}