Файловая система в памяти с перемещением

Задача по программированию с проверкой онлайн

Сложность
Сложная
Языки
Python
JavaScript
TypeScript
Java
Go
Темы
Классы и ООП
Деревья и графы
Исключения

Реализуйте файловую систему в памяти. Сначала есть только пустой корневой каталог /. Дан список команд commands; каждая команда — список строк: имя и аргументы. Путь абсолютный: / или имена через /, например /docs/plan.txt; имя — непустая строка из строчных латинских букв, цифр и точек, путь не кончается на /. Верните список результатов, по одному на команду.

Команды:

  • ["mkdir", path]: создать каталог и все недостающие каталоги на пути к нему; уже существующие каталоги не меняются. Результат "".
  • ["write", path, size]: создать файл размера size (десятичная строка, от 0 до 10⁶) или перезаписать размер существующего файла. Результат "".
  • ["size", path]: размер файла или сумма размеров всех файлов внутри каталога на любой глубине, десятичной строкой.
  • ["ls", path]: для каталога — имена его прямых потомков в лексикографическом порядке через запятую ("", если он пуст), для файла — его имя.
  • ["mv", src, dst]: переместить файл или каталог со всем содержимым так, чтобы его полным путём стал dst. Результат "".
  • ["rm", path]: удалить файл или каталог со всем содержимым. Результат: размер удалённого, как у size.

Сообщите об ошибке (бросьте исключение, в Go верните error), если: mkdir встречает файл на пути или в самом path; у write родительского каталога нет (или это файл) либо path — каталог; size, ls, rm или mv называют несуществующий путь; rm или mv называют корень; у mv путь dst уже существует, его родителя нет или он файл, либо dst лежит внутри src. Ошибка относится ко всему вызову: первая же неверная команда прерывает его. До 300 команд.

Пример: [["mkdir", "/a"], ["write", "/a/f", "5"], ["size", "/"]] → ["", "", "5"].


Источник: задача CodeShare

Решить онлайнБесплатно и без регистрации: пишете код в браузере и проверяете его тестами (без аккаунта — несколько задач в день).

Ещё задачи

Все задачи для тренировки