summaryrefslogtreecommitdiff
path: root/day2.5/task2/task2.py
blob: dc89b3cfca2aa3da0e8bcf831954a7f7887dc8ff (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
from math import ceil

n = int(input('Введите размер стороны матрицы: '))
m = int(input('Введите вычисляемую строку: '))
while m < 1 or m > n:
    print('Неверный номер строки')
    m = int(input('Введите вычисляемую строку: '))

RIGHT, DOWN, LEFT, UP = range(4)

row = [0 for _ in range(n)]

current = [0, 0]
direction = RIGHT
xshift = 0
yshift = 0

for i in range(1, n ** 2 + 1):
    if current[1] == m - 1:
        row[current[0]] = i

    if direction == RIGHT:
        if current[0] + 1 >= n - ceil(xshift / 2):
            direction = DOWN
            current[1] += 1
            xshift += 1
        else:
            current[0] += 1

    elif direction == DOWN:
        if current[1] + 1 >= n - yshift // 2:
            direction = LEFT
            current[0] -= 1
            yshift += 1
        else:
            current[1] += 1

    elif direction == LEFT:
        if current[0] - 1 < 0 + xshift // 2:
            direction = UP
            current[1] -= 1
            xshift += 1
        else:
            current[0] -= 1

    elif direction == UP:
        if current[1] - 1 < 0 + ceil(yshift / 2):
            direction = RIGHT
            current[0] += 1
            yshift += 1
        else:
            current[1] -= 1

print(*row)