Шифрование данных с помощью массива
Олимпиада уже закончилась, но мне все равно интересно, как решить одну задачу.
После ввода данных необходимо удалить пробелы из строки и поместить её в массив.
Дальше нужно найти корень из числа, которое равно количеству символов в строке.
Ближайшее к корню меньшее целое число будет являться количеством строк (каждая строка - символ), а большее ближайшее к корню целое число будет количеством столбцов в двумерном массиве.
После этого, нужно транспонировать матрицу и вывести построчно
Пример:
Исходная матрица:
[ [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