Некоторый алгоритм из одной цепочки символов получает новую цепочку следующим образом. Сначала вычисляется длина ис- ходной цепочки символов; если она нечётна, то дублируется средний символ цепочки символов, а если чётна, то в середину цепочки добавляется буква А. В полученной цепочке символов каждая буква заменяется буквой, следующей за ней в русском алфавите (А - на Б, Б - на В и т. д., а - на А). Получившая- ся таким образом цепочка является результатом работы алгоритма. Например, если исходной была цепочкот, то результатом рабо- ты алгоритма будет цепочка ЛППУ, если исходной была цепоч- ка ВАНЯ, то результатом работы алгоритма будет цепочка ТГБОА. Дана цепочка символов САН. Какая цепочка символов получится, если к данной цепочке применить описанный алгоритм дважды (т. е. применить алгоритм к данной цепочке, затем к результату вновь при- алфавит: Русский алгоритм)? менить
Принцип работы рекурсивный
Объяснение:
# В комментариях я использовал слово итерация в значении запуска новой функции с данными spos/ppos большими на 1 (аналогично с циклом for
# Ввод данных
s = input("Слово: ")
p = input("Шаблон: ")
# match возвращает True, если подстрока s, начинающаяся с позиции spos,
# соответствует шаблону (подстрока p, которая начинается
# с позиции ppos)
def match(spos, ppos):
if (spos == len(s)) or (ppos == len(p)):
return (spos == len(s) and ppos == len(p)) #когда все символы слова либо шаблона пройдены возвращается True, если и шаблон и слово пройдены полностью, в другом случае возвращается False
elif p[ppos] == '?':
return match(spos + 1, ppos + 1) #когда встречается ? начинается новая итерация
elif p[ppos] == '*': #проверка если подстрока - *
for i in range(spos, len(s)): #обход всех оставшихся символов слова
if match(i, ppos + 1):
return True #если дочерняя функция (вызванная выше) выдала True, цикл for заканчивается до выдавая True
else: #выполняется когда не встретилось */?
return (s[spos] == p[ppos]) and (match(spos + 1, ppos + 1))# проверка на равентсво соответствующих (по индексу) символов слова и шаблона и запуск новой функции (итерации)
if match(0, 0):
print('YES') #если результат функции True в консоль выводится 'YES', иначе 'NO'
else:
print('NO')
Поделитесь своими знаниями, ответьте на вопрос:
Спектакль начинается в а часов b минут и заканчивается в c часов d минут (в те же сутки определите продолжительность спектакля. входные данные вводятся четыре целых не отрицательных числа a , b , c , d , разделенные пробелом. a и c не превосходят 23, b и d не превосходят 59. гарантируется, что либо a < c , либо ( a = c и b < d ). выходные данные выведите через пробел два числа — часы и минуты. второе число не должно превосходить 59.сделдать на pascal abc
begin
readln(a,b,c,d);
h:=(c*60+d-a*60-b) div 60;
m:=(c*60+d-a*60-b) mod 60;
writeln(h,' ',m);
end.
Пример:
18 30 21 15
2 45