Контест Middle Типы значений и ссылочные обновлено
Задача на Swift: стек отмены для текстового поля
Условие
Текстовое поле поддерживает команды:
type <слово>: дописать слово в конец текста;delete <k>: удалить последниеkслов (если слов меньше, удалить все);undo: отменить последнюю ещё не отменённую командуtypeилиdelete(отменённые повторно не отменяются; если отменять нечего, ничего не делать);print: вывести слова текста через пробел или<empty>, если текст пуст.
Первая строка: n (1 ≤ n ≤ 10⁴). Дальше n команд. Суммарный размер вывода не больше 6·10⁴ символов.
Пример
8
type hello
type big
type world
delete 2
print
undo
print
undo
hello
hello big world
Последний undo отменяет type world.
Как подойти
История обратных операций вместо снимков состояния.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.
Предыдущий вопрос
Зачем indirect у enum
Следующий вопрос
let и экземпляр класса: можно ли менять свойства
Ещё по теме «Типы значений и ссылочные»
- Copy-on-write у Array: когда копируется буфер
- Модификаторы borrowing и consuming
- Как сделать свой copy-on-write
- Existential container: как хранится any Protocol
- Типы значений и ссылочные типы в Swift
- Оператор === в Swift
- Типы Swift: значение или ссылка
- Когда пропадает memberwise-инициализатор структуры