заполнить матрицу по диагоналям Python
У меня есть матрица, которая подстраивает свой размер под длину фразы (n x n, n>=5). Теперь эту фразу нужно внести в матрицу по диагоналям параллельной главной, пустые элементы занимаются знаком -
Например вводим мы в матрицу 5x5 "привет, мир", в матрице должно получиться так:
| р | в | р | п | |
|---|---|---|---|---|
| - | - | , | е | и |
| - | - | - | м | т |
| - | - | - | - | и |
| - | - | - | - | - |
[р, ,в,р,п]
[-,-,',е,и]
[-,-,-,м,т]
[-,-,-,-,и]
[-,-,-,-,-]
Как мне это сделать. Вот мой код, тут ищется n
text = input()
len = len(text) #Вводим текст
j = 0
for i in range(len): #высчитываем размер таблицы
j=i*i
print(j)
if len <= j:
n = i
if n < 5:
n=5
print(n)
break
Ответы (1 шт):
Автор решения: GrAnd
→ Ссылка
У меня получился такой вариант.
import math
txt = "привет, мир"
# вычисляем минимальный размер матрицы n на n которая вместит текст
n = math.ceil(math.sqrt(len(txt)))
# минимальная - 5 на 5
n = 5 if n < 5 else n
# инициализируем матрицу
matrix = [['-']*n for _ in range(n)]
# преобразуем текст в стек чтобы удобнее было доставать посимвольно
txt_seq = list(txt[::-1])
# заполняем матрицу
try:
for s in range(n-1, -n, -1):
for i in range(0, n-s):
if 0 <= s+i < n and 0 <= i < n:
matrix[i][s+i] = txt_seq.pop()
except IndexError: # сюда проваливаемся если досрочно кончился текст
pass
print('\n'.join(map(str, matrix)))
Напечатает:
['р', ',', 'в', 'р', 'п']
['-', '-', ' ', 'е', 'и']
['-', '-', '-', 'м', 'т']
['-', '-', '-', '-', 'и']
['-', '-', '-', '-', '-']