Una de las tareas estándar más comunes (especialmente cuando se muestran lenguajes de programación esotéricos) es implementar un "programa cat" : lea todo STDIN e imprímalo en STDOUT. Si bien esto lleva el nombre de la utilidad de shell Unix cat
, por supuesto, es mucho menos potente que el real, que normalmente se utiliza para imprimir (y concatenar) varios archivos leídos del disco.
Tarea
Debe escribir un programa completo que lea los contenidos de la secuencia de entrada estándar y los escriba textualmente en la secuencia de salida estándar. Si y solo si su idioma no admite flujos de entrada y / o salida estándar (como se entiende en la mayoría de los idiomas), puede tomar estos términos como su equivalente más cercano en su idioma (por ejemplo, JavaScript prompt
y alert
). Estas son las únicas formas admisibles de E / S, ya que cualquier otra interfaz cambiaría en gran medida la naturaleza de la tarea y haría que las respuestas fueran mucho menos comparables.
La salida debe contener exactamente la entrada y nada más . La única excepción a esta regla es la salida constante del intérprete de su idioma que no se puede suprimir, como un saludo, códigos de color ANSI o sangría. Esto también se aplica a las nuevas líneas finales. Si la entrada no contiene una nueva línea final, ¡la salida tampoco debería incluir una! (La única excepción es si su idioma siempre imprime una nueva línea final después de la ejecución).
La salida a la secuencia de error estándar se ignora, siempre que la secuencia de salida estándar contenga la salida esperada. En particular, esto significa que su programa puede terminar con un error al llegar al final de la secuencia (EOF), siempre que no contamine la secuencia de salida estándar. Si hace esto, le animo a que también agregue una versión sin errores a su respuesta (como referencia).
Como esto pretende ser un desafío dentro de cada idioma y no entre idiomas, existen algunas reglas específicas del idioma:
- Si es posible en su idioma distinguir bytes nulos en el flujo de entrada estándar del EOF, su programa debe admitir bytes nulos como cualquier otro bytes (es decir, también deben escribirse en el flujo de salida estándar).
- Si es posible en su idioma admitir una secuencia de entrada infinita arbitraria (es decir, si puede comenzar a imprimir bytes en la salida antes de presionar EOF en la entrada), su programa debe funcionar correctamente en este caso. Como ejemplo
yes | tr -d \\n | ./my_cat
debería imprimir una corriente infinita dey
s. Depende de usted con qué frecuencia imprime y vacía el flujo de salida estándar, pero debe garantizarse que suceda después de un período de tiempo finito, independientemente del flujo (esto significa, en particular, que no puede esperar un carácter específico como un salto de línea antes de imprimir).
Agregue una nota a su respuesta sobre el comportamiento exacto con respecto a bytes nulos, flujos infinitos y salidas extrañas.
Reglas adicionales
No se trata de encontrar el idioma con la solución más corta para esto (hay algunos en los que el programa vacío hace el truco), se trata de encontrar la solución más corta en cada idioma. Por lo tanto, ninguna respuesta se marcará como aceptada.
Las presentaciones en la mayoría de los idiomas se puntuarán en bytes en una codificación preexistente apropiada, generalmente (pero no necesariamente) UTF-8.
Algunos idiomas, como las carpetas , son un poco difíciles de puntuar. En caso de duda, pregunte por Meta .
Siéntase libre de usar un idioma (o versión de idioma) incluso si es más nuevo que este desafío. Los idiomas escritos específicamente para enviar una respuesta de 0 bytes a este desafío son juegos justos pero no particularmente interesantes.
Tenga en cuenta que debe haber un intérprete para que se pueda probar el envío. Está permitido (e incluso alentado) escribir este intérprete usted mismo para un lenguaje previamente no implementado.
También tenga en cuenta que las lenguas no tienen que cumplir con los criterios habituales para lenguajes de programación .
Si su idioma de elección es una variante trivial de otro lenguaje (potencialmente más popular) que ya tiene una respuesta (piense en dialectos BASIC o SQL, shells Unix o derivados triviales de Brainfuck como Headsecks o Unary), considere agregar una nota a la respuesta existente que la misma solución o una muy similar también es la más corta en el otro idioma.
A menos que se hayan anulado anteriormente, se aplican todas las reglas estándar de código de golf , incluido http://meta.codegolf.stackexchange.com/q/1061 .
Como nota al margen, no desestime las respuestas aburridas (pero válidas) en idiomas donde no hay mucho para jugar golf; todavía son útiles para esta pregunta, ya que trata de compilar un catálogo lo más completo posible. Sin embargo, sobre todo vota las respuestas en idiomas en los que el autor realmente tuvo que esforzarse para jugar golf en el código.
Catálogo
El Fragmento de pila al final de esta publicación genera el catálogo a partir de las respuestas a) como una lista de la solución más corta por idioma yb) como una tabla de clasificación general.
Para asegurarse de que su respuesta se muestre, comience con un título, utilizando la siguiente plantilla de Markdown:
## Language Name, N bytes
¿Dónde N
está el tamaño de su envío? Si mejora su puntaje, puede mantener los puntajes antiguos en el título, tachándolos. Por ejemplo:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Si desea incluir varios números en su encabezado (por ejemplo, porque su puntaje es la suma de dos archivos o desea enumerar las penalizaciones de la bandera del intérprete por separado), asegúrese de que el puntaje real sea el último número en el encabezado:
## Perl, 43 + 2 (-p flag) = 45 bytes
También puede hacer que el nombre del idioma sea un enlace que luego aparecerá en el fragmento:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
sh
respuesta usando cat
que también contiene una solución más corta usando dd
.)
cat