Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.61/121: Рейтинг темы: голосов - 121, средняя оценка - 4.61
 Аватар для Semen-Semenich
5224 / 3471 / 1173
Регистрация: 21.03.2016
Сообщений: 8,298

Шифрование слова с помощью циклического сдвига на длину этого слова

21.03.2016, 23:22. Показов 23679. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно зашифровать все английские слова во введённой строке. Словом называется непрерывная последовательность английских букв, слова друга от друга отделяются любыми другими символами. Каждое слово шифруется с помощью циклического сдвига на длину этого слова. Например, если длина слова равна K , каждая буква в слове заменяется на букву, стоящую в английском алфавите на K букв дальше (алфавит считается циклическим, то есть, за буквой Z стоит буква A ). Строчные буквы при этом остаются строчными, а прописные — прописными. Символы, не являющиеся английскими буквами, не изменяются.
Примеры
входные данные
Mice are coming. "Cats" are dancing.
выходные данные
Qmgi duh iusotm. "Gexw" duh khujpun.
сам код

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
def cod():
    kod_slovo='' # задаем переменную для кодированного слова
    k=len(slovo) # получаем длину слова
    for j in slovo : # получаем буквы слова
        index=(alfavit.index(j.lower())+k)% len(alfavit) # получаем индекс для смещения буквы по длине слова
        kod_slovo+=alfavit[index].upper()  if j.isupper() else alfavit[index] # проверяем регистр исходной буквы и пишем кодированную в соотв.рег
    return kod_slovo # возвращаем кодированное слово
 
stroka=input() # получаем строку
alfavit=[chr(x) for x in range(ord('a'),ord('z')+1)] # алфавит
slovo='' ; nev_stroka='' # пустые переменные для использования
 
for i in stroka+'': # идем по строке (+' ' добавляем для отработки условия else когда последний символ буква)
    if i.lower() in alfavit : # если элемент буква (lower() приводим к нижнему регистру так как алфавит из нижнего рег)
        slovo+=i # составляем слово из букв
    else: # если элемент не буква
        if slovo: # проверяем есть ли слово
            nev_stroka+=cod() # если есть вызываем функцию кодирования слова результат пишем в новую строку
        slovo='' # очищаем слово
        nev_stroka+=i # пишем элемент в новую строку(пробелы,символы,числа,все что не является буквами)
print(nev_stroka[-1]) # вывод получившейся строки без последнего элем (+' ' что дописывал)
проходят 6 решений из 23 тут http://informatics.mccme.ru/mo... 992r5011#1
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.03.2016, 23:22
Ответы с готовыми решениями:

Зашифровать все английские слова во введённой строке с помощью сдвига на длину этого слова
Нужно зашифровать все английские слова во введённой строке. Словом, называется непрерывная последовательность английских букв, слова друга...

Алгоритм для циклического сдвига слова на N символов влево
Дана строка, содержащая текст. Зашифровать текст, циклически Help

Напишите функции для циклического сдвига слова влево и вправо
Нужно использовать SHL и SHR для сдвига? Не очень понятно как определить в какой момент нужно прекращать сдвиги?

25
 Аватар для vdm_mar
39 / 39 / 25
Регистрация: 25.10.2015
Сообщений: 102
26.03.2016, 22:31
Студворк — интернет-сервис помощи студентам
Не знаю, проверил, по той формуле цикличность сохраняется
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ...
0
 Аватар для Semen-Semenich
5224 / 3471 / 1173
Регистрация: 21.03.2016
Сообщений: 8,298
26.03.2016, 23:29  [ТС]
vdm_mar, я знаю проверял тоже при любой длине сохраняется цикличность. вроде и алгоритм правильный а вот проверку проходят только 6 тестов.
0
77 / 76 / 57
Регистрация: 07.08.2016
Сообщений: 173
07.08.2016, 23:52
Semen-Semenich, Вы так и не разобрались с этим заданием?
Вот, что смог написать. Те же 6 тестов только проходит.
Python
1
2
3
4
5
6
7
8
9
10
11
12
import re
name=input() #вводим строку
simbols=re.findall(r'[\W\d,а-я,А-Я]',name)+[''] #запомнили все символы
s=0 #счётчик слов/символов
for i in re.split(r'[\W\d,а-я,А-Я]',name): #проходим по каждому слову
    for j in i: #проходим по буквам слова
        if ('A'<=j<='Z'):
            print(chr((ord(j)+len(i)-ord('A'))%26+ord('A')),end='')
        else:
            print(chr((ord(j)+len(i)-ord('a'))%26+ord('a')),end='') 
    print(simbols[s],end='') #после слова выводим символ
    s+=1
