Задача: сконвертировать псевдографическое дерево каталогов в список путей
...
Задача
Написать программу, которая читала бы псевдографическое дерево каталогов и писала бы список путей ко всем каталогам.
Примеры данных
Маленький пример
На входе:
/etc/NetworkManager
|-- conf.d
|-- dispatcher.d
| |-- no-wait.d
| |-- pre-down.d
| `-- pre-up.d
|-- dnsmasq.d
|-- dnsmasq-shared.d
`-- system-connections
Ожидаемый результат:
/etc/NetworkManager
/etc/NetworkManager/conf.d
/etc/NetworkManager/dispatcher.d
/etc/NetworkManager/dispatcher.d/no-wait.d
/etc/NetworkManager/dispatcher.d/pre-down.d
/etc/NetworkManager/dispatcher.d/pre-up.d
/etc/NetworkManager/dnsmasq.d
/etc/NetworkManager/dnsmasq-shared.d
/etc/NetworkManager/system-connections
Просто для информации, эти списки получились в результате выполнения таких команд:
$ tree -d --charset ASCII --noreport /etc/NetworkManager
$ find /etc/NetworkManager -name '.*' -prune -o -type d -print |sort
Большой пример
На входе: файл
Ожидаемый результат: файл
Просто для информации: это каталоги в репозитории с исходным кодом Firefox. Списки получились в результате выполнения таких команд:
$ hg clone https://hg.mozilla.org/mozilla-central/
$ tree -d mozilla-central --charset ASCII --noreport >dirs_firefox_repo_tree.txt
$ find mozilla-central -name '.*' -prune -o -type d -print |sort >dirs_firefox_repo_paths.txt
Как выглядит успешное решение (проверь себя)
dirs_tree
– файл с деревом каталогов
dirs_paths
– файл со списком путей
my_program
– программа для конвертации
Запускаем программу и сравниваем результат с эталоном:
$ cat dirs_tree |my_program > dirs_paths_converted
$ diff -u dirs_paths dirs_paths_converted |wc -l
0
Успех – 0
в последнем diff
(=результат совпадает с эталоном).
Погнали?
- Сколько строчек кода будет в твоем решении?
- Сколько времени займет написание программы?
Почему мне нравится эта задача
- Задача небольшая
- сложных теоретических знаний не требуется
- но все-таки надо аккуратно применить одну классическую структуру данных (не буду подсказывать какую)
- что-нибудь подобное вполне может встретиться в реальной жизни; причем скорее даже не в разработке сервисов, а при решении эксплуатационных задач
- и это обработка текста, а такое мне всегда нравится