Ваше завдання - реалізувати програму, аналогічну інструменту 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()
для емуляції програмних аргументів і stdin?