berserk_rook   A
last analyzed

Complexity

Total Complexity 17

Size/Duplication

Total Lines 57
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 49
dl 0
loc 57
rs 10
c 0
b 0
f 0
wmc 17

2 Functions

Rating   Name   Duplication   Size   Complexity  
F find_connect_rook() 0 32 15
A berserk_rook() 0 8 2
1
def find_connect_rook(berserker, enemies):
2
    col, row = list(berserker)
3
    result = []
4
    # same row
5
    bigger = True
6
    smaller = True
7
    for i in range(8):
8
        if bigger and int(row) + i <= 8:
9
            pseudo_enemy = col + str(int(row) + i)
10
            if pseudo_enemy in enemies:
11
                result.append(pseudo_enemy)
12
                bigger = False
13
        if smaller and int(row) - i >= 1:
14
            pseudo_enemy = col + str(int(row) - i)
15
            if pseudo_enemy in enemies:
16
                result.append(pseudo_enemy)
17
                smaller = False
18
    # same col
19
    bigger = True
20
    smaller = True
21
    for i in range(8):
22
        if bigger and chr(ord(col) + i) <= 'h':
23
            pseudo_enemy = chr(ord(col) + i) + row
24
            if pseudo_enemy in enemies:
25
                result.append(pseudo_enemy)
26
                bigger = False
27
        if smaller and chr(ord(col) - i) >= 'a':
28
            pseudo_enemy = chr(ord(col) - i) + row
29
            if pseudo_enemy in enemies:
30
                result.append(pseudo_enemy)
31
                smaller = False
32
    return result
33
34
35
def berserk_rook(berserker, enemies):
36
    connected_enemies = find_connect_rook(berserker, enemies)
37
    if not connected_enemies:
38
        return 0
39
    new_status = [(i, [j for j in enemies if j != i]) for i in connected_enemies]
40
    aaa = [berserk_rook(*i) for i in new_status]
41
    result = max(aaa)
42
    return 1 + result
43
44
45
if __name__ == '__main__':
46
    # These "asserts" using only for self-checking and not necessary for
47
    # auto-testing
48
    assert (
49
        berserk_rook(u'd3', {u'd6', u'b6', u'c8', u'g4', u'b8', u'g6'}) == 5
50
    ), "one path"
51
    assert (
52
        berserk_rook(u'a2', {u'f6', u'f2', u'a6', u'f8', u'h8', u'h6'}) == 6
53
    ), "several paths"
54
    assert (
55
        berserk_rook(u'a2', {u'f6', u'f8', u'f2', u'a6', u'h6'}) == 4
56
    ), "Don't jump through"
57