Шифрование данных с помощью массива

Олимпиада уже закончилась, но мне все равно интересно, как решить одну задачу.

  1. После ввода данных необходимо удалить пробелы из строки и поместить её в массив.

  2. Дальше нужно найти корень из числа, которое равно количеству символов в строке.

  3. Ближайшее к корню меньшее целое число будет являться количеством строк (каждая строка - символ), а большее ближайшее к корню целое число будет количеством столбцов в двумерном массиве.

  4. После этого, нужно транспонировать матрицу и вывести построчно

Пример:

Исходная матрица:

[ [a] [b] [c] ]
[ [d] [e] [f] ]
[ [g] [h] [x] ]

Ожидаемый вывод:

adg beh cfx

PS. Вот что получилось

import math
lines = input("Веддите даные для шифрования :")

w_massive = list(lines)

for i in w_massive:
    if i == ' ':
        w_massive.remove(i)  #Убираю пробелы

strings = len(w_massive) 


strings = math.sqrt(strings) #Корень с длины и округление к большему
strings = math.ceil(strings) 

massive = list()  #Тут должен быть ответ

for i in range(len(w_massive)):
    
    massive.append(w_massive[i])
    pass
    #Дальше не знаю как, должен как-то получится цикл внутри цикла

    введите сюда код

Ответы (1 шт):

Автор решения: slippyk

Такое нужно:

import math


def solve(s):
    s = ''.join(s.split())
    cols = math.ceil(math.sqrt(len(s)))
    return ' '.join([s[i::cols] for i in range(cols)])


print(solve('a b c d e  f   g h       x    '))  # adg beh cfx
print(solve('a b c d e f g h i j'))             # aei bfj cg dh
→ Ссылка