Desafio #7

October 13, 2018

TAC!

Em Unix (e Linux), o comando cat mostra o conteúdo de um arquivo texto na saída padrão. Um comando similar (e menos conhecido) é o tac, que exibe um arquivo texto invertendo as linhas (da última para a primeira).

O problema

Implemente o comando tac na sua linguagem e bibliotecas preferidas. Condições de funcionamento:

  • O programa deve ler um arquivo do disco especificado na linha de comando e imprimir o arquivo linha a linha, começando pela última linha e terminando na primeira. Ex:

    $ cat arquivo
    Essa é a primeira linha
    Essa é a segunda linha
    Essa é a terceira linha
    Essa é a última linha
    
    $ tac arquivo
    Essa é a última linha
    Essa é a terceira linha
    Essa é a segunda linha
    Essa é a primeira linha
    
  • O programa deve ler arquivos de qualquer tamanho e funcionar com um limite de 512MB de memória (ler o arquivo inteiro em memória não é uma alternativa viável).

Dificuldade

Fácil/Médio

Dicas

  • (Linux) Para testar na sua estação de trabalho, use ulimit -v 524288 antes de rodar o seu programa. Este comando limita a quantidade de memória que pode ser alocada nesta sessão para 512M. O seu programa deve funcionar com arquivos de qualquer tamanho nestas condições.

  • Arquivos de teste podem ser obtidos diretamente da Internet (um exemplo: enwik9.zip que contém um arquivo de 1GB comprimido) ou gerados localmente (escreva um programa simples para gerar um arquivo de 1GB na sua estação local).

  • (Linux) Para verificar o correto funcionamento do programa, use o comando tac no arquivo utilizado e compare o md5 da saida do tac com o md5 da saída do seu programa. Os dois resultados devem ser idênticos. Ex:

    $ tac arquivo | md5sum
    <md5sum da saida do tac>
    
    $ seu_programa arquivo | md5sum
    <md5sum do seu programa>
    
comments powered by Disqus