J'ai pensé qu'un "arc" était la meilleure façon de décrire ce modèle de nombres:
1234567887654321
1234567 7654321
123456 654321
12345 54321
1234 4321
123 321
12 21
1 1
Formellement définie, chaque ligne se compose des nombres 1 à 9-n
, des (n-1)*2
espaces et des nombres 9-n
à 1 (où n
est la ligne actuelle).
Votre tâche consiste à écrire, en utilisant le code le plus court possible, un petit script / programme qui imprime le modèle ci-dessus soumis aux restrictions suivantes:
- Vous ne pouvez pas coder en dur le motif entier. Vous ne pouvez coder en dur qu'une seule ligne du modèle au maximum.
- Votre programme doit imprimer une nouvelle ligne (toute combinaison de
\n
ou\r
) à la fin de chaque ligne.
Prêt ... prêt ... partez!
code-golf
ascii-art
number
kolmogorov-complexity
Nathan Osman
la source
la source
123456787654321
car elle est égale à11111111^2
;-)11111111^2 == 123465787654321 != 1234567887654321
(remarquez la répétition8
)Réponses:
Python 2,
65555351Raccourci en utilisant certaines des idées d' Ugoren .
la source
s=s[1:]
par boucle etwhile s:
GolfScript (25 caractères)
la source
APL (18)
Explication:
1↓⎕D
: la chaîne de chiffres ("0123456789") moins son premier élément↑∘(1↓⎕D)¨⌽⍳8
: sélectionnez les premiers [8..1] caractères ('12345678', '1234567' ...)↑
: formater comme matrice (remplir les caractères non utilisés avec des blancs)k,⌽k←
: stockagek
et affichagek
suivis de la mise en miroir verticale dek
la source
Rubis:
6150 caractèresExemple d'exécution:
la source
Befunge - 3 x 18 = 54
Je sentais que je devais faire quelque chose avec befunge, ça faisait trop longtemps que je ne l'avais pas utilisé. Ce problème semblait le plus approprié pour la langue.
Il est horriblement lent en raison de la boucle d'impression qui prend environ 8 actions par caractère (les styles de comptage diffèrent).
la source
JavaScript, 71
la source
s="1234567887654321";for(i=10;--i;)console.log(s=s.split(i).join(" "))
pour 70 caractères, @SteveWorleyC, 83 caractères
la source
Python 2,
7562Cela ne battra pas la réponse de Volatility, mais voici une autre approche utilisant les chaînes mutables de python (
bytearray
):modifier
J'ai trouvé une version plus courte, en utilisant
str.replace
:la source
Perl, 41
plus
-E
interrupteur. Nombre total de caractères sur la ligne de commande: 50nécessite au moins perl5, version 10.
la source
-E
est un ajout d'un octet au programme.Mathematica
92 85 67 5451Méthode n ° 1 : (54 caractères) Crée un tableau en utilisant la ligne #, le col # et la distance à partir du bord gauche-droite.
Méthode n ° 2 : (67 caractères) Remplissez les plages toujours plus courtes.
Méthode n ° 3 : (85 caractères) Remplissez sélectivement chaque ligne d'un tableau.
Commencez par une liste de 8 caractères d'espace. Remplacez les positions 1 et 16 par "1"; remplacer "2" aux positions 2 et 15, etc.
Méthode n ° 4 : (86 caractères) Videz sélectivement chaque ligne d'un tableau.
Méthode n ° 5 : utilisation de chaînes (92 caractères)
la source
()
, et le remplacer#1
par#
:Grid@Array[If[#2<9,#2,17-#2]/.x_/;x+#>9:>" "&,{8,16}]
Array
peut parfois faire de belles tables sans avoir à ajouter d'itérateurs.PHP, 68
(Inspiré par la réponse de HamZa)
for($n=8;$n;$r[]=$n--)echo str_replace($r," ","1234567887654321\n");
Joue sur le fait que str_replace de PHP peut accepter un tableau pour la recherche et une chaîne pour le remplacer, il remplacera chaque élément du tableau par la chaîne donnée. Après chaque itération, le numéro actuel est ajouté au tableau de recherche, le supprimant de la boucle suivante.
Exemple de code en action: http://ideone.com/9wVr0X
la source
<pre>
balises. Lorsqu'ils sont interprétés comme du texte html, les espaces sont réduits et les sauts de ligne sont ignorés, mais si vous vérifiez la source, vous verrez le contraire.Marbelous 165
Pseudocode:
la source
Python 2.x -
73656361 caractèresla source
PHP, 76
la source
K, 28
.
Vous pouvez le généraliser pour 36:
{-1_a,'|:'a:(#*m)$'m:{-1_x}\,/$1+!x}
la source
Javascript, 67 caractères
Inspiré par la réponse de steveworley (je commenterais si je pouvais):
Extrait de code
La présence de la dernière nouvelle ligne suit les règles.
mise à jour: couper 2 caractères en supprimant les parenthèses (priorité de l'opérateur) et 1 en supprimant un espace inutile
Il me semblait que ça me trollait, car peu importe combien de façons différentes j'ai essayé de raccourcir ou de simplifier en décodant un segment de code, la longueur est restée la même jusqu'à ce que je laisse la règle "Je pense que cela compte" écrite ci-dessous s'appliquer.
(Si l'impression compte comme ce qui revient quand cela est exécuté dans la console chrome)
la source
Brainfuck: 542 octets
la source
Mathematica , 59
61 en utilisant mes propres idées:
Ou 59, empruntant à la réponse de David:
la source
R: 52
la source
Haskell, 84
Un point de départ pour que quelqu'un s'améliore:
La partie la plus probable serait de faire valoir le
l++reverse l
point gratuitement, nous permettant de nous débarrasser de lalet
déclaration, mais je pourrais trouver que c'étaitap
, ce qui nécessite des importations.la source
PostScript: 105 caractères
La gestion des chaînes n'est pas facile dans PS mais peut rendre le code relativement simple:
Une version légèrement plus longue à 120 caractères mais peut générer des arcs numériques différents en remplaçant le 8 au début de la deuxième ligne par un nombre compris entre 1 et 9:
la source
GoRuby 2.1
36 caractères
Non golfé
la source
K 20
la source
TSQL, 148
Edit: jusqu'à 148 avec la suggestion de manatwork et ajustez à ORDER BY.
Lisible:
Golfé:
Sortie:
la source
1
lieu de chaîne'1'
où vous immédiatementcast
dansvarchar
. Cela me donne 149 caractères:with t as(select 1n,cast(1as varchar(max))o union all select n+1,o+char(n+49)from t where n<8)select o+space(16-2*n)+reverse(o)from t order by o desc
.Haskell, 79
Cela fonctionne en remplaçant les caractères> n par
' '
, où les caractères n proviennent de "87654321" (qui se trouve être la queue de la chaîne pour effectuer la substitution).la source
PHP: 61 caractères (ou 60 caractères si vous remplacez le \ n par un véritable saut de ligne ASCII)
(Inspiré par la réponse de GigaWatt et HamZa)
http://ideone.com/FV1NXu
la source
PowerShell: 38
Code golf
Procédure pas à pas
8..1|%{
...}
canalisez les entiers de 8 à 1 dans une boucle ForEach-Object.-join(
...)
joint la sortie du code imbriqué en une seule chaîne sans délimiteurs.1..$_
renvoie des entiers allant de 1 à l'entier courant dans la boucle.+" "*(8-$_)
ajoute un double espace, multiplié par la différence entre 8 et l'entier courant, à la sortie.+$_..1
ajoute des entiers, descendant de l'entier courant à 1, à la sortie.la source
Javascript avec lambdas, 147
Peut être vérifié dans Firefox.
la source
CJam, 22 caractères
Pas une réponse valide (car le langage a été développé après la question), et pas le plus court non plus, mais voici:
Essayez-le en ligne ici
la source
Lua, 62
la source