Файловая система в памяти с перемещением
Задача по программированию с проверкой онлайн
- Сложность
- Сложная
- Языки
- 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