-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathWaffleChoppers.py
92 lines (76 loc) · 2.53 KB
/
WaffleChoppers.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
T = int(input())
for i in range(1, T + 1):
[R, C, H, V] = [int(i) for i in input().split()]
waffle = []
for line in range(R):
waffle.append(input())
waffle_rows = []
for row in waffle:
waffle_rows.append(row.count('@'))
waffle_cols = []
for col in range(C):
waffle_cols.append(sum([1 for line in waffle if line[col] == '@']))
n_chips = sum(waffle_cols)
if n_chips % ((H + 1) * (V + 1)) != 0:
print("Case #{}: {}".format(i, 'IMPOSSIBLE'))
continue
if n_chips == 0:
print("Case #{}: {}".format(i, 'POSSIBLE'))
continue
cum_sum_row = []
cum_sum_col = []
for row in waffle_rows:
if len(cum_sum_row) == 0:
cum_sum_row.append(row)
else:
cum_sum_row.append(row + cum_sum_row[-1])
for col in waffle_cols:
if len(cum_sum_col) == 0:
cum_sum_col.append(col)
else:
cum_sum_col.append(col + cum_sum_col[-1])
row_intervals = []
prev = 0
error = False
for border in range(n_chips // (H + 1), n_chips+1, n_chips // (H + 1)):
try:
idx = cum_sum_row.index(border)
row_intervals.append((prev, idx))
prev = idx + 1
except ValueError:
error = True
break
if error:
print("Case #{}: {}".format(i, 'IMPOSSIBLE'))
continue
col_intervals = []
prev = 0
error = False
for border in range(n_chips // (V + 1), n_chips+1, n_chips // (V + 1)):
try:
idx = cum_sum_col.index(border)
col_intervals.append((prev, idx))
prev = idx + 1
except ValueError:
error = True
break
if error:
print("Case #{}: {}".format(i, 'IMPOSSIBLE'))
continue
impossible = False
for col_int in col_intervals:
for row_int in row_intervals:
chips = 0
row_start, row_finish = row_int
col_start, col_finish = col_int
for chunk in waffle[row_start:row_finish+1]:
chips += sum([1 for cell in chunk[col_start:col_finish+1] if cell == '@'])
if chips != n_chips // ((H + 1) * (V + 1)):
impossible = True
break
if impossible:
break
if impossible:
print("Case #{}: {}".format(i, 'IMPOSSIBLE'))
continue
print("Case #{}: {}".format(i, 'POSSIBLE'))