Su tarea es implementar un programa similar a la nl
herramienta de línea de comandos de las utilidades principales de GNU.
Las lagunas estándar están prohibidas.
No puede utilizar ninguna función, programa o utilidad incorporada o externa para numerar las líneas de un archivo o cadena, como nl
sí mismo o el =
comando en GNU sed.
Especificación
Entrada
El programa acepta nombres de archivo como argumentos. Su código no tiene que ser multiplataforma; se debe usar el formato de nombre de archivo del sistema operativo que ejecuta el código, es decir, si está en Windows, el separador de directorio puede ser \
o /
.
Debe poder tomar 64 archivos de entrada, incluso -
si se especifica. Si se dan más de 64, solo maneje los primeros 64.
En la lista de nombres de archivo, -
representa la entrada estándar.
Si se dan nombres de archivo, lea los archivos en el orden en que se dan y concatene sus contenidos, insertando una nueva línea entre cada uno y al final. Si no puede leer uno o más de los nombres de archivo (porque el archivo no existe o no tiene permisos de lectura), ignórelos. Si todos los nombres de archivo especificados no son válidos, no envíe nada.
Si no se dan nombres de archivo, lea desde la entrada estándar. Solo lea desde la entrada estándar si no se dan nombres de archivo o si -
se da.
Salida
La salida se programa, a la salida estándar, la entrada con las líneas numeradas de este modo (Usted puede asumir que la entrada tiene \n
, \r\n
o \r
los finales de línea, recoger lo que sea conveniente para usted, pero especificar cuál):
<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>
...
...
Se asignan 6 caracteres de espacio para el número de línea, y se inserta al final de estos caracteres; el resto se convierte en espacios (por ejemplo 1
, tendrá 5 espacios iniciales, 22
tendrá 4 espacios iniciales, ...). Si la entrada es suficientemente larga, eventualmente se quedará sin espacio para el número de línea, en la línea 999999
. No debe generar nada después de la línea 999999.
Si la entrada está vacía, no genera nada.
Estado de salida
Los números más bajos tienen prioridad: si se encontraron los errores 1 y 2, salga con el estado 1.
Salga con el estado 0 si la entrada se recibió con éxito y las líneas se numeraron y salieron correctamente.
Salga con el estado 1 si uno o más de los archivos especificados en la línea de comando no se encontraron o no se pudieron leer.
Salga con el estado 2 si se proporcionaron demasiados archivos (más de 64).
Salga con el estado 3 si la entrada fue demasiado larga (más de 999999 líneas). \
Puntuación
Este es el código de golf: ¡el programa más corto gana!
Puedo agregar bonos más tarde para implementar ciertas opciones que nl
tiene. No hay bonos por el momento.
prompt()
emular args y stdin de programa?