Задача "удаление" символов из строки
Тренажер представляет из себя серию заданий: запрос к пользователю набрать некоторую строку a.
После этого пользователь должен как можно быстрее набрать на экране строку a, используя только латинские буквы и клавиши управления.
Вася решил записывать все нажатия клавиш пользователя в отдельный лог. В нем присутствуют маленькие латинские буквы, а также управляющие конструкции
<delete>
Удаление символа после текущей позиции курсора.<bspace>
Удаление символа перед текущей позицией курсора.<left>
Курсор перемещается влево на один символ.<right>
Курсор перемещается вправо на один символ.
Если управляющая конструкция перемещает курсор за границы текущей строки или пытается удалить несуществующий символ, то ничего не происходит.
Теперь у Васи есть строчка, которую должен был набрать пользователь, и последовательность нажатий клавиш, считанная из лога. Помогите Васе выяснить, справился ли пользователь с заданием!
Формат ввода
Даны две строки a и b, разделённые переводом строки, — задание пользователя и последовательность нажатий клавиш (1 ≤ |a|, |b| ≤ 1000).
Формат вывода
Если пользователь справился с заданием, выведите "Yes" (без кавычек), в противном случае выведите "No".
Код:
word = input()
task = [a for a in input().replace("<delete>", '|-|').replace("<bspace>", '|--|').replace("<left>", '|>|').replace("<right>", '|<|').split('|') if a]
ans = ''
curr_pos = 0
for t in task:
if t == '>':
if curr_pos > 0:
curr_pos -= 1
elif t == '<':
if curr_pos < len(ans):
curr_pos += 1
elif t == '-':
if curr_pos < len(ans):
ans = ans[:curr_pos] + ans[curr_pos + 1:]
elif t == '--':
if curr_pos > 0:
ans = ans[:curr_pos - 1] + ans[curr_pos:]
curr_pos -= 1
else:
ans = ans[:curr_pos] + t + ans[curr_pos:]
curr_pos += len(t)
if word == ans:
print("Yes")
else:
print("No")
Вроде все сделал, но тест не проходит какой-то. В чем косяк может быть?
Ответы (1 шт):
Два стека висят слева и справа от курсора:
import re
word = input()
left = []
right = []
for m in re.finditer('<delete>|<bspace>|<left>|<right>|[a-z]', input()):
match m.group():
case '<delete>':
if right:
right.pop()
case '<bspace>':
if left:
left.pop()
case '<left>':
if left:
right.append(left.pop())
case '<right>':
if right:
left.append(right.pop())
case letter:
left.append(letter)
print('Yes' if word == ''.join(left + right[::-1]) else 'No')