Récemment, quelqu'un a proposé des limites plus strictes pour la longueur de ligne par défaut de Python:
De toute évidence, aucun programme ne devrait jamais utiliser plus de 80 caractères par ligne, pour une multitude de raisons. Tout d'abord, pour la lisibilité et la maintenabilité, il est important d'avoir une norme solide, afin que nous puissions ajuster la largeur de nos éditeurs de texte de manière appropriée. Comme avantage secondaire, le code peut facilement être transféré sur des supports qui peuvent avoir des restrictions et où l'ajout de sauts de ligne peut être gênant, comme imprimer des pages à réviser lors d'une réunion ou des cartes perforées.
Mais 80 caractères sont-ils trop élevés? Certains suggèrent 79, ou même aussi bas que 75, pour permettre à un terminal de 80 caractères de large de s'adapter au code avec quelques colonnes consacrées aux numéros de ligne. Clairement, en fin de compte, une valeur inférieure est meilleure, car des limites inférieures permettent au code d'être utilisé dans plus de situations sans reformater.
Votre objectif est de trouver et de démontrer la longueur de ligne minimale requise par votre langue préférée en écrivant une variante FizzBuzz avec le moins de caractères dans une ligne.
Contribution
Un entier, n , via n'importe quelle méthode souhaitée.
Sortie
Imprimez les nombres de 1 à n , ( n ≥ 1, n ∈ ℤ) séparés par des sauts de ligne, sauf:
- pour des multiples de 3 imprimés "Apple"
- pour des multiples de 5 imprimer "Pie"
- pour les multiples de 3 et 5 imprimer "ApplePie"
Notation
La longueur de ligne maximale en octets, à l'exclusion du saut de ligne (Cr, CrLf, Lf ou autre saut standard du système, spécifiez, si vous le souhaitez), et la longueur totale du code en octets en tant que bris d'égalité.
Règles
Tous les sauts de ligne doivent être significatifs. Les sauts de ligne qui peuvent être supprimés et les lignes adjacentes directement concaténées sans impact sur la sortie doivent être supprimés.
Réponses:
> <> , 1 octet par ligne,
243161135 octets-26 octets grâce à Jo King!
Langues 2D FTW! Bien que l'écriture de boucles et de branches à l'aide d'instructions goto au lieu de la structure 2D ne soit pas amusante.
Essayez-le en ligne! , ou regardez-le au terrain de pêche !
Le poisson nage vers le bas le long du code, en utilisant des gotos conditionnels pour sauter des choses en fonction de ce qui divise l'accumulateur.
Je crois que cela répond à la spécification: quelles que soient les nouvelles lignes supprimées, le poisson frappe toujours l'initiale
v
(la seule instruction de changement de direction présente), donc le poisson nage toujours vers le bas dans la première colonne. Ainsi, la suppression d'une nouvelle ligne a pour effet de supprimer simplement le caractère suivant du chemin du poisson, et je ne pense pas que vous puissiez supprimer l'un des caractères sans modifier la sortie.la source
Haskell , 3 octets / ligne,
494 471 470 463 453 450461 octetsMODIFIER:
-1+x
enx-1
.--
ligne supplémentaire aprèsx-
.f
utiliséc 47:[]
au lieu de[c 47&0]
.w
.a="Apple"
etp="Pie"
in#
et utilisez une récursivité factice pour le 15 cas.w
inf
. Supprimer la redondance--
entrex
et15
.%
fonction. Enfin, nous avons effectué des tests automatisés pour nous assurer qu'il n'y avait plus de surprises.f
prend unInt
et retourne unString
.Essayez-le en ligne!
Testez les restrictions de source! (La ligne 70 est exclue du test car la suppression de sa nouvelle ligne provoque une boucle infinie sans sortie.)
Version avec les astuces de compression les plus importantes supprimées:
Comment ça marche
{}
. Puisque je suis en train de définir une fonction plutôt qu'un programme entier, je ne sais pas trop comment compter les octets; J'ai choisi de compter défensivement à la fois le{}
s et un;
séparateur de déclaration supplémentaire (ce dernier étant généralement une nouvelle ligne en mode Haskell normal.)--
commentaires de ligne, qui rendent le prochain retour à la ligne non amovible, ainsi qu'un retour à la ligne précédent dans le cas où la ligne précédente se termine par un caractère opérateur (qui ne fait pas lui-même partie d'un commentaire de ligne) .\
barres obliques inverses dans les littéraux de chaîne, en retrait pour les continuations de ligne avec une indentation possible. Un écart de chaîne avec des délimiteurs est supprimé de la chaîne analysée."Apple"
et"Pie"
cela apparaît directement dans la sortie. Pour"8"
et"9"
une correspondance de modèle est utilisée pour donner une erreur si la chaîne a plus d'un caractère.&
et%
, qui permettent de forcer une ligne à se terminer par un caractère d'opérateur pour la première astuce. Nous en avons besoin pour mettre fin aux littéraux de chaîne, car ils\"
sont trop larges pour être ajoutés--
.&
est le général, défini tel quex&y=x
.%
est défini de telle sorte que[a]%y=a
, ce qui lui permet de remplacer!!0
et d'imposer simultanément que son argument de chaîne doit avoir une longueur de 1.\n
semble impossible de tenir dans un littéral de chaîne avec seulement 3 octets sur la ligne.c x=["9"%0,"8"%0..]!!x
est utilisé pour convertir d'Int
un caractère en un caractère, en comptant du chiffre'9'
vers le bas.show
s'agit de quatre caractères, la sortie numérique doit être implémentée à la main.d
est une liste des chaînes de chiffres"1".."9"
.n
est une liste infinie de représentations numériques["1","2","3",...]
définies récursivement à l'aide ded
.#
convertit unInt
x
à sa forme ApplePie donné un premier argument supplémentaire qui estgcd
dex
à 15.la source
Haskell , 7 octets / ligne, 339 octets
L'exigence que les sauts de ligne soient significatifs en fait un défi non trivial à Haskell. Il n'y a presque aucun moyen d'insérer des sauts de ligne qui ne peuvent pas être supprimés, donc tout doit être fait avec des déclarations légitimement minuscules.
Essayez-le en ligne!
la source
Gelée ,
32 octets / ligne,1068056 octetsLes lignes et les colonnes de la chaîne littérale sont transposées, donc la suppression des sauts de ligne gâche leur ordre.
Les lignes restantes sont des liaisons / fonctions distinctes et contiennent des appels de fonction (
¢
), elles ne peuvent donc être concaténées que si les appels de fonction sont également éliminés.Essayez-le en ligne!
la source
TI-BASIC, 4 octets par ligne
Étant donné que le but est uniquement de minimiser la longueur de ligne maximale, certaines lignes sont plus longues qu'elles ne devraient l'être, mais la plus petite que j'ai pu faire la plus longue était de 4 octets. Par conséquent, je pensais que cela rendrait le code plus facile à lire si je fusionnais les lignes qui pouvaient être combinées sans dépasser 4 octets.
Non golfé
À propos de la langue et des limitations
TI-BASIC est un langage à jetons et, dans ce cas, chacun des jetons fait 1 octet à l'exception des
StrN
variables, qui sont 2 octets. En outre, vous pouvez laisser la plupart du temps les parenthèses fermantes. Laremainder(
fonction fait 2 octets, donc son utilisation nécessiterait au moins 5 octets (un pour la fonction, deux pour les arguments et un pour la virguleremainder(I,3
). Au lieu de cela, j'ai utilisé les fonctionsfPart(
etnot(
pour le raccourcir, qui sont toutes deux des jetons de 1 octet. De plus, vous pouvez voir que j'aiAns
beaucoup utilisé la variable intégrée , car toute expression qui est évaluée sur une ligne par elle-même y est automatiquement stockée. Je peux donc économiser quelques octets en fractionnant les expressions et les affectations.Une autre stratégie était évidemment de minimiser les affectations de chaînes. Ma méthode pour ce faire dépendait de la longueur de ligne maximale dans le reste du code. Une fois que j'ai déterminé qu'il s'agissait de 4 octets, j'ai pu entasser autant de chaque chaîne sur la même ligne que possible pour minimiser la quantité d'affectations dont j'avais besoin. Je l'ai fait pour des raisons de lisibilité.
Les facteurs limitants dans ce code sont les affectations aux variables de chaîne et la concaténation avec les variables de chaîne. Les lignes
Ans→Str1
et lesStr1+Ans
deux font au total 4 octets. Je devrais trouver un moyen d'éliminer complètement les variables de chaîne afin de minimiser davantage la longueur de ligne maximale dans mon code. Tout le reste peut être raccourci jusqu'à un maximum de 3 octets ou moins par ligne.Le problème réside dans les affectations aux variables numériques, telles que
1→I
. Vous ne pouvez pas jouer au golf plus loin sans trouver une solution sans variables qui ne dépasse pas 2 octets de longueur de ligne. Cela s'avère impossible pour ce défi.Les opérateurs binaires comme
+
nécessitent le symbole de l'opérateur et les arguments gauche et droit. Donc, sans cela, vous ne seriez pas en mesure de concaténer des chaînes. Sans concaténation de chaînes, il n'y aurait aucun moyen d'afficher les chaînes nécessaires à ce programme pour terminer le défi sans dépasser 2 octets de longueur de ligne. Par conséquent, la limite théorique pour ce défi dans cette langue serait de 3 octets par ligne, ce que je n'ai pas pu atteindre.la source
If A and B
Ans
jeton fait 1 octet, tandis que les trois caractères consécutifsAns
sont respectivement 1, 2 et 2 octets pour un total de 5. Ce n'est pas une chaîne ASCII, c'est littéralement le jeton lorsque vous le tapez sur la calculatrice.C (gcc) , 2 octets par ligne,
374368320310262 octetsJe suppose qu'il peut être joué un peu plus au golf. Les barres obliques inverses qui échappent aux nouvelles lignes le rendent un peu trivial.
Essayez-le en ligne!
la source
&&
.Python 3 , 4 octets / ligne, 113 octets
Essayez-le en ligne!
la source
PHP 7, 2 octets par ligne
la source
Aceto , 1 octet par ligne, 230 octets
Eh bien, ce n'était pas amusant à écrire. En tant que fongoïde, les structures de contrôle d'Aceto reposent fortement sur sa nature 2D, mais nous pouvons contourner cela avec beaucoup, beaucoup d'échappements conditionnels (
`
). Le seul problème avec ceux-ci est qu'ils affectent la commande suivante, quelle que soit sa présence (tous les programmes Aceto sont des carrés, en interne), c'est pourquoi nous devons aligner le programme à certains endroits en insérant des lignes vides à certains points.Les littéraux de chaîne ne peuvent pas vraiment être utilisés, mais les littéraux de caractères le peuvent (à certains endroits; encore une fois, nous devons les aligner).
Appelé avec
20
, il imprime:Ce n'est jamais le cas ici car cela va du bas vers le haut.
Il y a au moins un endroit où nous pouvons économiser 2 octets (en remplaçant le
`X
par un|
ou#
), mais je l'ai gardé tel quel en raison du coût d'exécution associé à l'exécution d'une courbe de Hilbert relativement grande.J'ai également ignoré l'exigence implicite d'utiliser
\r
ou de\r\n
nouvelles lignes parce que je pense que c'est une erreur involontaire de l'OP. S'il y a une modification ou un commentaire renforçant cette exigence, je peux le changer sans trop de difficulté pour utiliser à la place les nouvelles lignes CR.Le bytecount est basé sur l'encodage de codegolfing d'Aceto; Latin-7, dans lequel
£
est un seul octet.la source
Perl 5 , 2 octets par ligne, 182 octets
Essayez-le en ligne!
La syntaxe de Perl est très indulgente, donc de nombreuses lacunes peuvent être ajoutées au code et des commentaires ajoutés, ce qui rend l'idée de base assez simple. L'objectif principal de ce code est de construire une chaîne contenant le code que nous voulons exécuter, et
eval
ce. En Perl, il est possible d'appeler une fonction à l'aide d'une chaîne ou d'une variable avec la&{...}
notation, malheureusement,eval
n'est pas appelable sous cette forme, mais l'evalbytes
est, tant que vous l'appelez via l'CORE::
espace de noms. La construction de cette chaîne était assez simple et le programme est passé directement à cet appel. Les chaînes sont construites en utilisant les sauts de ligne dans le cadre du XOR, pour les construire j'ai utilisé ce script. Pour garder cela valide, quelques endroits ont dû avoir des commentaires placés, de sorte que la suppression des sauts de ligne entraînerait un code non fonctionnel.La routine FizzBuzz a été tirée de l'excellente réponse de primo .
Perl 5 , 1 octet par ligne, 172 octets
Donc, je sais (maintenant) que cela n'est pas valide , car un certain nombre de nouvelles lignes peuvent être supprimées, mais comme c'était mon approche initiale du problème, je l'ajoute. C'était amusant de voir jusqu'où vous pouvez pousser la syntaxe de Perl! J'ai apprécié ce problème à lui seul, même s'il n'est pas valide.
Essayez-le en ligne!
la source
SmileBASIC,
9sept octets par ligne,159155154152 octetsCe fut un défi vraiment amusant. Malheureusement, la règle interdisant les sauts de ligne inutiles pose quelques problèmes (bien que heureusement, cela n'affecte pas la longueur de ligne maximale ici.) J'ai dû ajouter des commentaires entre les lignes comme
A%=I/3
etA=A%*3
, car ilA%=I/3A=A%*3
est correctement analysé dans SB. J'ai pu utiliser une astuce pour omettre certains commentaires, car le remplacementA
parE
rend cette ligne invalide (cela a quelque chose à voir avec les nombres écrits à l'aide de laE
notation, je pense.3E
Est considéré comme un nombre non valide plutôt qu'un nombre et un nom de variable.)La plus grande limitation ici est d'obtenir des entrées.
INPUT x
est le moyen le plus simple autorisé, l'alternative étant de définir une fonction avec une valeur d'entrée commeDEF F x
mais qui est toujours de 7 caractères. Faire une déclaration conditionnelle est également difficile; Je ne peux penser à rien de plus court queWHILE x
.la source
A%=I/3A=A%*3
est syntaxiquement valide mais logiquement rompu, vous n'avez pas besoin du caractère de commentaire.A%=I/3
etA=A%*3
, donc le commentaire est requis.JavaScript (ES6), 3 octets par ligne
Utilise la variable globale
top
pour accéder à l'window
objet, à partir duquel nous avonseval
le code suivant:Vous devrez l'exécuter dans la console car il
top
est inaccessible à partir d'un extrait de pile en bac à sable.la source
C #, 9 octets par ligne,
248 242230 octetsPuisque C # ne se soucie pas des sauts de ligne, il a besoin d'un commentaire en ligne à la fin de presque (merci Ørjan Johansen) chaque ligne pour se conformer aux règles. Ce programme attend n comme argument de ligne de commande. Voici avec autant de nouvelles lignes non supprimables que possible:
Mais comme la ligne la plus longue est de 9 octets, d'autres lignes peuvent également être aussi longues, réduisant ainsi certains octets:
la source
//
entre des jetons qui fusionneraient ensemble, commestatic
etvoid
.var
s="";if//
(i%3==0//
)s+=//
"Apple"//
;if(i%5//
.A
de la première à la deuxième ligne.Python 2, 5 octets / ligne, 93 octets
La norme max6 est déjà obsolète.
Essayez-le en ligne!
Python 2 et 3, 5 octets / ligne, 100 octets
Essayez-le en ligne!
la source
JavaScript, max 6 octets / ligne, 528 octets
L'idée s'est arrachée d' ici .
Code arraché d' ici .
Merci à Anders Kaseorg pour
g=eval
avoir économisé un octet par ligne.Indépendant:
la source
a=""+\n"f"+\n"o"+ ...
et se terminant pareval(\na)
est légèrement plus courtf=eval
etf(a)
.PHP, 4 octets / ligne
Essayez-le en ligne!
la source
APL (Dyalog) , 5 octets par ligne
Essayez-le en ligne!
la source
Rétine , 4 octets / ligne
Essayez-le en ligne!
la source
R , 10 octets par ligne, 800 octets
La règle des «sauts de ligne significatifs» a rendu cela difficile. Actuellement, cela énonce simplement le code fizzbuzz dans une chaîne, puis l'exécute.
Essayez-le en ligne!
Voici le code ApplePie concaténé (adapté du golf de MickyT ici ).
Et la version non golfée du code d'analyse:
Ici, j'utilise
toString
pour concaténer la liste des symbolesa
en une seule chaîne. Cependant, le comportement par défaut consiste à séparer chaque symbole avec,
, nous appelons doncgsub
à les remplacer par des valeurs nulles. Ensuite, nous le passons àparse
eteval
faisons le sale boulot.Il est possible qu'il y ait une approche qui n'utilise pas cette méthode d'analyse de chaîne et tout droit jusqu'à FizzBuzz outils, mais il me semble que l' utilisation
for
ouwhile
ou définir unfunction
besoin des lignes plus longues que l'approche actuelle.la source
Ruby,
105 octets / ligne,354214 octets-140 octets du score brut de @NieDzejkob.
Comment ça marche
Ruby concatène automatiquement les séquences de littéraux de chaîne (à l'exception des littéraux à caractère unique tels que
?a
) dans la même instruction. Cela signifie que celax = "a" 'b' "c" %q{d}
équivaut àx = "abcd"
. Nous l'utilisons pour diviser le code de type FizzBuzz en des chaînes beaucoup plus petites pour appelereval
, car+
cela invalidera le programme en raison de la règle de suppression de nouvelles lignes, mais\
cela entraînera des erreurs de syntaxe si les nouvelles lignes sont supprimées!la source
eval
ligne initiale est plus longue que les autres, non?Julia 0,6 , 5 octets par ligne, 168 octets au total
Essayez-le en ligne!
Le
print
ramène inévitablement (afaict) dans le territoire de 5 octets par ligne.Non golfé:
*
est l'opérateur de concaténation de chaînes, ila*p*"\n"
forme donc "ApplePie \ n".|>
est l'opérateur de chaînage de fonction (/ piping), donc la chaîne choisie est envoyée comme argument àprint
. Lesin
n'est pas utilisé, il est juste là car ilprint
doit être dans un tableau pour avoir un espace important après (en utilisant l'#
astuce après cela, le nombre d'octets max par ligne sera de 6).Si le simple retour de la sortie sous forme de tableau est autorisé, cela peut être fait avec 4 octets max par ligne:
Julia 0,6 , 4 octets par ligne, 152 octets au total
Essayez-le en ligne!
Une fonction qui prend n et renvoie un tableau contenant la sortie attendue. La longueur de ligne maximale ici est limitée par
n->
- Julia a besoin de cela sur une seule ligne pour l'analyser correctement comme le début d'un lambda.la source
Pascal (FPC)
-Sew
, 6 octets par ligne,348320 octetsEssayez-le en ligne!
Utilise FPC pour obtenir 6 octets par ligne; sans cela, le résultat serait bien pire. Il s'agit de la plus petite largeur de ligne possible car après
write
doit être soit;
ou(
(ou des espaces inutiles), donc un commentaire spécial est inséré pour éviter cela. Les caractéristiques de FPC qui ont influencé cette réponse sont://
- démarrage de commentaires sur une ligne.{$<something>...}
sont des directives de compilation. Si la directive n'existe pas, FPC émettra un avertissement (et{$ ...}
ainsi de suite). Dans ce programme,{
et$
sont séparés par une nouvelle ligne qui émettra l'avertissement lors de la suppression.-Sew
- Le compilateur s'arrête également après les avertissements afin que{
et$
rejoint l'arrêt de la compilation.la source
Japt , 3 octets par ligne
Presque réussi à le réduire à deux octets par ligne, mais le retour de la carte est interrompu s'il est suivi d'une nouvelle ligne.
L'implémentation FizzBuzz elle-même est issue du thread canonique FizzBuzz .
Essayez-le en ligne!
la source
LOLCODE ,
188 octets par ligne, 303 octets au totalEssayez-le en ligne!
-10 octets par ligne en utilisant le caractère de continuation de ligne
…
, grâce à Ørjan Johansen!la source
Python 2 , 5 octets / ligne
Essayez-le en ligne!
la source
'z\"'
signifie la même chose que'z\
⏎"'
, donc la règle de nouvelle ligne redondante signifie que vous n'êtes pas autorisé à démarrer une ligne de continuation à l'intérieur de la chaîne avec"
.r'...'
maintenantSyntaxError
.FizzBuzz
à l'utilisationApplePie
.JavaScript (ECMAScript6), 2 octets par ligne
Longue explication
La façon dont nous pouvons raccourcir les lignes consiste à transformer le code en chaîne et à échapper les extrémités de ligne, cela imposera une limite de 2 octets par ligne.
Devient
alert(1)
ainsiMais maintenant, votre code est une chaîne, nous devons donc exécuter la chaîne en tant que code. Je connais au moins 4 façons d'exécuter la chaîne comme code:
eval(
onclick=""
attribut, mais je n'ai pas réussi à rendre la partie de création d'élément courte.Toutes les fonctions natives vivent à l'intérieur de l' objet fenêtre et en javascript, vous pouvez accéder aux propriétés de l'objet en utilisant la notation par points ainsi
eval()
devientwindow.eval()
, ou vous pouvez accéder aux propriétés en utilisant la notation de parenthèsewindow['eval']()
. Vous pouvez en profiter pour brisereval
plusieurs lignes en utilisant la méthode décrite précédemment. Mais vous devez toujours taper la fenêtre , une astuce est que si vous n'êtes pas à l'intérieur d'un cadre, la variable supérieure est également window, donc window.eval devient top.eval (3 octets de moins).Cela rendra le code minimum de 3 octets. Pour faire le code 2 octets, j'ai utilisé le
new Function(/*string*/);
constructeur, mais j'ai dû être créatif pour y accéder sans avoir à le taper.Tout d'abord, le constructeur Function vous permet de l'appeler comme une fonction en omettant le nouveau mot-clé, cela réduit 4 octets mais c'est également important pour une autre raison. Appelant le constructeur en fonction retourne encore une instance ce qui nous permet de tourner
new Function(code)
àFunction(code)
. Une autre chose importante est que le constructeur Function a uncall
méthode qui vous permet d'appeler n'importe quelle fonction mais en remplaçant la référence this, et le constructeur Function lui-même étant une fonction, vous pouvez appeler une méthode sur elle-mêmeFunction.call(null, code)
.Toutes les fonctions natives sont des instances du constructeur Function, et tous les objets en javascript ont une propriété constructeur . Vous pouvez donc avoir accès au constructeur Function sur n'importe quelle fonction native comme
alert.constructor
, et en utilisant la méthode d' appel , nous pouvons exécuter le constructeur en tant que fonction. Maintenant, nous avons alert.constructor.call (null, code) renvoie une fonction.en combinant les cinématiques précédentes, nous pouvons en faire
alert['constructor']['call'](null, code)
Maintenant, nous avons juste besoin de trouver une fonction ou une méthode courte nommée, alors je choisis la méthode big () à l'intérieur du constructeur String. Je peux donc y accéder directement à partir d'une chaîne vide
"".big
Ensuite, je viens de tout casser en 2 octets
Court er explication (TLDR)
J'accède au nouveau constructeur Function (code) pour analyser la chaîne au lieu de eval (code) . Ce constructeur est disponible à chaque fonction native en faisant anyFunction. constructeur , comme
alert.constructor===Function
. J'utilise une fonction / méthode à l'intérieur du String.prototype.bigString.prototype.big.constructor.call(null, /*string*/)
Mais y accéder directement à partir d'un littéral de chaîne"".big
et le transformer en notation de parenthèse .""['big']['constructor']['call'](0, CODE)
pour pouvoir le casser en utilisant le\
.la source
'
et]
peut être supprimé et le programme fonctionnera toujours avec succès.Pip , 3 octets par ligne, 72 octets au total
Essayez-le en ligne!
Pip est extrêmement flexible sur les espaces blancs, donc la seule stratégie qui semble faisable est de créer une chaîne, de la modifier de manière à ce que les sauts de ligne ne soient pas perturbés et de l'évaluer.
Nous créons une chaîne où chaque autre caractère est une nouvelle ligne, et prenons tous les autres caractères en utilisant
UW
(dérouler) et unaire@
(obtenir le premier élément):Le résultat
@UW
devrait être notre code ApplePie, adapté de la solution FizzBuzz ici . Si des sauts de ligne dans la chaîne sont supprimés, cela n'entraînera pas le code complet, donnant une erreur de syntaxe ou une sortie incorrecte.Il y a encore deux sauts de ligne en dehors de la chaîne. Nous les avons rendus obligatoires en utilisant l'
Y
opérateur (yank) - qui agit ici comme un no-op - ainsi que la façon dont Pip analyse les exécutions de lettres majuscules:Donc, si ces nouvelles lignes sont supprimées, le programme analyse différemment et ne fait pas ce qu'il est censé faire.
la source
Java 8, 7 octets par ligne, 171 octets
Un lambda vide prenant un
int
. Je soupçonne que cela obéit à l'exigence concernant les nouvelles lignes, mais je ne peux pas le prouver, et la vérifier par force brute prendrait environ un mois sur mon ordinateur. Alors ça va.Essayez-le en ligne
Assez ennuyeux à cause des commentaires de la ligne. La seule chose intéressante ici est l'utilisation d'une
System
référence nulle , qui semble nécessaire pour imprimer en standard sur moins de 8 octets par ligne. Notez également que l'print
appel de méthode est le goulot d'étranglement.Non golfé sans commentaires:
la source