Компания по защите интеллектуальной собственности решила повысить уровень защищенности своих операционных систем путем шифрования всех сообщений, передаваемых внутри ее локальных сетей. Любое допустимое в компании сообщение представляет собой строку S = s1s2…sn (1 n 255). Шифрование сообщения осуществляется в K фаз (1 K 100), K задаётся с клавиатуры. На каждой фазе строка S заменяется строкой, в которой сначала располагаются все буквы строки S (первый блок), стоящие на позициях с номерами, делящимися на 2, 3, или 5, а затем – все остальные буквы (второй блок). Относительный порядок букв в каждом из двух блоков остается неизменным. Например, строка S = ‘abcdefgh’ на первой фазе шифруется в строку S = ‘bcdefhag’. Если осуществляется вторая фаза шифрования, то строка S примет вид S = ‘cdefhgba’ и т. д. Напишите программу, осуществляющую шифрование строки S.
Входные данные
Натуральное число k – количество фаз шифрования.
Строка, которую надо зашифровать.
Выходные данные
Программа выводит зашифрованную строку.
Пример
Входные данные
3
Хлеб – всему голова.
Выходные данные
б –вегл. алсвоеуХ ом
Python
Шифрование строки. Python
Этот алгоритм вообще обратим? Или тут, как в анекдоте:
-- А расшифровывать потом как?
-- А такой задачи не стояло.
Как-то так можно, по крайней мере, на приведённых данных работает:
P.S. Два примера ниже написаны не на Питоне, а на Паскале, хотя и в питоновом синтаксисе. Но даже и в стиле Паскаля они написаны так, что старик Вирт в свой 89-й день рождения (т.е. сегодня), наверное, беспрерывно икает: "Вы что там творите, черти, разве я вас этому учил?"
-- А расшифровывать потом как?
-- А такой задачи не стояло.
Как-то так можно, по крайней мере, на приведённых данных работает:
rounds = int(input())
message = input()
followers = { 0 } | { i - 1 for i in range(7, len(message)) if (i % 2) and (i % 3) and (i % 5) }
leaders = sorted(set(range(1, len(message))) - followers)
followers = sorted(followers)
mess = message
for r in range(rounds):
mess = "".join([mess[i] for i in leaders] + [mess[i] for i in followers])
print(mess)
P.S. Два примера ниже написаны не на Питоне, а на Паскале, хотя и в питоновом синтаксисе. Но даже и в стиле Паскаля они написаны так, что старик Вирт в свой 89-й день рождения (т.е. сегодня), наверное, беспрерывно икает: "Вы что там творите, черти, разве я вас этому учил?"
def encrypt(k, s):
result = s
for x in range(k):
left, right = [], []
for i in range(len(result)):
j = i + 1
if j % 2 == 0 or j % 3 == 0 or j % 5 == 0:
left += [result[i]]
else:
right += [result[i]]
result = ''.join(left + right)
return result
print(encrypt(int(input()), input()))
3
Хлеб – всему голова.
б –вегл. алсвоеуХ ом
phases, message = int(input()), input()
for _ in range(phases):
block1, block2 = "", ""
for j in range(len(message)):
if (j+1) % 2 == 0 or (j+1) % 3 == 0 or (j+1) % 5 == 0:
block1 += message[j]
else:
block2 += message[j]
message = block1 + block2
print(message)
Похожие вопросы
- Python: как в файле json найти строки по заданному тексту и скопировать рядом стоящую строку
- Помогите со строками в python
- Окончил курсы на степике по Python что делать дальше?
- Python программирование. Помогите написать программу.
- Нейронные сети на Python 3.4
- Работа со списками Python. В одну строку.
- Помогите, как сделать авторизацию в программе на python?
- Что писать на Python?
- Есть ли смысл изучать python
- Подскажите ресурс\книги с примерами по высшей математике и их решений на языке Python
Ну чем я не прорицатель?