Нашёл решение на Паскале, проходит все тесты. Принцип изменения буквы тот же. Без понятия, что не так.
Кликните здесь для просмотра всего текста
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
var s:string;
flag:boolean;
i, k,len:integer; begin
readln(s); {считали всю входную строку}
flag:=false; {признак середины слова}
for i :=1 to length (s) do
begin
{если текущий символ - буква}
if (upcase(s[i])>='A' ) and (upcase(s[i])<= 'Z')
then
if flag then {не первая буква слова}
len:=len+1 {текущая длина слова увеличилась на 1}
else    {первая буква слова}
begin
flag:=true;
len:=1  {текущая длина слова = 1}
end
else    {текущий символ — не буква}
if flag then {слово только что закончилось}
begin
flag:=false; for k:=1 to len do {перебираем все символы слова}
begin
if ((s[i-k]>='a') and (s[i-k]<='z'))
then
s[i-k]:=chr((ord(s[i-k])+len-ord('a')) mod 26 + ord('a'))
else
s[i-k]:=chr((ord(s[i-k])+len-ord('A')) mod 26 + ord('A'));
end
end
end;
writeln(s)
end.
1
 Аватар для Semen-Semenich
5224 / 3471 / 1173
Регистрация: 21.03.2016
Сообщений: 8,298
08.08.2016, 08:17  [ТС]
нет так и не решил. вот бы посмотреть хоть один вариант входной строки где дает ошибку может бы тогда и разобрался в чем проблема. а так брал вырезки из текстов шифровал и потом дешифровал в обратном порядке так все получалось а вот сайт находит ошибку
0
77 / 76 / 57
Регистрация: 07.08.2016
Сообщений: 173
19.08.2016, 19:30
В общем, решил. Я не знаю, почему так, но последнее слово, если в конце нет символов, нужно выводить без изменения. В условии об этом ни слова. Мне кажется, это ошибка их проверяющей системы.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import re
name = input()  # вводим строку
symbols = re.findall(r'[^a-zA-Z]', name)+['']  # запоминаем все символы
s = 0  # счётчик слов/символов
words = re.split(r'[^a-zA-Z]', name)  # запоминаем все слова
for i in words[:len(words)-1]:  # проходим по каждому слову, кроме последнего
    for j in i:  # проходим по буквам слова
        if ('A' <= j <= 'Z'):
            print(chr((ord(j)+len(i)-ord('A')) % 26+ord('A')), end='')
        else:
            print(chr((ord(j)+len(i)-ord('a')) % 26+ord('a')), end='')
    print(symbols[s], end='')  # после слова выводим символ
    s += 1
print(words[len(words)-1])  # выводим последнее слов без изменений
1
 Аватар для Semen-Semenich
5224 / 3471 / 1173
Регистрация: 21.03.2016
Сообщений: 8,298
19.08.2016, 20:33  [ТС]
действительно. вот и ломай голову с решением при такой постановке задачи ясно же написано 'Словом называется непрерывная последовательность английских букв, слова друга от друга отделяются любыми другими символами' то есть получается что предпоследнее слово и последнее разделены каким либо символом при этом предпоследнее считается словом а последнее нет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.08.2016, 20:33
Помогаю со студенческими работами здесь

Шифрование методом циклического сдвига
Всем привет ребят) я в с# ноль к сожалению... Суть такая, есть программа, поясните что означает каждая строчка, заранее спасибо) ...

Дано слово "АПЛОДИСМЕНТЫ" . Определить длину слова, составить из букв этого слова 5 новых слов
Дано слово &quot;АПЛОДИСМЕНТЫ&quot; . Определить длину слова, составить из букв этого слова 5 новых слов, используя функцию COPY.(плод, ладони,...

Шифрование текста методом циклического сдвига букв алфавита
помогите пожалуйста решить задачи))) Задача№1 Составить программу, которая вводит текст телеграммы и ее вид (простая или...

Шифрование данных методом гаммирования и поразрядного циклического сдвига
* Условие задачи. * * Разработать программу текстовый редактор с функциями криптозащиты данных. В ...

Шифрование и расшифрование методом гаммирования и поразрядного циклического сдвига
Добрый день! У меня не получается написать программу шифрования и расшифрования методом гаммирования и поразрядного циклического сдвига,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru