Форум сайта python.su
Шифровка
Стало известно, что противник шифрует текст следующим образом. Сначала определяется количество букв в самом длинном слове, его длину обозначим k (словом называется непрерывная последовательность английских букв, слова друг от друга отделяются любыми другими символами, длина слова не превышает 20 символов). Затем каждая английская буква заменяется на букву, стоящую в алфавите на k букв позже (алфавит считается циклическим, то есть после буквы Z стоит буква A). Другие символы остаются неизменными. Строчные буквы при этом остаются строчными, а заглавные — заглавными. Расшифруйте найденную шифровку.
Входные данные
На вход программе подается текст шифровки, состоящей не более чем из 250 символов.
Выходные данные
Выведите исходный текст.
Примеры
Ввод
a a a a a a a a a a a a a a a a a a a a a aa a a a a a a a a a a a a amama a a a aa a a a a a a a a a a a a a a a a a a aa a a a aa a a a a aa aa a aa a a a a a a a a a aa a a a a a a a a a a a a a a a aa a a a a a a a a a a a a a a a a a a a a a a a .
Вывод
f f f f f f f f f f f f f f f f f f f f f ff f f f f f f f f f f f f frfrf f f f ff f f f f f f f f f f f f f f f f f f ff f f f ff f f f f ff ff f ff f f f f f f f f f ff f f f f f f f f f f f f f f f ff f f f f f f f f f f f f f f f f f f f f f f f .
Ввод
Zb Ra Ca Dab Ra.
Вывод
Ce Ud Fd Gde Ud.
Моя попытка решить
import re def shift(k): def closure(c): if c.isupper(): return chr((ord(c) - ord("A") + k) % 26 + ord("A")) elif c.islower(): return chr((ord(c) - ord("a") + k) % 26 + ord("a")) else: return c return closure def decode(s, k): return "".join(map(shift(k), s)) def main(): s = input() words = re.split(r"\W", s) k = max(map(len, words)) print(decode(s, k)) if __name__ == "__main__": main()
Офлайн
>>> def get_shift_size(text): ... maxwordlen = wordlen = 0 ... for ch in text: ... if ch.isalpha(): ... wordlen += 1 ... else: ... if wordlen > maxwordlen: ... maxwordlen = wordlen ... wordlen = 0 ... if wordlen > maxwordlen: ... maxwordlen = wordlen ... out = maxwordlen ... return out ... >>> def translate(text, shift_size): ... chars = [] ... for ch in text: ... if ch.isalpha(): ... newch = translate_char(ch, shift_size) ... else: ... newch = ch ... chars.append(newch) ... out = ''.join(chars) ... return out ... >>> def translate_char(ch, shift_size): ... out = None ... alpha_upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' ... alpha_lower = 'abcdefghijklmnopqrstuvwxyz' ... if ch.isupper(): ... out = alpha_upper[(alpha_upper.index(ch) + shift_size) % 26] ... elif ch.islower(): ... out = alpha_lower[(alpha_lower.index(ch) + shift_size) % 26] ... return out ... >>> def process_all(): ... text = input() ... shift_size = get_shift_size(text) ... out = translate(text, shift_size) ... print(out) ... >>> process_all() a a a a a a a a a a a a a a a a a a a a a aa a a a a a a a a a a a a amama a a a aa a a a a a a a a a a a a a a a a a a aa a a a aa a a a a aa aa a aa a a a a a a a a a aa a a a a a a a a a a a a a a a aa a a a a a a a a a a a a a a a a a a a a a a a . f f f f f f f f f f f f f f f f f f f f f ff f f f f f f f f f f f f frfrf f f f ff f f f f f f f f f f f f f f f f f f ff f f f ff f f f f ff ff f ff f f f f f f f f f ff f f f f f f f f f f f f f f f ff f f f f f f f f f f f f f f f f f f f f f f f . >>> process_all() Zb Ra Ca Dab Ra. Ce Ud Fd Gde Ud. >>>
Офлайн