Top.Mail.Ru
Ответы

Задача на 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 перебирать символы в списке символов Алисы и добавлять их в список символов Боба согласно правилу Боба.
Соединить символы в списке символов Боба в строку и вывести ее.

12345678910111213141516171819
 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