Напишите программу, которая будет быстро и правильно производить конвертацию пароля - Pascal ABC
Формулировка задачи:
4.
Ох уж эти ученые...
Имя входного файла input.txt
Имя выходного файла output.txt
Максимальное время работы на одном тесте 2 секунды
Ограничение по памяти 64 МБ
"...Британские ученые выяснили, что чаще всего взламывают пароли, содержащие группы одинаковых подряд идущих символов, пробелы и звездочки, и гораздо реже пароли, содержащие многоточия..."
Услышав эту новость, Вася крепко задумался: почти все его пароли попадают в группу риска!!! Для того чтобы исправить ситуацию, он решил конвертировать все свои пароли по следующему правилу: от группы одинаковых символов оставить один, два и более пробелов заменить на знак подчёркивания, а две и более звездочки — на многоточие. Напишите программу, которая будет быстро и правильно производить конвертацию пароля.
Формат входных данных:
Задан пароль — непустая строка длиной до 100 000 символов, которая может состоять из строчных букв латинского алфавита, пробелов и символов '*'. Формат выходных данных: Выведите пароль, полученный после конвертации.Пример
input.txt output.txt
abcd abcd
aaabbc** abc...
Буду очень благодарен
Решение задачи: «Напишите программу, которая будет быстро и правильно производить конвертацию пароля»
textual
Листинг программы
Function ConvertPass(S : String) : String; Var k : Integer; ss : String; Begin If Length(S)>1 then If S[1]=S[2] then Begin k:=3; While (k<=Length(S)) and (S[k]=S[1]) do Inc(k); Case S[1] of ' ' : ss:='_'; '*' : ss:='...'; else ss:=S[1] end; ConvertPass:=ss+ConvertPass(Copy(S,k,Length(S))); end else ConvertPass:=S[1]+ConvertPass(Copy(S,2,Length(S)-1)) else ConvertPass:=S; end; Begin Writeln(ConvertPass('aaabbc** c****bbba11111')); { abc..._c...ba1 } end.
Объяснение кода листинга программы
- В функции ConvertPass объявлены две переменные: k и ss. Переменная k инициализируется значением 3, а переменная ss инициализируется пустой строкой.
- Если длина входной строки S больше 1, то выполняется проверка: если первый и второй символы строки S равны, то переменная k устанавливается равной 3, и затем выполняется цикл While, который продолжается до тех пор, пока k меньше или равно длине строки S и символы S[k] равны символу S[1].
- В зависимости от символа S[1], в переменную ss записывается соответствующий символ: ' ' - подчеркивание '_', '' - многоточие '...'. Если символ не равен ' ' или '', то он просто добавляется в переменную ss.
- После выполнения цикла, функция ConvertPass вызывает саму себя, передавая в качестве аргумента подстроку S, начиная с позиции k и заканчивая концом строки S.
- Если после выполнения всех проверок и циклов переменная k осталась равной 3, то в функцию ConvertPass передается подстрока S, начиная с позиции k и заканчивая концом строки S. В противном случае, в функцию передается подстрока S, начиная с позиции 2 и заканчивая концом строки S.
- В теле функции Begin-End находится основной блок кода программы. В этом блоке выполняется вывод на экран результата работы функции ConvertPass, который вычисляется как конкатенация символа ss и результата вызова функции ConvertPass для подстроки S, начиная с позиции k.
- В конце программы выполняется вывод на экран строки 'abc..._c...ba1'.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д