В прошлом году (2009) "Замятие кода Google" показала интересную проблему как первую проблему в раунде 1B: Дерево решений
Поскольку проблема выглядела специально для Lisp -подобных языков, мы спонтанно имели возбуждающий codegolf здесь, на SO, в котором на нескольких языках удалось решить проблему в меньшем количестве символов, чем любой сорт Lisp, используя довольно много разных методов.
В этом году Round 1B Problem A (File Fix-it) также кажется скроенным для определенного семейства языков, скриптов оболочки Unix. Поэтому продолжение "традиции 1B-A" было бы уместным.: p Но какой язык будет содержать самый короткий код? Давайте рассмотрим его и посмотрим!
Описание проблемы (адаптировано с официальной страницы):
Вам предоставляются тестовые примеры T. Каждый тестовый пример содержит строки N, которые перечисляют полный путь к всем каталогам, существующим на вашем компьютере. Например:
/home
/home/awesome
/home/awesome/wheeeeeee
/home/awesome/wheeeeeee/codegolfrocks
/home/thecakeisalie
Далее вам даются строки M, в которых указывается полный путь к каталогам, которые вы хотите создать. Они находятся в том же формате, что и предыдущие примеры. Вы можете создать каталог с помощью команды mkdir
, но вы можете сделать это только в том случае, если родительский каталог уже существует. Например, чтобы создать каталоги /pyonpyon/fumufumu/yeahyeah
и /pyonpyon/fumufumu/yeahyeahyeah
, вам нужно будет использовать mkdir
четыре раза:
mkdir /pyonpyon
mkdir /pyonpyon/fumufumu
mkdir /pyonpyon/fumufumu/yeahyeah
mkdir /pyonpyon/fumufumu/yeahyeahyeah
Для каждого тестового примера возвращайте количество раз, когда вы вызываете mkdir
, чтобы создать все каталоги, которые вы хотели бы создать.
Ввод
Вход состоит из текстового файла, первая строка которого содержит целое число T, количество тестовых случаев. Остальная часть файла содержит тестовые примеры.
Каждый тестовый пример начинается с строки, содержащей целые числа N и M, разделенные пробелом.
Следующие строки N содержат путь к каждой директории, существующей на вашем компьютере (не включая корневой каталог /
). Это конкатенация одной или нескольких непустых строчных буквенно-цифровых строк, каждая из которых предшествует одному /
.
Следующие строки M содержат путь к каждому каталогу, который вы хотите создать.
Выход
Для каждого случая напечатайте одну строку, содержащую Case #X: Y
, где X
- номер случая, а Y
- это решение.
Ограничения
1 ≤ T ≤ 100.
0 ≤ N ≤ 100.
1 ≤ M ≤ 100.
Каждый путь содержит не более 100 символов.
Каждый путь отображается только один раз в списке каталогов уже на вашем компьютере или в списке желаемых каталогов. Тем не менее, путь может отображаться в обоих списках, как показано в примере ниже.
Если каталог находится в списке каталогов уже на вашем компьютере, также будет указан его родительский каталог, за исключением корневого каталога /
.
Входной файл имеет длину не более 100 000 байтов.
Пример
Более крупные примеры тестовых примеров могут быть загружены здесь.
Input:
3
0 2
/home/sparkle/pyon
/home/sparkle/cakes
1 3
/z
/z/y
/z/x
/y/y
2 1
/moo
/moo/wheeeee
/moo
Вывод:
Case #1: 4
Case #2: 4
Case #3: 0
Code Golf
Пожалуйста, разместите свой короткий код на любом языке, который решает эту проблему. Вход и вывод можно обрабатывать через stdin и stdout или другими файлами по вашему выбору. Пожалуйста, включите опровержение, если ваш код может изменять или удалять существующие файлы при выполнении.
Победитель будет самым коротким решением (по счету байтов) на языке с реализацией, существовавшей до начала раунда 1B 2010. Таким образом, хотя вы можете свободно использовать язык, который вы только что создали, чтобы представить 0-байтное решение, оно не будет считаться, и вы, вероятно, получите downvotes. ^ _ ^
Таблица
- 65 GolfScript
- 100 Perl
- 121 AWK (не включая опции интерпретатора)
- 128 Bash
- 144 Ruby
- 145 Python
- 158 PyonScript
- 159 J
- 172 Lua
- 182 PostScript
- 189 Scala
- 218 Haskell
- 284 Java
- 398 С#