Деревья, графы, зипперы, поиск пути.
Вам предстоит решить первую часть задачи дня №7 из серии AdventOfCode 2022.
Суть задачи заключается в том, чтобы суметь декодировать "журнал работы в терминале", имеющий вид:
$ cd /
$ ls
dir a
14848514 b.txt
8504156 c.dat
dir d
$ cd a
$ ls
dir e
29116 f
2557 g
62596 h.lst
Здесь вы видите команды
cd /
- переход в корень дискаcd ..
- переход в родительскую директориюcd name
- переход в поддиректорию "name"ls
- вывод списка поддиректорий и файлов в текущей директории
Команда cd
никогда не делает более одного "движения" за раз: вы либо спускаетесь на один уровень вниз (в поддиректорию) или поднимаетесь на один уровень вверх. Исключение ровно одно — cd /
, но оно встречается только в начале журнала.
Содержимое директории выводится в виде списка, содержащего имена поддиректорий в формате dir name
и файлы вместе с их размерами <размер-в-байтах> имя
.
Вам предстоит подсчитать размер каждой директории, который равен сумме размеров поддиректорий и файлов.
Функция sum-of-sizes
должна принимать журнал в виде строки и возвращать сумму размеров тех директорий, которые занимают на диске 100000 байт и меньше. Учитывать вложенность не нужно: если вы встретите две директории нужного размера и при этом окажется, что одна из них находится в другой, то никаких дополнительных действий делать не нужно — вы всё также складываете размеры.