summaryrefslogtreecommitdiff
path: root/2010/1a/a.py
blob: 2c89c849234b445ef1c002444f284592def98531 (plain)
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
f = open('1.in', 'r')
o = open('1.out', 'w')

def cols(m):
    n = len(m)
    return [''.join([m[j][i] for j in range(n)]) for i in range(n)]

def diag(m):
    n = len(m)
    d = [zip(range(i+1) ,range(i+1)[::-1]) for i in range(n)]
    d += [zip(range(i+1, n) ,range(i+1, n)[::-1]) for i in range(n-1)]
    return [''.join([m[i][j] for (i,j) in diag]) for diag in d]
                                           
def diag_inv(m):
    n = len(m)
    d = [zip(range(i+1),range(i+1)[::-1]) for i in range(n)]
    d += [zip(range(i+1, n) ,range(i+1, n)[::-1]) for i in range(n-1)]
    return [''.join([m[n-1-i][j] for (i,j) in diag]) for diag in d]

def rotate(m):
    n = len(m)
    return [''.join([m[j][i] for j in range(n)[::-1]]) for i in range(n)]

def droprow(r):
    return '.' * r.count('.') + r.replace('.','')

def gravity(m):
    return map(droprow, m)

def winrow(r, k):
    res = 0
    if r.find('B'*k) != -1:
        res |= 1
    if r.find('R'*k) != -1:
        res |= 2
    return res

def win(m, k):
    R = ['Neither', 'Blue', 'Red', 'Both']
    win = 0
    for row in m:
        win |= winrow(row, k)
    for col in cols(m):
        win |= winrow(col, k)
    for dia in diag(m):
        win |= winrow(dia, k)
    for idia in diag_inv(m):
        win |= winrow(idia, k)
    return R[win]

t = int(f.readline().strip())

for i in range(t):
    (n, k) = map(int, f.readline().strip().split(' '))
    
    mat = [f.readline().strip() for j in range(n)]
    mat = rotate(gravity(mat))

    s = "Case #%d: %s\n" % (i+1, win(mat, k))
    print s
    o.write(s)