1

Тема: Проблема з завданням.

Прихований текст

Напишите программу, на вход которой подаётся прямоугольная матрица в виде последовательности строк, заканчивающихся строкой, содержащей только строку "end" (без кавычек)

Программа должна вывести матрицу того же размера, у которой каждый элемент в позиции i, j равен сумме элементов первой матрицы на позициях (i-1, j), (i+1, j), (i, j-1), (i, j+1). У крайних символов соседний элемент находится с противоположной стороны матрицы.

В случае одной строки/столбца элемент сам себе является соседом по соответствующему направлению.

УВАГА ГВНКОД !

На локальній машині все спрацьовує . А ось здати тест не вдається.

Прихований текст
import re
a=[]
while True:
    s=input()
    if s=='end': break
    row=[]
    for t in re.findall('-?[0-9]+', s):
        row.append(int(t))
    a.append(row)
x=len(a)
b = []

for i in range(1,x+1):
            
        y = len(a[i-1])
        for j in range(1,y+1):
                if x == 1:
                        x3=(a[i-1][j-1])
                        x4=x3
                        if y ==1:
                                s = a[i-1][j-1] *4
                                print (s)
                        else:
                                if j == 1:
                                        x1=(a[i-1][y-1])
                                        x2= (a[i-1][j])
                                elif j==(y):
                                        x1=(a[i-1][j-2])
                                        x2= (a[i-1][1])
                                else:
                                        x1=(a[i-1][j-2])
                                        x2= (a[i-1][j])
                                s = x1+x2+x3+x4
                                print (s)
                elif x!=1:
                        if (i == 1):
                                if j == 1:
                                        x1=(a[i-1][y-1])
                                        x2= (a[i-1][j])
                                elif j==(y):
                                        x1=(a[i-1][j-2])
                                        x2= (a[i-1][0])
                                else:
                                        x1=(a[i-1][j-2])
                                        x2= (a[i-1][j])
                                x3= a[x-1][j-1]
                                x4= (a[i][j-1])
                                
                        elif i==(x):
                                if j == 1:
                                        x1=(a[i-1][y-1])
                                        x2= (a[i-1][j])
                                elif j==(y):
                                        x1=(a[i-1][j-2])
                                        x2= (a[i-1][0])
                                else:
                                        x1=(a[i-1][j-2])
                                        x2= (a[i-1][j])
                                x3=(a[i-2][j-1])
                                x4= (a[0][j-1])
                                
                        else:
                                if j == 1:
                                        x1=(a[i-1][y-1])
                                        x2= (a[i-1][j])
                                elif j==(y):
                                        x1=(a[i-1][j-2])
                                        x2= (a[i-1][0])
                                else:
                                        x1=(a[i-1][j-2])
                                        x2= (a[i-1][j])
                                x3=(a[i-2][j-1])
                                x4= (a[x-1][j-1])
                                
                        s = x1+x2+x3+x4
                        b.append(s)
zzz=0
for k in range(0,x):
    for m in range(0,y):
       print (b[zzz], end=' ') 
       zzz=zzz+1
    print ('\t')

2

Re: Проблема з завданням.

ап

3 Востаннє редагувалося Singularity (30.11.2014 10:27:23)

Re: Проблема з завданням.

http://i.imgur.com/BQjtYxq.png
От скажи мені як рахувати матрицю по цих 4 підкреслених числах?

4

Re: Проблема з завданням.

Singularity написав:

http://i.imgur.com/BQjtYxq.png
От скажи мені як рахувати матрицю по цих 4 підкреслених числах?

От елемент один у наступній матриці буде рівний суммі двох сусідніх в рядок і стовчик . І так для кожного елементу .

5

Re: Проблема з завданням.

тобто на місці 1 буде 2+4+4+7 ?

Прихований текст
g= [
        [1,2,3],
        [4,5,6],
        [7,8,9]
        ]
def norm_(var, max_value):
    return  var-1 if var-1 >=0 else var-1 + max_value
def norm(var, max_value):
    return  var+1 if var+1 <max_value else var+1 - max_value

def func(matrix):
    "(i-1, j), (i+1, j), (i, j-1), (i, j+1"
    i_ = len(matrix[0])
    j_ = len(matrix)
    matrix_res = []
    for j in range(j_):
        row = []
        for i in range(i_):
            acc = matrix[j][norm(i, i_)]
            acc = matrix[j][norm(i, i_)]
            acc += matrix[j][norm_(i, i_)]


            acc += matrix[norm_(j, j_)][i]
            acc += matrix[norm(j, j_)][i]

            row.append(acc)
        matrix_res.append(row)
    return matrix_res
print(g)
print(func(g))

# >
# [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
# [[16, 17, 18], [19, 20, 21], [22, 23, 24]]
Подякували: Blast1

6

Re: Проблема з завданням.

Singularity написав:

тобто на місці 1 буде 2+4+4+7 ?

Прихований текст
g= [
        [1,2,3],
        [4,5,6],
        [7,8,9]
        ]
def norm_(var, max_value):
    return  var-1 if var-1 >=0 else var-1 + max_value
def norm(var, max_value):
    return  var+1 if var+1 <max_value else var+1 - max_value

def func(matrix):
    "(i-1, j), (i+1, j), (i, j-1), (i, j+1"
    i_ = len(matrix[0])
    j_ = len(matrix)
    matrix_res = []
    for j in range(j_):
        row = []
        for i in range(i_):
            acc = matrix[j][norm(i, i_)]
            acc = matrix[j][norm(i, i_)]
            acc += matrix[j][norm_(i, i_)]


            acc += matrix[norm_(j, j_)][i]
            acc += matrix[norm(j, j_)][i]

            row.append(acc)
        matrix_res.append(row)
    return matrix_res
print(g)
print(func(g))

# >
# [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
# [[16, 17, 18], [19, 20, 21], [22, 23, 24]]

Ще таке запитання Як вивести в вигляді прямокутної матриці.

7

Re: Проблема з завданням.

g= [
        [1,2,3],
        [4,5,6],
        [7,8,9]
        ]
def print_matrix(matrix):
    for row in matrix:
        print(', '.join(map(str, row)))


print_matrix(g)


1, 2, 3
4, 5, 6
7, 8, 9
Подякували: Blast1