import re
cases = (
    "COXXXXXOXXXXXXOXXXXXXXOXXXXXOOXXXXXXXOXXXXXXXXOXXOXXXXXXXOXXXXXXOXOXXXXXXXOXXXXXXXOXXXXXXOXXXOOXXXXOXXXXXXXOXXXXXXOXXXXXXOXXXXXXOXXXXXXXOXXXXXOXXXXXXXOXXXXXOXOXXXXOXXOXXXXXXXXOOXXXXXXXXOXXXXXXXOXXXXXXXOXXXXXXXOXXXXXXOXXXXOXXXXXXXOXXXXXOXXXXXXXXOXXXXXXXOXXXXXOXXXXXXXXOXXXXXXXXOXXXXXXXXOOXXXXXXOXXXXXOXXXOXXXXXOXXXXXXOXXXXXXOXXXXXXXOXXXXXXXXOXXXXXXXOXXXXXXXXOXXXXXXOXOXXXXOXXXXXXOXXXXXOXXXXXXXOXXXXXOXXXOXXXXXOXXXXXOXXXXXXXOXXXXXXXOOXXXXXXOXXXXXXXOXXXXXXOXXXXXXXOXXXXXOXXXXXXOXXXXXXOXXXXXXXOXXXXXXXXOXXXXXOXXXXXXOXXXXXXOXXXXXXXXOXXXXXXXOXOXXXXXXXOXXXXXXXOOXXXXXOXXXXXXXOXXXXXXXXOXXXXXXXOXXXXXXOXXXXXXXOXXXXXXXXOXXXXXXXXOXXOXXXXXXXXOXXXXXOXXXXXXXXOXXXXXXXOXXXXXXXXO",
)

answers = (0, 0, 0, 2, 2, 0, 15, 0, 2, 14, 4, 15, 5, 10, 7, 11)

def next_pos(st, pos):
    ps = []
    n = len(st)
    i = pos + 1
    while i < n and st[i] == '.':
        i += 1
    if i < len(st) and st[i] in 'OX':
        i += 1
    while i < n and st[i] == '.':
        # ps.append(i)
        i += 1
    if st[i - 1] == '.':
        ps.append(i - 1)
    if i < n and st[i] == 'X':
        ps.append(i)
    j = pos - 1
    while j >= 0 and st[j] == '.':
        j -= 1
    if j >= 0 and st[j] in 'OX':
        j -= 1
    while j >= 0 and st[j] == '.':
        # ps.append(j)
        j -= 1
    if st[j + 1] == '.':
        ps.append(j + 1)
    if j >= 0 and st[j] == 'X':
        ps.append(j)
    return ps
    
def cannon_attack(st, pos=0):
    
    st = '.' + st[1:]
    print(re.split(r"(O+)", st))
    i = st.find('OO')
    if i != -1:
        st = st[:i]
    print(i)
    q = [(st, 0)]
    visited = set([st])
    max_pos = 0
    print("init :", st)
    while len(q) > 0:
        s, _p = q.pop(0)
        max_pos = max(max_pos, _p)
        ps = next_pos(s, _p)
        for p in ps:
            ns = s[:p] + '.' + s[p + 1:]
            if not ns in visited:
                visited.add(ns)
                q.append((ns, p))
    print(max_pos)
    return max_pos
    


for st in cases:
    cannon_attack(st)

    

Embed on website

To embed this program on your website, copy the following code and paste it into your website's HTML: