-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsimulate.py
126 lines (97 loc) · 2.56 KB
/
simulate.py
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
import sys
info = []
with open(sys.argv[1]) as f:
for line in f:
info.append([int(v) for v in line.strip().split(',')])
moves = []
with open(sys.argv[2]) as f:
for line in f:
moves.append([int(v) for v in line.strip().split(',')])
n = info[0][0]
timeout = info[0][1]
if len(moves) > timeout:
print("timeout violated")
board = [[0 for i in range(n)] for j in range(n)]
red_car = info[1]
red_row = red_car[0]
red_col = red_car[1]
if red_col == n-1:
print("invalid init")
sys.exit(0)
if red_col == n-2:
print("trivially sat")
sys.exit(0)
board[red_row][red_col] = 2
board[red_row][red_col+1] = 2
for car in info[2:]:
orient = car[0]
row = car[1]
col = car[2]
if orient == 0:
if row == n-1:
print("invalid init")
sys.exit(0)
if board[row][col] + board[row+1][col] != 0:
print("invalid init")
sys.exit(0)
board[row][col] = 1
board[row+1][col] = 1
elif orient == 1:
if col == n-1:
print("invalid init")
sys.exit(0)
if board[row][col] + board[row][col+1] != 0:
print("invalid init")
sys.exit(0)
board[row][col] = 2
board[row][col+1] = 2
if row == red_row and col > red_col:
print("unsat")
sys.exit(0)
else:
if board[row][col] != 0:
print("invalid init")
sys.exit(0)
board[row][col] = 3
if row == red_row and col > red_col:
print("unsat")
sys.exit(0)
print("Run starting")
for row in board:
print(row)
for i in range(len(moves)):
row = moves[i][0]
col = moves[i][1]
if board[row][col] == 0:
print("no car there, move {}".format(i))
sys.exit(0)
type = board[row][col]
if type == 1 and (row == 0 or row == n-1):
print("going out of board, move {}".format(i))
sys.exit(0)
if type == 2 and (col == 0 or col == n-1):
print("going out of board, move {}".format(i))
sys.exit(0)
if type == 1:
if board[row+1][col]*board[row-1][col] != 0:
print("collision, move {}".format(i))
sys.exit(0)
if board[row+1][col] + board[row-1][col] != board[row][col]:
print("absurd, move {}".format(i))
sys.exit(0)
board[row+1][col], board[row-1][col] = board[row-1][col], board[row+1][col]
if type == 2:
if board[row][col+1]*board[row][col-1] != 0:
print("collision, move {}".format(i))
sys.exit(0)
if board[row][col+1] + board[row][col-1] != board[row][col]:
print("absurd, move {}".format(i))
sys.exit(0)
board[row][col+1], board[row][col-1] = board[row][col-1], board[row][col+1]
if i == len(moves) -1:
print("Run completed")
for row in board:
print(row)
if board[red_row][n-1] != 2:
print("did not reach target")
sys.exit(0)