L'une des tâches standard les plus courantes (en particulier lors de la présentation de langages de programmation ésotériques) consiste à mettre en oeuvre un "programme cat" : lisez l'intégralité de STDIN et imprimez-le sur STDOUT. Bien que cela porte le nom de l'utilitaire de shell Unix, cat
il est bien sûr beaucoup moins puissant que le véritable outil utilisé pour imprimer (et concaténer) plusieurs fichiers lus à partir d'un disque.
Tâche
Vous devez écrire un programme complet qui lit le contenu du flux d’entrée standard et les écrit intégralement dans le flux de sortie standard. Si et seulement si votre langue ne prend pas en charge les flux d'entrée et / ou de sortie standard (tels qu'ils sont compris dans la plupart des langues), vous pouvez plutôt considérer ces termes comme leur équivalent le plus proche dans votre langue (par exemple, JavaScript prompt
et alert
). Ce sont les seules formes d'entrée / sortie admissibles, car toute autre interface modifierait considérablement la nature de la tâche et rendrait les réponses beaucoup moins comparables.
La sortie doit contenir exactement l'entrée et rien d'autre . La seule exception à cette règle est la sortie constante de l'interpréteur de votre langue qui ne peut pas être supprimée, telle qu'un message d'accueil, des codes de couleur ANSI ou une indentation. Ceci s'applique également aux nouvelles lignes de fuite. Si l'entrée ne contient pas de fin de ligne, la sortie ne devrait pas en inclure non plus! (La seule exception étant que votre langue imprime toujours systématiquement une nouvelle ligne après exécution.)
La sortie vers le flux d'erreur standard est ignorée tant que le flux de sortie standard contient la sortie attendue. En particulier, cela signifie que votre programme peut s’arrêter avec une erreur lorsqu’il atteint la fin du flux (EOF), à condition que cela ne pollue pas le flux de sortie standard. Si vous faites cela, je vous encourage à ajouter une version exempte d'erreur à votre réponse également (pour référence).
Comme cela est conçu comme un défi dans chaque langue et non pas entre les langues, il existe quelques règles spécifiques à chaque langue:
- S'il est tout à fait possible dans votre langage de distinguer les octets nuls dans le flux d'entrée standard de l'EOF, votre programme doit prendre en charge les octets nuls comme tout autre octet (en d'autres termes, ils doivent également être écrits dans le flux de sortie standard).
- S'il est tout à fait possible dans votre langue de prendre en charge un flux d'entrée infini arbitraire (c'est-à-dire si vous pouvez commencer à imprimer des octets sur la sortie avant d'appuyer sur EOF dans l'entrée), votre programme doit fonctionner correctement dans ce cas. Par exemple, vous
yes | tr -d \\n | ./my_cat
devriez imprimer un flux infini dey
s. C’est à vous de choisir la fréquence à laquelle vous imprimez et purgez le flux de sortie standard, mais il faut que cela se produise au bout d’un temps déterminé, quel que soit le flux (cela signifie notamment que vous ne pouvez pas attendre un caractère spécifique comme un saut de ligne avant impression).
Veuillez ajouter une note à votre réponse concernant le comportement exact en ce qui concerne les octets nuls, les flux infinis et les sorties superflues.
Règles supplémentaires
Il ne s'agit pas de trouver la langue avec la solution la plus courte pour cela (il y en a où le programme vide fait l'affaire) - il s'agit de trouver la solution la plus courte dans chaque langue. Par conséquent, aucune réponse ne sera marquée comme acceptée.
Les soumissions dans la plupart des langues seront notées en octets selon un codage préexistant approprié, généralement (mais pas nécessairement) UTF-8.
Certaines langues, comme les dossiers , sont un peu difficiles à noter. En cas de doute, demandez s'il vous plaît sur Meta .
N'hésitez pas à utiliser une langue (ou une version linguistique) même si c'est plus récent que ce défi. Les langues spécifiquement écrites pour soumettre une réponse de 0 octet à ce défi sont un jeu juste mais pas particulièrement intéressant.
Notez qu'il doit y avoir un interprète pour que la soumission puisse être testée. Il est permis (et même encouragé) d’écrire cet interprète vous-même pour une langue non encore implémentée.
Notez également que les langues ne doivent remplir nos critères habituels pour les langages de programmation .
Si votre langue de choix est une variante triviale d'une autre langue (potentiellement plus populaire) qui possède déjà une réponse (pensez aux dialectes BASIC ou SQL, aux shells Unix ou aux dérivés triviaux de Brainfuck tels que Headsecks ou Unary), pensez à ajouter une note à la réponse existante: la même solution ou une solution très similaire est également la plus courte dans l’autre langue.
Sauf si elles ont été annulées précédemment, toutes les règles standard code-golf s'appliquent, y compris le http://meta.codegolf.stackexchange.com/q/1061 .
En passant, veuillez ne pas annuler les réponses ennuyeuses (mais valables) dans des langues où il n’ya pas grand chose à jouer au golf; ceux-ci sont toujours utiles à cette question car elle tente de compiler un catalogue aussi complet que possible. Cependant, faites principalement des réponses upvote dans les langues où l’auteur devait réellement s’efforcer de jouer au code.
Catalogue
L'extrait de pile au bas de cet article génère le catalogue à partir des réponses a) sous forme de liste des solutions les plus courtes par langue et b) sous forme de classement global.
Pour vous assurer que votre réponse apparaît, commencez votre réponse par un titre, en utilisant le modèle Markdown suivant:
## Language Name, N bytes
où N
est la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores en les effaçant. Par exemple:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Si vous souhaitez inclure plusieurs numéros dans votre en-tête (par exemple, parce que votre score est la somme de deux fichiers ou si vous souhaitez répertorier séparément les pénalités d'indicateur d'interprétation), assurez-vous que le score réel est le dernier numéro de l'en-tête:
## Perl, 43 + 2 (-p flag) = 45 bytes
Vous pouvez également faire du nom de langue un lien qui apparaîtra ensuite dans l'extrait de code:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
sh
réponse cat
qui contient également une solution plus courte dd
.)
cat