Cod sursa(job #2782266)

Utilizator Claus1911Zabava Claudiu Claus1911 Data 11 octombrie 2021 23:47:49
Problema Rj Scor 0
Compilator py Status done
Runda Arhiva de probleme Marime 3.52 kb
import sys
import re

director=sys.argv[1] if len(sys.argv)>1 else "rj.in"
director2=sys.argv[2] if len(sys.argv)>1 else "rj.out"
a=[]

with open(director, "r") as f:
    mc = f.readline().rstrip('\n')
    mc = re.split('\W+', mc)
    n = int(mc[0])
    mm = int(mc[1])
    m = n
    while m:
        l = []
        mc = f.readline().rstrip('\n')
        for i in mc:
            if i == 'X':
                l.append(-1)
            elif i == ' ':
                l.append(0)
            elif i == 'R':
                rx = n - m + 1
                ry = len(l) + 1
                l.append(0)
            elif i == 'J':
                jx = n - m + 1
                jy = len(l) + 1
                l.append(0)
        a.append(l)
        m -= 1

dx = [-1, 1, 1, -1, 0, 1, 0, -1]
dy = [-1, -1, 1, 1, -1, 0, 1, 0]
x = []
y = []
mi = 99999
a[rx - 1][ry - 1] = 1
x.append(rx)
y.append(ry)


def bf_lee():
    global mi
    p = u = 1
    while p <= u:
        i = x[p - 1]
        j = y[p - 1]
        ok = 0
        for k in range(8):
            ii = i + dx[k]
            jj = j + dy[k]
            if ii > 0 and ii <= n and jj > 0 and jj <= mm and a[ii - 1][jj - 1] == 0:
                ok = 1
                u += 1
                x.append(ii)
                y.append(jj)
                a[ii - 1][jj - 1] = a[i - 1][j - 1] + 1
                if ii == jx and jj == jy:
                    if a[ii - 1][jj - 1] > 0 and a[ii - 1][jj - 1] < mi:
                        mi = a[ii - 1][jj - 1]
                        return 0
        p += 1


bf_lee()

fin = list()
finn = list()
def traseu(i,j):
    global fin,finn
    if i == rx and j == ry:
        fin.reverse()
        finn=fin.copy()
        return 1
    else:
        if i-1 >0 and a[i-2][j-1] == a[i-1][j-1]-1:
            tt = i-1, j
            fin.append(tt)
            traseu(i-1,j)
            fin.pop()
        elif j-1 > 0 and a[i-1][j-2] == a[i-1][j-1]-1:
            tt = i , j - 1
            fin.append(tt)
            traseu(i,j-1)
            fin.pop()
        elif i < n and a[i][j-1] == a[i-1][j-1]-1:
            tt = i + 1, j
            fin.append(tt)
            traseu(i+1,j)
            fin.pop()
        elif j<mm and a[i-1][j] == a[i-1][j-1]-1:
            tt = i , j + 1
            fin.append(tt)
            traseu(i,j+1)
            fin.pop()
        elif i-1 >0 and j<mm and a[i-2][j] == a[i-1][j-1]-1:
            tt = i - 1, j + 1
            fin.append(tt)
            traseu(i-1,j+1)
            fin.pop()
        elif i-1 >0 and j-1 > 0 and a[i-2][j-2] == a[i-1][j-1]-1:
            tt = i - 1, j - 1
            fin.append(tt)
            traseu(i-1,j-1)
            fin.pop()
        elif i <n and j<mm and a[i][j] == a[i-1][j-1]-1:
            tt = i + 1, j + 1
            fin.append(tt)
            traseu(i+1,j+1)
            fin.pop()
        elif i < n and j-1 > 0 and a[i][j-2] == a[i-1][j-1]-1:
            tt = i + 1, j - 1
            fin.append(tt)
            traseu(i+1,j-1)
            fin.pop()
        else:
            print("Nu exista")
            return 0
traseu(jx,jy)
tt=jx, jy
finn.append(tt)
with open(director2, "w") as g:
    if len(finn) % 2 != 0:
        k1 = (len(finn) // 2) + 1
        k2 = finn[k1 - 1][0]
        k3 = finn[k1 - 1][1]
        g.write(str(k1) + " " + str(k2) + " " + str(k3))
    else:
        k1 = (len(finn) // 2)
        k2 = finn[k1][0]
        k3 = finn[k1][1]
        g.write(str(k1) + " " + str(k2) + " " + str(k3))