Imprimer ce diamant

76

Cette question se répand comme un virus dans mon bureau. Il existe une grande variété d'approches:

Imprimer ce qui suit:

        1
       121
      12321
     1234321
    123454321
   12345654321
  1234567654321
 123456787654321
12345678987654321
 123456787654321
  1234567654321
   12345654321
    123454321
     1234321
      12321
       121
        1

Les réponses sont marquées en caractères avec moins de caractères étant meilleurs.

Eric Wilson
la source
4
Quel est le critère gagnant? Et est-ce un défi ou un golf?
Paul R
21
Je lis "kolmogorov-complex" comme "code-golf".
DavidC
1
@DavidCarraher "kolmogorov-complex" a été modifié après la question. Le questionneur d'origine n'a pas encore spécifié les critères de gain.
Gareth
@Gareth Mon commentaire a été fait après l'ajout de la balise "kolmogorov-complex", mais avant l'ajout de la balise "code-golf". A cette époque, les gens demandaient encore s'il s'agissait d'une question de code-golf.
DavidC
3
perlmonks.com/?node_id=891559 contient des solutions Perl.
b_jonas

Réponses:

24

J, 29 26 24 23 22 21 caractères

,.(0&<#":)"+9-+/~|i:8

Merci à FUZxxl pour le "+truc (je ne pense pas l'avoir déjà utilisée u"vauparavant, hé).

Explication

                  i:8  "steps" vector: _8 _7 _6 ... _1 0 1 ... 7 8
                 |     magnitude
              +/~      outer product using +
            9-         inverts the diamond so that 9 is in the center
  (      )"+           for each digit:
      #                  copy
   0&<                   if positive then 1 else 0
       ":                copies of the string representation of the digit
                         (in other words: filter out the strictly positive
                          digits, implicitly padding with spaces)
,.                     ravel each item of the result of the above
                       (necessary because the result after `#` turns each
                        scalar digit into a vector string)
