...

Основная задача, над репозиторием zsh

Задача

Собрать статистику: сколько раз в проекте упоминаются файлы определенного вида из этого же проекта.

На примере zsh:

  1. Склонируйте репозиторий zsh
  2. Зайдите в каталог Test (cd zsh/Test)
  3. Посчитайте, сколько здесь файлов с именами вида *.ztst
  4. Посмотрите: некоторые файлы в каталоге Test упоминают .ztst файлы в своем содержимом, пример: # There are further tests for PRIVILEGED in P01privileged.ztst. Найдите, из какого файла это пример
  5. Посчитайте статистику:
    • сколько .ztst файлов ни разу не упоминаются ни в каких файлах в каталоге Test?
    • какие именно это файлы?
    • какое максимальное количество раз .ztst файл упоминается в каталоге Test?
    • какой это файл?

Детали

zsh на гитхабе: здесь.
Или сразу: git clone https://github.com/zsh-users/zsh.git

Одноименные файлы в разных вложенных каталогах считаем одним и тем же файлом, упоминанием файла считаем вхождение в текст имени файла также без учета каталогов, в которых он находится.

Например: если бы в репозитории zsh были файлы Test/a/file.ztst и Test/b/file.ztst, и в третьем файле содержался бы текст

См. также тесты
a/file.ztst
b/file.ztst

– в статистике хотим увидеть, что файл file.ztst упоминается 2 раза.

Отдельно хотим посчитать, сколько коллизий по именам файлов встречается (одноименные файлы в разных каталогах).

Погнали?

  • Сколько времени заняло решение?

Дополнительная задача: подготовка тестовых данных

Задача

Репозиторий zsh хорош, но предлагаю также сгенерировать собственные синтетические данные для теста.

В этой части упражнения мне кажется удобно написать скрипт на Perl/Python/Ruby (хотя не обязательно делать всю работу в одном скрипте).

  1. Создайте случайную структуру из вложенных каталогов
    • общее количество каталогов – несколько десятков (но можно и больше)
    • глубина вложенности каталогов – до 10 (но можно и больше)
  2. В случайных местах этой структуры создайте пустые файлы с именами <случайная строка>.csv
  3. В случайных местах этой структуры создайте пустые файлы <случайная строка>.txt
  4. В случайных txt-файлах добавьте имена существующих и несуществующих csv-файлов

А теперь посчитайте статистику: сколько csv-файлов не упоминаются ни в одном txt-файле, какой файл упоминается чаще всего и сколько раз.

Так же, как и в основной задаче, файлы рассматриваем без учета каталогов, в которых они находятся, и без учета пути, с которым они упоминаются.

Дополнительная-дополнительная задача

Поменяйте параметры генерации:

  • количество каталогов
  • максимальная вложенность
  • кустистость
  • общее количество csv и txt файлов
  • распределение количества упоминаний csv-файлов

Снова посчитайте статистику.

Погнали?

  • Сколько времени заняла подготовка тестовых данных?
  • Что оказалось сложнее/интереснее – основная задача или подготовка тестовых данных?