Контест Senior EF Core обновлено

Трекер изменений своими руками

Условие

Смоделируйте упрощённый трекер изменений EF Core для сущностей с ключом. В базе изначально есть набор ключей. Команды и ответы:

  • LOAD k: если сущность не отслеживается, загрузить (Unchanged) или NotFound, если её нет в базе; если отслеживается, вывести текущее состояние без изменений;
  • ADD k: для неотслеживаемой: ERROR duplicate, если ключ есть в базе, иначе Added; для Deleted: снова Modified; иначе ERROR tracked;
  • EDIT k: Unchanged → Modified; Added и Modified не меняются (вывести состояние); Deleted → ERROR deleted; не отслеживается → ERROR not tracked;
  • REMOVE k: Added → перестаёт отслеживаться (Detached); Unchanged/Modified → Deleted; Deleted остаётся Deleted; не отслеживается → ERROR not tracked;
  • SAVE: вывести INSERT a UPDATE b DELETE c по числу сущностей Added, Modified, Deleted, применить к базе; добавленные и изменённые становятся Unchanged, удалённые перестают отслеживаться.

Ввод: q (q ≤ 10⁴), строка с ключами в базе через пробел (или -, если база пуста), затем q команд.

Вывод: ответ на каждую команду.

Пример

8
1 2
LOAD 1
EDIT 1
ADD 3
REMOVE 2
LOAD 2
REMOVE 3
SAVE
LOAD 2
Unchanged
Modified
Added
ERROR not tracked
Unchanged
Detached
INSERT 0 UPDATE 1 DELETE 0
Unchanged

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.