Uma das tarefas padrão mais comuns (especialmente ao exibir linguagens de programação esotéricas) é implementar um "programa de gato" : leia todo o STDIN e imprima-o no STDOUT. Embora esse nome tenha o nome do utilitário de shell Unix cat
, é claro que é muito menos poderoso que o real, que normalmente é usado para imprimir (e concatenar) vários arquivos lidos no disco.
Tarefa
Você deve escrever um programa completo que leia o conteúdo do fluxo de entrada padrão e os grave literalmente no fluxo de saída padrão. Se, e somente se, seu idioma não suportar fluxos de entrada e / ou saída padrão (como é entendido na maioria dos idiomas), você poderá considerar esses termos como o equivalente mais próximo em seu idioma (por exemplo, JavaScript prompt
e alert
). Essas são as únicas formas admissíveis de E / S, pois qualquer outra interface alteraria amplamente a natureza da tarefa e tornaria as respostas muito menos comparáveis.
A saída deve conter exatamente a entrada e nada mais . A única exceção a essa regra é a saída constante do intérprete do seu idioma que não pode ser suprimida, como uma saudação, códigos de cores ANSI ou recuo. Isso também se aplica ao rastreamento de novas linhas. Se a entrada não contiver uma nova linha à direita, a saída também não deverá incluir uma! (A única exceção é se o seu idioma sempre imprimir uma nova linha à direita após a execução.)
A saída para o fluxo de erros padrão é ignorada, desde que o fluxo de saída padrão contenha a saída esperada. Em particular, isso significa que seu programa pode terminar com um erro ao atingir o final do fluxo (EOF), desde que não polua o fluxo de saída padrão. Se você fizer isso, recomendamos que você adicione uma versão livre de erros à sua resposta (para referência).
Como isso é um desafio em cada idioma e não entre idiomas, existem algumas regras específicas para o idioma:
- Se for possível, no seu idioma, distinguir bytes nulos no fluxo de entrada padrão do EOF, seu programa deverá suportar bytes nulos como quaisquer outros bytes (ou seja, eles também deverão ser gravados no fluxo de saída padrão).
- Se for possível, no seu idioma, suportar um fluxo de entrada infinito arbitrário (ou seja, se você puder começar a imprimir bytes na saída antes de pressionar EOF na entrada), seu programa deverá funcionar corretamente nesse caso. Como exemplo,
yes | tr -d \\n | ./my_cat
deve imprimir um fluxo infinito dey
s. Depende de você com que frequência você imprime e libera o fluxo de saída padrão, mas deve garantir que isso ocorra após um período finito de tempo, independentemente do fluxo (isso significa, em particular, que você não pode esperar por um caractere específico como avanço de linha antes da impressão).
Adicione uma observação à sua resposta sobre o comportamento exato em relação a bytes nulos, fluxos infinitos e saída estranha.
Regras adicionais
Não se trata de encontrar o idioma com a solução mais curta para isso (existem algumas onde o programa vazio faz o truque) - trata-se de encontrar a solução mais curta em todos os idiomas. Portanto, nenhuma resposta será marcada como aceita.
Os envios na maioria dos idiomas serão pontuados em bytes em uma codificação preexistente apropriada, geralmente (mas não necessariamente) UTF-8.
Alguns idiomas, como pastas , são um pouco difíceis de pontuar. Em caso de dúvida, pergunte no Meta .
Sinta-se livre para usar um idioma (ou versão do idioma), mesmo que seja mais novo que esse desafio. Os idiomas escritos especificamente para enviar uma resposta de 0 byte a esse desafio são um jogo justo, mas não particularmente interessante.
Observe que deve haver um intérprete para que o envio possa ser testado. É permitido (e até encorajado) escrever esse intérprete para um idioma anteriormente não implementado.
Observe também que as línguas não têm de cumprir os nossos critérios usuais para linguagens de programação .
Se o seu idioma de escolha for uma variante trivial de outro idioma (potencialmente mais popular) que já tenha uma resposta (pense em dialetos BASIC ou SQL, shell do Unix ou derivados triviais do Brainfuck como Headsecks ou Unary), considere adicionar uma nota à resposta existente que a mesma solução ou uma solução muito semelhante também é a mais curta no outro idioma.
A menos que tenham sido anuladas anteriormente, todas as regras de código-golfe padrão se aplicam, incluindo o http://meta.codegolf.stackexchange.com/q/1061 .
Como uma observação lateral, por favor, não reduza as respostas chatas (mas válidas) em idiomas onde não há muito para jogar golfe; eles ainda são úteis para essa pergunta, pois ela tenta compilar um catálogo o mais completo possível. No entanto, faça respostas positivas acima em idiomas nos quais o autor realmente tenha se esforçado para jogar o código no golfe.
Catálogo
O snippet de pilha na parte inferior desta postagem gera o catálogo a partir das respostas a) como uma lista da solução mais curta por idioma eb) como uma tabela geral de líderes.
Para garantir que sua resposta seja exibida, inicie-a com um título, usando o seguinte modelo de remarcação:
## Language Name, N bytes
onde N
está o tamanho do seu envio. Se você melhorar sua pontuação, poderá manter as pontuações antigas no título, identificando-as. Por exemplo:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Se você quiser incluir vários números no cabeçalho (por exemplo, porque sua pontuação é a soma de dois arquivos ou você deseja listar as penalidades do sinalizador de intérpretes separadamente), verifique se a pontuação real é o último número no cabeçalho:
## Perl, 43 + 2 (-p flag) = 45 bytes
Você também pode transformar o nome do idioma em um link que será exibido no snippet:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
sh
resposta usando cat
que também contém uma solução mais curto usando dd
.)
cat