Sua tarefa é implementar um programa semelhante à nl
ferramenta de linha de comando dos utilitários principais do GNU.
As brechas padrão são proibidas.
Você não pode usar nenhuma função, programa ou utilitário interno ou externo para numerar as linhas de um arquivo ou string, como nl
ele próprio ou o =
comando no GNU sed.
Especificação
Entrada
O programa aceita nomes de arquivos como argumentos. Seu código não precisa ser multiplataforma; o formato de nome de arquivo do sistema operacional executando o código deve ser usado, ou seja, se você estiver no Windows, o separador de diretório pode ser \
ou /
.
Você deve conseguir 64 arquivos de entrada, inclusive -
se ele estiver especificado. Se mais de 64 forem fornecidos, lide apenas com os primeiros 64.
Na lista de nomes de arquivos, -
representa a entrada padrão.
Se os nomes de arquivos forem fornecidos, leia os arquivos na ordem em que são fornecidos e concatene seu conteúdo, inserindo uma nova linha entre cada um e no final. Se você não conseguir ler um ou mais nomes de arquivos (porque o arquivo não existe ou você não possui permissões de leitura), ignore-os. Se todos os nomes de arquivos especificados forem inválidos, não produza nada.
Se nenhum nome de arquivo for fornecido, leia a partir da entrada padrão. Leia apenas da entrada padrão se nenhum nome de arquivo for fornecido ou se -
for fornecido.
Resultado
A saída do programa vontade, para a saída padrão, a entrada com linhas numeradas assim (Você pode supor que a entrada tem \n
, \r\n
ou \r
final de linha, escolher o que for conveniente para você, mas especificar qual):
<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 caracteres de espaço são alocados para o número da linha e são inseridos no final desses caracteres; o restante se torna um espaço (por exemplo 1
, terá 5 espaços à esquerda, 22
terá 4 espaços à esquerda, ...). Se a entrada for suficientemente longa, você acabará ficando sem espaço para o número da linha, na linha 999999
. Você não deve produzir nada após a linha 999999.
Se a entrada estiver vazia, não produza nada.
Status de saída
Os números mais baixos têm prioridade: se os erros 1 e 2 forem encontrados, saia com o status 1.
Saia com o status 0 se a entrada foi recebida com sucesso e as linhas numeradas e produzidas com sucesso.
Saia com o status 1 se um ou mais dos arquivos especificados na linha de comandos não foram encontrados ou não puderam ser lidos.
Saia com o status 2 se forem fornecidos muitos arquivos (mais de 64).
Saia com o status 3 se a entrada for muito longa (mais de 999999 linhas). \
Pontuação
Este é o código-golfe - o programa mais curto vence!
Posso adicionar bônus mais tarde por implementar certas opções que nl
possuem. Não há bônus no momento.
prompt()
para emular o programa args e stdin?