Задача, конечно, весьма экзотическая, но тем не менее легко решаемая.
В D ее можно решить в несколько строк:
import std.algorithm; import std.file; import std.path; import std.range; import std.stdio; import std.string; void main() { dirEntries(<путь к папке>, SpanMode.shallow) .filter!(a => a.isFile) .map!(a => (cast(string) std.file.read(a))) .map!(a => a.splitLines) .map!(a => a.length) .sum .writeln; }
В этом рецепте используется «точечный стиль» (он же UFCS — Unified Function Call Syntax, унифицированный стиль вызова функций), когда поток данных проходит через ряд преобразований следующих друг за другом.
Сначала с помощью dirEntries получаем список того, что находиться в папке (перечисление SpanMode.shallow указывает на небольшую глубину поиска содержимого), затем выделяем из списка только те имена, которые соотвествуют файлам, считываем каждый файл в строку и разделяем его на строки, после чего считаем длины полученных строк, суммируем и выводим результат.
Что действительно удивительно, так это то, что не потребовалось никаких переменных и при этом решение достаточно аккуратное и очень легко читается.