Luciole
la source
Au lieu de "0], écrivez "+.
FUZxxl
Pour un personnage de moins, écrivez,.0(<#":)"+9-+/~|i:8
FUZxxl
1
Voici votre solution traduite en 25 caractères de APL:⍪↑{(0<⍵)/⍕⍵}¨9-∘.+⍨|9-⍳17
FUZxxl
25

APL ( 33 31)

A⍪1↓⊖A←A,0 1↓⌽A←⌽↑⌽¨⍴∘(1↓⎕D)¨⍳9

Si des espaces séparant les nombres sont autorisés (comme dans l'entrée Mathematica), vous pouvez le réduire à 28 26:

A⍪1↓⊖A←A,0 1↓⌽A←⌽↑⌽∘⍕∘⍳¨⍳9

Explication:

  • (Programme long :)
  • ⍳9: une liste des nombres 1 à 9
  • 1↓⎕D: ⎕Dest la chaîne '0123456789', 1↓supprime le premier élément
  • ⍴∘(1↓⎕D)¨⍳9: pour chaque élément N de ⍳9, prenons les N premiers éléments de 1↓⎕D. Cela donne une liste: ["1", "12", "123", ... "123456789"] sous forme de chaînes
  • ⌽¨: inverser chaque élément de cette liste. ["1", "21", "321" ...]

  • (Programme court :)

  • ⍳¨⍳9: la liste de 1 à N, pour N [1..9]. Cela donne une liste [[1], [1,2], [1,2,3] ... [1,2,3,4,5,6,7,8,9]] sous forme de nombres.
  • ⌽∘⍕∘: l'inverse de la représentation sous forme de chaîne de chacune de ces listes. ["1", "2 1" ...]
  • (La même chose à partir de maintenant :)
  • A←⌽↑: crée une matrice à partir de la liste de listes, en ajoutant des espaces à droite, puis en inversant le sens. Cela donne le quadrant supérieur du diamant. Il est stocké dans A.
  • A←A,0 1↑⌽A: A, avec l'inverse de A moins sa première colonne attachée à droite. Cela donne la moitié supérieure du rectangle. Ceci est ensuite stocké dans A à nouveau.
  • A⍪1↓⊖A: ⊖Aest un miroir vertical (donnant la moitié inférieure), 1↓supprime la rangée supérieure de la moitié inférieure et A⍪correspond à la moitié supérieure 1↓⊖A.
marinus
la source
5
+1 incroyable. Pourriez-vous le traduire pour nous analphabètes APL?
DavidC
3
Le code non-ASCII ne devrait-il pas être compté dans UTF-8 au lieu de points de code? Cela rapprocherait APL de ses parents terrestres.
John Dvorak
5
@JanDvorak Non, car il existe une page de code APL , qui contient tout le jeu de caractères dans un seul octet. Mais je pense que vous avez probablement compris cela à un moment donné depuis 2013.;)
Martin Ender
23

Clojure, 191 179 octets

#(loop[[r & s](range 18)h 1](print(apply str(repeat(if(< r 8)(- 8 r)(- r 8))\ )))(doseq[m(concat(range 1 h)(range h 0 -1))](print m))(println)(if s(recur s((if(< r 8)inc dec)h))))

-12 octets en changeant l'extérieur doseqen a loop, ce qui m'a permis de me débarrasser de atom(yay).

Un double "pour-boucle". La boucle externe ( loop) parcourt chaque ligne, tandis que la boucle interne ( doseq) parcourt chaque numéro de la ligne, qui se trouve dans la plage (concat (range 1 n) (range n 0 -1)), où nest le nombre le plus élevé de la ligne.

(defn diamond []
  (let [spaces #(apply str (repeat % " "))] ; Shortcut function that produces % many spaces
    (loop [[row-n & r-rows] (range 18) ; Deconstruct the row number from the range
           high-n 1] ; Keep track of the highest number that should appear in the row
      (let [top? (< row-n 8) ; Are we on the top of the diamond?
            f (if top? inc dec) ; Decided if we should increment or decrement
            n-spaces (if top? (- 8 row-n) (- row-n 8))] ; Calculate how many prefix-spaces to print
        (print (spaces n-spaces)) ; Print prefix-spaces
        (doseq [m (concat (range 1 high-n) (range high-n 0 -1))] ; Loop over the row of numbers
          (print m)) ; Print the number
        (println)

        (if r-rows
          (recur r-rows (f high-n)))))))

En raison d'un bug dans la logique de ma première tentative (insertion accidentelle des espaces de préfixe entre chaque numéro), j'ai réussi à obtenir ceci:

1
1       2       1
1      2      3      2      1
1     2     3     4     3     2     1
1    2    3    4    5    4    3    2    1
1   2   3   4   5   6   5   4   3   2   1
1  2  3  4  5  6  7  6  5  4  3  2  1
1 2 3 4 5 6 7 8 7 6 5 4 3 2 1
12345678987654321
1 2 3 4 5 6 7 8 9 10 9 8 7 6 5 4 3 2 1
1  2  3  4  5  6  7  8  9  8  7  6  5  4  3  2  1
1   2   3   4   5   6   7   8   7   6   5   4   3   2   1
1    2    3    4    5    6    7    6    5    4    3    2    1
1     2     3     4     5     6     5     4     3     2     1
1      2      3      4      5      4      3      2      1
1       2       3       4       3       2       1
1        2        3        2        1
1         2         1

Même pas correct en ignorant le bogue évident, mais ça avait l'air cool.

Carcigenicate
la source
20

Mathematica 83 49 43 54 51

Print@@#&/@(Sum[k~DiamondMatrix~17,{k,0,8}]/.0->" ")

mise en forme améliorée


Avec 3 octets sauvés grâce à Kelly Lowder.

Une analyse

La partie principale du code Sum[DiamondMatrix[k, 17], {k, 0, 8}], peut être vérifiée sur WolframAlpha .

Ce qui suit montre la logique sous-jacente de l’approche, à une plus petite échelle.

a = 0~DiamondMatrix~5;
b = 1~DiamondMatrix~5;
c = 2~DiamondMatrix~5;
d = a + b + c;
e = d /. 0 -> "";
Grid /@ {a, b, c, d, e}

grilles

DavidC
la source
1
David, tu m'as battu cette fois! :-)
Mr.Wizard
1
Un autre essai (55 caractères):f = Table[# - Abs@k, {k, -8, 8}] &; f[f[9]] /. n_ /; n < 1 -> "" // Grid
DavidC
Encore un autre (71 caractères):Table[9 - ManhattanDistance[{9, 10}, {j, k}], {j, 18}, {k, 18}] /. n_ /; n < 1 -> "" // Grid
DavidC
2
Grid@#@#@9&[Table[#-Abs@k,{k,-8,8}]&]/.n_/;n<1->""50 caractères.
Chyanog
Un affichage visuel du code:ArrayPlot[Sum[k~DiamondMatrix~17, {k, 0, 8}], AspectRatio -> 2]
DavidC
15

Python 2, 72 69 67 61

Pas intelligent:

s=str(111111111**2)
for i in map(int,s):print'%8s'%s[:i-1]+s[-i:]
Steven Rumbalski
la source
1
ne fonctionne pas en Python 3+, ce qui nécessite des parens autour des arguments pour imprimer :(
Griffin
7
@Griffin: Dans le golf de code, je choisis Python 2 ou Python 3 selon que j'ai besoin de l’impression pour être une fonction.
Steven Rumbalski
3
s=`0x2bdc546291f4b1`
Gnibbler
1
@gnibbler. Suggestion très intelligent. Malheureusement, le repr de cet hexadécimal inclut un point final 'L'.
Steven Rumbalski
1
@gnibbler: cela fonctionne dans Python fonctionnant sur des plates-formes 64 bits, mais pas sur des plates-formes 32 bits.
Konrad Borowski
14

C, 79 caractères

v;main(i){for(;i<307;putchar(i++%18?v>8?32:57-v:10))v=abs(i%18-9)+abs(i/18-8);}
bébé-lapin
la source
4
Explication s'il vous plaît?
Lucas Henrique
1
@LucasHenrique 307 caractères au total. i% 18-9 est la valeur x sur le plan cartésien qui se reflète sur l'axe des y. i / 18-8 est la valeur de y sur le plan cartésien se reflétant sur l'axe des x. Sommez-les ensemble pour obtenir une diagonale de 1: 1 (ce qui provoque un décalage numérique sur un diamant de 1: 1. (32:57) -v est la valeur unichar numérique pour ASCII 0-9. 10 nouvelle ligne.
Albert Renshaw
14

Python 2, 60 59

for n in`111111111**2`:print`int('1'*int(n))**2`.center(17)

Abuse des backticks et repunits.

Nneonneo
la source
L'espace après le inmot-clé peut être supprimé, comme vous l'avez fait avec le printclavier.
Konrad Borowski
@ GlitchMr: Merci! Mis à jour.
nneonneo
Je reçois un extra Ldans les sept lignes du milieu.
Steven Rumbalski
Vous ne devriez pas ... quelle version de Python utilisez-vous?
Nneonneo
12

GolfScript, 33 31 30 caractères

Une autre solution GolfScript

17,{8-abs." "*10@-,1>.-1%1>n}%

Merci à PeterTaylor pour un autre personnage.

Les versions de Previos:

17,{8-abs" "*9,{)+}/9<.-1%1>+}%n*

( courir en ligne )

17,{8-abs" "*9,{)+}/9<.-1%1>n}%
Howard
la source
1
Vous n'avez pas besoin des espaces de fin (le texte de la question ne les contient pas), vous pouvez donc ignorer l'ajout des nombres aux espaces et enregistrer un caractère sous la forme17,{8-abs." "*10@-,1>.-1%1>n}%
Peter Taylor
12

Mathematica 55 50 45 41 38

(10^{9-Abs@Range[-8,8]}-1)^2/81//Grid

Grid[(10^Array[{9}-Abs[#-9]&,17]-1)^2/81]

Mathematica graphiques

chyanog
la source
1
Très bon travail.
DavidC
@DavidCarraher Merci: D
chyanog Le
Je fais écho à la remarque de David. Comment avez-vous trouvé ça?
Mr.Wizard
Puis-je mettre à jour votre réponse avec la modification plus courte que j'ai écrite?
Mr.Wizard
@ Mr.Wizard Certainement.
Chyanog
10

Javascript, 114

Ma première entrée sur Codegolf!

for(l=n=1;l<18;n-=2*(++l>9)-1,console.log(s+z)){for(x=n,s="";x<9;x++)z=s+=" ";for(x=v=1;x<2*n;v-=2*(++x>n)-1)s+=v}

Si cela peut être raccourci davantage, veuillez commenter :)

tomsmeding
la source
bon sang!! J'ai manqué l'espace et fait demi-diamant. Je dois dormir maintenant
Joomler
9

PHP, 92 90 caractères

<?for($a=-8;$a<9;$a++){for($b=-8;$b<9;){$c=abs($a)+abs($b++);echo$c>8?" ":9-$c;}echo"\n";}

Calcule et affiche la distance de Manhattan entre la position et le centre. Imprime un espace s'il est inférieur à 1.

Un utilisateur anonyme a suggéré l'amélioration suivante (84 caractères):

<?for($a=-8;$a<9;$a++,print~õ)for($b=-8;$b<9;print$c>8?~ß:9-$c)$c=abs($a)+abs($b++);
Gareth
la source
2ème ne fonctionne pas.
Christian
Je sais que c'est très tard, mais j'ai toujours besoin de jouer au golf quand je vois des scripts PHP. 83 octets avec <?sautés par méta . En outre, vous semblez avoir des problèmes d’encodage dans le second code.
RedClover
@ Soaku Le second n'est pas le mien. Il a été suggéré comme une modification à ma réponse par un utilisateur anonyme. Je l'ai simplement ajouté sans vérifier - je ne savais pas vraiment pourquoi l'utilisateur ne l'avait pas simplement posté comme sa propre tentative. La méta question post-date cette réponse de presque 3 ans.
Gareth
Je voulais dire, que je <?n'inclus pas dans le décompte. J'ai également apporté d'autres améliorations.
RedClover
8

Fusain (non-concurrent), 13 octets

Pas de compétition parce que la langue est (beaucoup) plus récente que la question.

F⁹«GX⁻⁹ιI⁺ι¹→

Essayez-le en ligne!

Comment?

Dessine neuf diamants concentriques successivement plus petits, successivement plus petits:

F⁹«   Loop ι from 0 to 8:
GX     Draw a (filled) polygon with four equilateral diagonal sides
⁻⁹ι      of length 9-ι
I⁺ι¹    using str(ι+1) as the character
→       Move right one space before drawing the next one
DLosc
la source
4
Cela devrait être maintenant en compétition selon le nouveau consensus de la méta.
officialaimm
7

Common Lisp, 113 caractères

(defun x(n)(if(= n 0)1(+(expt 10 n)(x(1- n)))))(dotimes(n 17)(format t"~17:@<~d~>~%"(expt(x(- 8(abs(- n 8))))2)))

J'ai d'abord remarqué que les éléments du diamant pouvaient être exprimés comme suit:

  1   =   1 ^ 2
 121  =  11 ^ 2
12321 = 111 ^ 2

etc.

xcalcule récursivement la base (1, 11, 111, etc.), qui est au carré, puis imprimée au centre de format. Pour que les nombres montent au plus haut terme et redescendent, j’avais l’habitude (- 8 (abs (- n 8)))d’éviter une deuxième boucle.

Strigoides
la source
7

JavaScript, 81

for(i=9;--i+9;console.log(s))for(j=9;j;s=j--^9?k>0?k+s+k:" "+s:k+"")k=i<0?j+i:j-i
copie
la source
6

PowerShell (2 options): 92 84 45 octets

1..8+9..1|%{' '*(9-$_)+[int64]($x='1'*$_)*$x}
1..9+8..1|%{' '*(9-$_)+[int64]($x='1'*$_)*$x}

Merci à Strigoides pour la suggestion d’utiliser 1 ^ 2,11 ^ 2 111 ^ 2 ...


Rasé des personnages par:

  • Éliminer $w.
  • Imbriqué la définition de $xà la place de sa première utilisation.
  • A pris quelques indices de la solution de Rynant :
    • La combinaison des tableaux de nombres entiers avec +au lieu de ,permet l’élimination des parenthèses entourant les tableaux et une couche d’emboîtement dans les boucles.
    • Utilisé 9-$_pour calculer la longueur des espaces nécessaires, au lieu de méthodes mathématiques et d'objet plus compliquées. Cela a également éliminé le besoin de $y.

Explication:

1..8+9..1ou 1..9+8..1génère un tableau d’entiers allant de 1 à 9 puis descendant à 1.

|%{... }dirige le tableau d'entiers dans une ForEach-Objectboucle via l'alias intégré %.

' '*(9-$_)+ soustrait le nombre entier actuel de 9, puis crée une chaîne de ce nombre d'espaces au début de la sortie pour cette ligne.

[int64]($x='1'*$_)*$xdéfinit $xcomme une chaîne de 1s tant que le nombre entier actuel est grand. Ensuite, il est converti en int64 (requis pour générer correctement la sortie 111111111 2 sans utiliser la notation E) et au carré.

entrez la description de l'image ici

Iszi
la source
1
Vous pouvez enregistrer un octet en longint64
définissant
Une autre façon de sauvegarder un octet1..8+9..1|%{' '*(9-$_)+ +($x='1'*$_+'L')*$x}
mazzy
5

Vim, 62 39 38 frappes

Merci à @DJMcMayhem pour avoir économisé une tonne d'octets!

Ma première réponse Vim, tellement excitante!

i12345678987654321<ESC>qqYP9|xxI <ESC>YGpHq7@q

J'ai essayé d'écrire les nombres via un enregistrement, mais c'est beaucoup plus long

Essayez-le en ligne!

Explication:

i123 ... 321<ESC>                   Write this in insert mode and enter normal mode
qq                                  Start recording into register q
  YP                                Yank this entire line and Paste above
    9|                              Go to the 9th column
      xx                            Delete character under cursor twice
        I <ESC>                     Go to the beginning of the line and insert a space and enter normal mode
               Y                    Yank this entire line
                G                   Go to the last line
                 p                  Paste in the line below
                  H                 Go to the first line
                   q                End recording
                    7@q             Repeat this 7 times

MODIFIER:

J'ai utilisé Hau lieu de gget enregistré 1 octet

Kritixi Lithos
la source
Vous pouvez supprimer le maet changer `ai<space>en I<space>.
DJMcMayhem
En outre, vous pourriez probablement supprimer l'étape 3 si vous modifiez l'étape 1 en collant dessus et dessous.
DJMcMayhem
@DJMcMayhem Merci pour cette suggestion! Je pensais au départ à l’introduction d’un nouveau registre pour les bits copiés, mais c’est beaucoup plus court!
Kritixi Lithos
5

APL (Dyalog Classic) , 20 19 octets

(⍉⊢⍪1↓⊖)⍣2⌽↑,⍨\1↓⎕d

Essayez-le en ligne!

⎕d sont les chiffres '0123456789'

1↓déposer le premier ( '0')

,⍨\ swap catenate scan, c’est-à-dire les préfixes inversés '1' '21' '321' ... '987654321'

mélanger dans une matrice garnie d'espaces:

1
21
321
...
987654321

inverser la matrice horizontalement

(... )⍣2faites ceci deux fois:

⍉⊢⍪1↓⊖la transposition ( ) de la matrice elle-même ( ) concaténée verticalement ( ) avec la matrice inversée verticalement ( ) sans sa première ligne ( 1↓)

ngn
la source
4

R, 71 caractères

Pour les records:

s=c(1:9,8:1);for(i in s)cat(rep(" ",9-i),s[0:i],s[(i-1):0],"\n",sep="")
Paolo
la source
+1 - peut sauver quelques-uns avecmessage(rep(" ",9-i),s[c(1:i,i:1-1)])
flodel
@flodel vous devez noter que cela affiche sur stderr, et vous pouvez également faire for(i in s<-c(1:9,8:1))...pour enregistrer un octet
Giuseppe
64 octets
Giuseppe
4

k ( 64 50 caractères)

-1'(::;1_|:)@\:((|!9)#'" "),'$i*i:"J"$(1+!9)#'"1";

Ancienne méthode:

-1',/(::;1_|:)@\:((|!9)#\:" "),',/'+(::;1_'|:')@\:i#\:,/$i:1+!9;

Skeevey
la source
(1+!9)#'"1"est,\9#"1"
ngn
4

CJam, 31 27 octets

CJam est beaucoup plus récent que ce défi, donc cette réponse ne peut pas être acceptée. C'était un petit défi du samedi soir, cependant. ;)

8S*9,:)+9*9/2%{_W%1>+z}2*N*

Testez-le ici.

L'idée est de former le quadrant supérieur gauche en premier. Voici comment cela fonctionne:

Commencez par former la chaîne " 123456789"en utilisant 8S*9,:)+. Cette chaîne est composée de 17 caractères. Maintenant, nous répétons la chaîne 9 fois, puis nous la coupons en sous-chaînes de longueur 9 avec 9/. La non-concordance entre 9 et 17 décale tous les deux rangées un caractère à gauche. En imprimant chaque sous-chaîne sur sa propre ligne, on obtient:

        1
23456789 
       12
3456789  
      123
456789   
     1234
56789    
    12345
6789     
   123456
789      
  1234567
89       
 12345678
9        
123456789

Donc, si nous supprimons simplement une ligne sur deux (ce qui fonctionne bien en faisant 2%), nous obtenons le quadrant souhaité:

        1
       12
      123
     1234
    12345
   123456
  1234567
 12345678
123456789

Enfin, nous reflétons cela deux fois, en transposant la grille entre les deux pour garantir que les deux opérations de mise en miroir suivent des axes différents. Le reflet lui-même est juste

_      "Duplicate all rows.";
 W%    "Reverse their order.";
   1>  "Discard the first row (the centre row).";
     + "Add the other rows.";

Enfin, nous rejoignons toutes les lignes avec des nouvelles lignes, avec N*.

Martin Ender
la source
3

GolfScript, 36 caractères

En supposant qu'il s'agisse d'un défi , voici une solution de base de GolfScript:

9,.);\-1%+:a{a{1$+7-.0>\" "if}%\;n}%
Ilmari Karonen
la source
3

Ruby, 76 caractères

def f(a)a+a.reverse[1..-1]end;puts f [*1..9].map{|i|f([*1..i]*'').center 17}

Les améliorations sont les bienvenues. :)

Mark Reed
la source
1
69 caractères:f=->x{[*1..x]+[*1...x].reverse};puts f[9].map{|i|(f[i]*'').center 17}
Patrick Oscity
Excellent commentaire, je ne connaissais pas le "..." et je ne comprenais pas comment cela pourrait fonctionner.
GB
60 caractères:[*-8..8].map{|i|puts' '*i.abs+"#{eval [?1*(9-i.abs)]*2*?*}"}
GB
3

Befunge-93 , 155 caractères

9:v:<,+55<v5*88<v-\9:$_68v
> v>     ^>3p2vpv  -1<!  *
, 1^  2p45*3+9<4:    ,:  +
g -^_75g94+4pg7^!    +^ ,<
1 : ^ `0    :-1$_:68*^$
^1_$:55+\-0\>:#$1-#$:_^

Essayez-le en ligne!

Cela pourrait certainement être plus joué au golf, mais c’est mon premier programme Funge et ma tête me fait déjà mal. Eu beaucoup de plaisir, cependant

Leo
la source
3

JavaScript, 170 octets

Mon premier code golf :)

Golfé

a="";function b(c){a+=" ".repeat(10-c);for(i=1;i<c;i++)a+=i;for(i=2;i<c;i++)a+=c-i;a+="\n";}for(i=2;i<11;i++)b(i);for(i=9;i>1;i--)b(i);document.write("<pre>"+a+"</pre>");

Ungolfed

var str = "";
function row(line) {
    str += " ".repeat(10 - line);
    for (var i = 1; i < line; i++) {
        str += i;
    }
    for (var i = 2; i < line; i++) {
        str += line - i;
    }
    str += "\n";
}
for (var line = 2; line < 11; line++) {
    row(line);
}
for (var line = 9; line > 1; line--) {
    row(line);
}
document.write("<pre>" + str + "</pre>");
Cr4xy
la source
Bienvenue chez PPCG!
вгений Новиков
2

Perl 56 54 caractères

Ajout de 1 caractère pour le -pcommutateur.

Utilise les repunits au carré pour générer la séquence.

s//12345678987654321/;s|(.)|$/.$"x(9-$1).(1x$1)**2|eg
ardenne
la source
2

Perl, 43 + 1

ajouter +1 pour -Elequel est requis poursay

say$"x(9-$_).(1x$_)**2for 1..9,reverse 1..8

edit: raccourci un peu

goth perl chinois
la source
2

Python, 65 ans

for i in map(int,str(int('1'*9)**2)):print' '*(9-i),int('1'*i)**2
boîte en carton
la source
Essayez de faire précéder I=int;votre code et de remplacer toutes les instances ultérieures de intparI
Cyoce
@Cyoce j'y avais pensé. Cela permettrait d'économiser 2 caractères à chaque intutilisation, et 3 fois, de sorte qu'il enregistre 6 caractères pour un coût de 6 caractères.
cardboard_box
2

Groovy 77 75

i=(-8..9);i.each{a->i.each{c=a.abs()+it.abs();print c>8?' ':9-c};println""}

ancienne version:

(-8..9).each{a->(-8..9).each{c=a.abs()+it.abs();print c>8?' ':9-c};println""}
Marco Martinelli
la source
ajout d'une solution groovy de 57 caractères. Vous pouvez remplacer les deux eachpar anypour enregistrer deux caractères.
Matias Bjarland
2

Scala - 86 caractères

val a="543210/.-./012345";for(i<-a){for(j<-a;k=99-i-j)print(if(k<1)" "else k);println}
Rex Kerr
la source
2

Javascript, 137

Avec récursion:

function p(l,n,s){for(i=l;i;s+=" ",i--);for(i=1;i<=n;s+=i++);for(i-=2;i>0;s+=i--);return(s+="\n")+(l?p(l-1,n+1,"")+s:"")}alert(p(8,1,""))

Première fois sur CG :)

Ou 118

Si je peux trouver une implémentation JS qui s’exécute 111111111**2avec une plus grande précision.
(Ici: 12345678987654320).

a="1",o="\n";for(i=0;i<9;i++,o+="         ".substr(i)+a*a+"\n",a+="1");for(i=8;i;i--)o+=o.split("\n")[i]+"\n";alert(o)
Nippey
la source