Ваша задача - реализовать программу, аналогичную nl
инструменту командной строки из основных утилит GNU.
Стандартные лазейки запрещены.
Вы не можете использовать какие-либо встроенные или внешние функции, программы или утилиты для нумерации строк файла или строки, например, nl
себя или =
команды в GNU sed.
Спецификация
вход
Программа принимает имена файлов в качестве аргументов. Ваш код не обязательно должен быть кроссплатформенным; должен использоваться формат имени операционной системы, в которой выполняется код, т. е. если вы находитесь в Windows, разделитель каталогов может быть \
или /
.
Вы должны быть в состоянии принять 64 входных файла, в том числе, -
если он указан. Если задано более 64, обрабатывайте только первые 64.
В списке имен файлов, -
представляет стандартный ввод.
Если указаны имена файлов, прочитайте их в том порядке, в котором они указаны, и объедините их содержимое, вставив новую строку между каждым и в конце. Если вы не можете прочитать одно или несколько имен файлов (поскольку файл не существует или у вас нет прав на чтение), игнорируйте их. Если все указанные имена файлов недействительны, ничего не выводить.
Если имена файлов не заданы, читайте со стандартного ввода. Чтение только из стандартного ввода, если имена файлов не указаны или -
указаны.
Выход
Выход программы будет на стандартный вывод, вход с линиями пронумерованы таким образом (можно предположить , что вход имеет \n
, \r\n
или \r
конца строки, выбрать наиболее удобный для вас, но указать , какой из них):
<5 spaces>1<tab><content of line 1 of input>
<5 spaces>2<tab><content of line 2 of input>
...
<4 spaces>10<tab><content of line 10 of input>
...
<3 spaces>100<tab><content of line 100 of input>
...
...
Для номера строки выделяется 6 символов пробела, и он вставляется в конце этих символов; остальные становятся пробелами (например, 1
будет 5 пробелов, 22
будет 4 пробела, ...). Если ввод достаточно длинный, у вас в конце концов останется недостаточно места для номера строки в строке 999999
. Вы не должны ничего выводить после строки 999999.
Если вход пуст, ничего не выводить.
Статус выхода
Нижние числа имеют приоритет: если возникли ошибки 1 и 2, выйдите со статусом 1.
Выйдите со статусом 0, если вход был успешно получен, а строки успешно пронумерованы и выведены.
Выход со статусом 1, если один или несколько файлов, указанных в командной строке, не найдены или не могут быть прочитаны.
Выход со статусом 2, если задано слишком много файлов (более 64).
Выход со статусом 3, если ввод был слишком длинным (более 999999 строк). \
счет
Это код-гольф - выигрывает самая короткая программа!
Я могу добавить бонусы позже для реализации определенных опций, которые nl
есть. На данный момент бонусов нет.
prompt()
эмулировать аргументы программы и стандартный ввод?