Задача на python
Задача 1.3. Две строки
[Строки; структуры данных]
У Алисы и Боба есть секретная информация, которая записана в виде строки
s. Чтобы сохранить секрет, Алиса сделала перестановку символов в строке по следующему правилу. Она записала все символы строки по кругу, потом записала в ответ первый символ и далее стала выписывать символы из кольца через два.
изображение:
https://disk.yandex.ru/i/JDRugrdYoBih_Q
Рассмотрим пример. Пусть секретная строка — "AliceLovesBob". Алиса запишет эту строку, как показано на рисунке. Далее она выпишет первую букву строки "A", пропустит два следующих символа, напишет букву "c", пропустит еще два символа, напишет букву "o" и так далее по кругу. В результате у нее будет записана строка "AcosbiLeolevB". Номера на рисунке слева соответствуют последовательности перечисления букв Алисой.
Боб шифрует эту же строку таким же алгоритмом, однако, в отличие от Алисы, он пропускает по четыре буквы, а не по две. Номера на рисунке справа соответствуют последовательности перечисления букв Бобом. Таким образом Боб получит строку "ALBivbeslooce".
Боб был небрежен и потерял зашифрованную строку, однако, у него есть строка, зашифрованная Алисой. Напишете программу, которая по зашифрованной строке Алисы найдет зашифрованную строку Боба.
Формат входных данных
На вход подается одна непустая строка — шифр Алисы. Строка состоит только из строчных и заглавных символов латиницы. Длина строки не превосходит 1000 и не кратна трем и пяти.
Формат выходных данных
Выведите одну строку — шифр Боба.
Методика проверки
Программа проверяется на 15 тестах. Прохождение каждого теста оценивается в 1 балл. Тест из условия задачи при проверке не используется.
Sample Input:
AcosbiLeolevB
Sample Output:
ALBivbeslooce
Для решения задачи необходимо выполнить следующие шаги:
Создать переменную-счетчик, которая будет хранить текущий индекс символа в исходной строке.
Создать два списка: первый для символов, которые нужно взять из исходной строки согласно правилу Алисы, второй - согласно правилу Боба.
Создать две переменные-счетчика, которые будут хранить текущий индекс символа в списках символов Алисы и Боба соответственно.
В цикле while перебирать символы в исходной строке и добавлять их в соответствующий список согласно правилу Алисы.
В цикле while перебирать символы в списке символов Алисы и добавлять их в список символов Боба согласно правилу Боба.
Соединить символы в списке символов Боба в строку и вывести ее.
s = input() # ввод исходной строки
n = len(s) # длина строки
i = 0 # счетчик индекса символа в исходной строке
alice = [] # список символов, которые нужно взять из исходной строки согласно правилу Алисы
bob = [] # список символов, которые нужно взять из исходной строки согласно правилу Боба
alice_i = 0 # счетчик индекса символа в списке символов Алисы
bob_i = 0 # счетчик индекса символа в списке символов Боба
while i < n:
alice.append(s[i])
i += 2
while alice_i < len(alice):
bob.append(alice[alice_i])
alice_i += 1
bob_i += 4
if bob_i >= len(alice):
bob_i -= len(alice)
bob_str = ''.join(bob)
print(bob_str)
Сам не понял как, но работает
def decode(alices_string):
first_list = ['' for i in range(len(alices_string))]
index = 0
for i in range(len(alices_string)):
first_list[index] = alices_string[i]
index += 3
index %= len(alices_string)
first_string = ''.join(first_list)
bobs_list = ['' for i in range(len(first_string))]
index = 0
for i in range(len(first_string)):
bobs_list[i] = first_string[index]
index += 5
index %= len(first_string)
bobs_string = ''.join(bobs_list)
return bobs_string