Skip to content

Xenobyte42/hw3

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 

Repository files navigation

История измения текста

Нужно реализовать класс TextHistory, который хранит текст и историю его изменений. Поддерживается три типа изменений — вставка текста (insert), замена текста (replace) и удаление (delete).

Интерфейс:

  • h.text — текущий текст, read only
  • h.version — текущая версия, read only. Начинается с 0 и только растет.
  • h.insert(text, pos=pos) — вставить текст с позиции pos (по умолчанию — конец строки). Кидает ValueError, если указана недопустимая позиция. Возвращает номер новой версии.
  • h.replace(text, pos=pos) — заменить текст с позиции pos (по умолчанию — конец строки). Кидает ValueError, если указана недопустимая позиция. Замена за пределами строки работает как вставка (т. е. текст дописывается). Возвращает номер новой версии.
  • h.delete(pos, length) — удаляет length символов начиная с позиции pos. Возвращает номер новой версии.
  • h.action(action) — применяет действие action (см. ниже). Возвращает номер новой версии. Версия растет не на 1, а устанавливается та, которая указана в action.
  • h.get_actions(from_version=v1, to_version=v2) — возвращает list всех действий между двумя версиями.

Действия

Действия выражаются наследниками Action: InsertAction, ReplaceAction и DeleteAction. Конструктор принимает позицию (pos) и строку (text) или позицию и длину (length), а так же стартовую и конечную версию. Если версии указаны неверно, кидается ValueError. Единственный публичный метод apply принимает строку и возвращает модифицированную строку.

Оптимизации

Метод get_actions должен уметь применять к полученному списку оптимизации, которые сокращают количество действий. Например, очевидно, что последовательные insert('x', pos=42) и insert('y', pos=43) можно заменить на insert('xy', pos=42).

Тестов на это нет, надо придумать минимум две любые оптимизации и реализовать.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published