Imprime este diamante

76

Esta pregunta se ha estado extendiendo como un virus en mi oficina. Hay una gran variedad de enfoques:

Imprima lo siguiente:

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

Las respuestas se puntúan en caracteres con menos caracteres siendo mejores.

Eric Wilson
fuente
44
¿Cuál es el criterio ganador? ¿Y esto es un desafío o un golf?
Paul R
21
Leí "kolmogorov-complex" como "code-golf".
DavidC
1
@DavidCarraher "kolmogorov-complex" fue editado después de que se hizo la pregunta. El interrogador original aún no ha especificado los criterios ganadores.
Gareth
@Gareth Mi comentario se hizo después de agregar la etiqueta "kolmogorov-complex" pero antes de agregar la etiqueta "code-golf". En ese momento la gente todavía se preguntaba si era una pregunta de código de golf.
DavidC
3
perlmonks.com/?node_id=891559 tiene soluciones perl.
b_jonas

Respuestas:

24

J, 29 26 24 23 22 21 caracteres

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

Gracias a FUZxxl por el "+truco (no creo que lo haya usado u"vantes, je).

Explicación

                  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)
Luciérnaga
fuente
En lugar de "0]escribir "+.
FUZxxl
Para un personaje menos, escriba,.0(<#":)"+9-+/~|i:8
FUZxxl
1
Aquí está su solución traducida a 25 caracteres de APL:⍪↑{(0<⍵)/⍕⍵}¨9-∘.+⍨|9-⍳17
FUZxxl
25

APL ( 33 31)

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

Si se permiten espacios que separan los números (como en la entrada de Mathematica), se puede acortar a 28 26:

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

Explicación:

  • (Programa largo :)
  • ⍳9: una lista de los números del 1 al 9
  • 1↓⎕D: ⎕Des la cadena '0123456789', 1↓elimina el primer elemento
  • ⍴∘(1↓⎕D)¨⍳9: para cada elemento N de ⍳9, tome los primeros N elementos de 1↓⎕D. Esto proporciona una lista: ["1", "12", "123", ... "123456789"] como cadenas
  • ⌽¨: invierte cada elemento de esta lista. ["1", "21", "321" ...]

  • (Programa corto :)

  • ⍳¨⍳9: la lista de 1 a N, para N [1..9]. Esto proporciona una lista [[1], [1,2], [1,2,3] ... [1,2,3,4,5,6,7,8,9]] como números.
  • ⌽∘⍕∘: el reverso de la representación de cadena de cada una de estas listas. ["1", "2 1" ...]
  • (Lo mismo de ahora en adelante :)
  • A←⌽↑: crea una matriz a partir de la lista de listas, rellena a la derecha con espacios y luego invierte eso. Esto le da al cuadrante superior del diamante. Se almacena en A.
  • A←A,0 1↑⌽A: A, con el reverso de A menos su primera columna unida a la derecha. Esto le da a la mitad superior del rectángulo. Esto se almacena en A nuevamente.
  • A⍪1↓⊖A: ⊖Aes un espejo vertical (dando la mitad inferior), 1↓elimina la fila superior de la mitad inferior y A⍪es la mitad superior encima 1↓⊖A.
marinus
fuente
55
+1 increíble. ¿Podría traducirlo para nosotros analfabetos de APL?
DavidC
3
¿No debería contarse el código no ascii en UTF-8 en lugar de los puntos de código? Esto empujaría a APL más cerca de sus parientes terrenales.
John Dvorak
55
@ JanDvorak No, ya que hay una página de códigos APL , que se ajusta a todo el conjunto de caracteres en un solo byte. Pero creo que probablemente hayas descubierto esto en algún momento desde 2013.;)
Martin Ender
23

Clojure, 191 179 bytes

#(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 bytes cambiando el exterior doseqa a loop, lo que me permitió deshacerme del atom(yay).

Un doble "for-loop". El bucle externo ( loop) recorre cada fila, mientras que el bucle interno ( doseq) recorre cada número de la fila, que está en el rango (concat (range 1 n) (range n 0 -1)), donde nes el número más alto de la fila.

(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)))))))

Debido a un error en la lógica en mi primer intento (insertando accidentalmente los espacios de prefijo entre cada número), logré obtener esto:

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

Ni siquiera es correcto ignorar el error obvio, pero se veía genial.

Carcigenicate
fuente
20

Mathematica 83 49 43 54 51

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

formato mejorado


Con 3 bytes guardados gracias a Kelly Lowder.

Análisis

La parte principal del código Sum[DiamondMatrix[k, 17], {k, 0, 8}]se puede verificar en WolframAlpha .

A continuación se muestra la lógica subyacente del enfoque, a menor escala.

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}

rejillas

DavidC
fuente
1
¡David, me ganaste esta vez! :-)
Mr.Wizard
1
Otro intento (55 caracteres):f = Table[# - Abs@k, {k, -8, 8}] &; f[f[9]] /. n_ /; n < 1 -> "" // Grid
DavidC
Todavía otro (71 caracteres):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 caracteres
Chyanog
Una visualización del código:ArrayPlot[Sum[k~DiamondMatrix~17, {k, 0, 8}], AspectRatio -> 2]
DavidC
15

Pitón 2, 72 69 67 61

No inteligente:

s=str(111111111**2)
for i in map(int,s):print'%8s'%s[:i-1]+s[-i:]
Steven Rumbalski
fuente
1
no funciona en Python 3+, lo que requiere que los padres utilicen los argumentos para imprimir :(
Griffin
77
@Griffin: en el código de golf elijo Python 2 o Python 3 dependiendo de si necesito imprimir para ser una función.
Steven Rumbalski
3
s=`0x2bdc546291f4b1`
gnibbler
1
@gnibbler. Muy inteligente sugerencia. Desafortunadamente, la reproducción de ese hexadecimal incluye un final 'L'.
Steven Rumbalski
1
@gnibbler: Esto funciona en Python ejecutándose en plataformas de 64 bits, pero no en plataformas de 32 bits.
Konrad Borowski
14

C, 79 caracteres

v;main(i){for(;i<307;putchar(i++%18?v>8?32:57-v:10))v=abs(i%18-9)+abs(i/18-8);}
conejo bebé
fuente
44
¿Explicación por favor?
Lucas Henrique
1
@LucasHenrique 307 caracteres en total. i% 18-9 es el valor x en el plano cartesiano reflejándose en el eje y. i / 18-8 es el valor y en el plano cartesiano reflejándose en el eje x. Súmelos juntos para obtener una diagonal 1: 1 (lo que hace que se forme un desplazamiento numérico en un diamante 1: 1. (32:57) -v es un valor numérico unichar para ASCII 0-9. 10 nueva línea.
Albert Renshaw
14

Pitón 2, 60 59

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

Abusa de backticks y repunits.

nneonneo
fuente
El espacio después de la inpalabra clave se puede eliminar, tal como lo hizo con el printteclado.
Konrad Borowski el
@ GlitchMr: ¡Gracias! Actualizado.
nneonneo
Me sale un extra Len el medio de siete líneas de salida.
Steven Rumbalski
No deberías ... ¿qué versión de Python estás usando?
nneonneo
12

GolfScript, 33 31 30 caracteres

Otra solución de GolfScript

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

Gracias a @PeterTaylor por otro char.

Versiones anteriores:

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

( correr en línea )

17,{8-abs" "*9,{)+}/9<.-1%1>n}%
Howard
fuente
1
No necesita los espacios finales (el texto en la pregunta no los tiene), por lo que puede omitir agregar los números a los espacios y guardar un carácter como17,{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]

Gráficos de Mathematica

chyanog
fuente
1
Muy buen trabajo.
DavidC
@DavidCarraher Gracias: D
chyanog
Me hago eco del comentario de David. ¿Cómo se te ocurrió esto?
Mr.Wizard
¿Puedo actualizar su respuesta con la modificación más corta que escribí?
Mr.Wizard
@ Mr.Wizard Ciertamente.
Chyanog
10

Javascript, 114

Mi primera entrada en 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 esto se puede acortar más, por favor comente :)

tomsmeding
fuente
¡¡maldición!! Perdí el espacio e hice medio diamante. Debo dormir ahora
Joomler
9

PHP, 92 90 caracteres

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

Calcula e imprime la distancia de Manhattan de la posición desde el centro. Imprime un espacio si es menor que 1.

Un usuario anónimo sugirió la siguiente mejora (84 caracteres):

<?for($a=-8;$a<9;$a++,print~õ)for($b=-8;$b<9;print$c>8?~ß:9-$c)$c=abs($a)+abs($b++);
Gareth
fuente
El segundo no funciona.
Christian
Sé que es muy tarde, pero siempre tengo la necesidad de jugar golf cuando veo scripts PHP. 83 bytes con <?omitido por meta . Además, parece tener algunos problemas de codificación en el segundo código.
RedClover
@Soaku El segundo no es mío. Fue sugerido como una edición de mi respuesta por un usuario anónimo. Simplemente lo agregué sin verificar, no estoy seguro de por qué el usuario no lo publicó como su propio intento. La meta pregunta pospone esta respuesta en casi 3 años.
Gareth
Es decir, que no <?incluyo en el bytecount. También he hecho algunas otras mejoras.
RedClover
8

Carbón (no competidor), 13 bytes

No compite porque el lenguaje es (mucho) más nuevo que la pregunta.

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

Pruébalo en línea!

¿Cómo?

Dibuja nueve diamantes sucesivamente más pequeños, concéntricos, uno encima del otro:

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
fuente
44
Esto debería estar compitiendo ahora según el nuevo consenso en meta.
officialaimm
7

Lisp común, 113 caracteres

(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)))

Primero noté que los elementos del diamante podrían expresarse así:

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

etc.

xcalcula recursivamente la base (1, 11, 111, etc.), que se eleva al cuadrado y luego se imprime centrada por format. Para hacer que los números suban al término más alto y vuelvan a bajar, solía (- 8 (abs (- n 8)))evitar un segundo ciclo

Strigoides
fuente
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
Copiar
fuente
6

PowerShell (2 opciones): 92 84 45 bytes

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

Gracias a Strigoides por la sugerencia de usar 1 ^ 2,11 ^ 2,111 ^ 2 ...


Afeitado algunos personajes por:

  • La eliminación $w.
  • Anidado la definición de $xen lugar de su primer uso.
  • Tomó algunas pistas de la solución de Rynant :
    • Combinó las matrices de enteros en +lugar de las ,cuales permiten la eliminación del paréntesis alrededor de las matrices y una capa de anidamiento en los bucles.
    • Se usa 9-$_para calcular la longitud de los espacios necesarios, en lugar de métodos matemáticos y de objetos más complicados. Esto también eliminó la necesidad de $y.

Explicación:

1..8+9..1o 1..9+8..1genera una matriz de enteros que asciende de 1 a 9 y luego desciende de nuevo a 1.

|%{... }canaliza la matriz entera en un ForEach-Objectbucle a través del alias incorporado %.

' '*(9-$_)+ resta el entero actual de 9, luego crea una cadena de tantos espacios al comienzo de la salida para esta línea.

[int64]($x='1'*$_)*$xse define $xcomo una cadena de 1s siempre que el entero actual sea grande. Luego se convierte a int64 (requerido para generar correctamente 111111111 2 sin usar la notación E) y al cuadrado.

ingrese la descripción de la imagen aquí

Iszi
fuente
1
Puede guardar un byte lanzándolo a una en longlugar deint64
Veskah
Otra forma de guardar un byte1..8+9..1|%{' '*(9-$_)+ +($x='1'*$_+'L')*$x}
mazzy el
5

Vim, 62 39 38 pulsaciones de teclas

¡Gracias a @DJMcMayhem por guardar una tonelada de bytes!

Mi primera respuesta de Vim, ¡tan emocionante!

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

Traté de escribir los números a través de una grabación, pero es mucho más largo.

Pruébalo en línea!

Explicación:

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

EDITAR:

Usé en Hlugar de ggy guardé 1 byte

Kritixi Lithos
fuente
Puede eliminar may cambiar `ai<space>a I<space>.
DJMcMayhem
Además, probablemente podría eliminar la etapa 3 si cambia la etapa 1 a pegar arriba y abajo.
DJMcMayhem
@DJMcMayhem Gracias por la sugerencia! Inicialmente estaba pensando en introducir un nuevo registro para los bits copiados, ¡pero esto es mucho más corto!
Kritixi Lithos
5

APL (Dyalog Classic) , 20 19 bytes

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

Pruébalo en línea!

⎕d son los dígitos '0123456789'

1↓soltar el primero ( '0')

,⍨\ exploración de catenado intercambiada, es decir, los prefijos invertidos '1' '21' '321' ... '987654321'

mezclar en una matriz acolchada con espacios:

1
21
321
...
987654321

invertir la matriz horizontalmente

(... )⍣2haz esto dos veces:

⍉⊢⍪1↓⊖la transposición ( ) de la matriz misma ( ) concatenada verticalmente ( ) con la matriz invertida verticalmente ( ) sin su primera fila ( 1↓)

ngn
fuente
4

R, 71 caracteres

Por los récords:

s=c(1:9,8:1);for(i in s)cat(rep(" ",9-i),s[0:i],s[(i-1):0],"\n",sep="")
Paolo
fuente
+1 - puede ahorrar unos pocos conmessage(rep(" ",9-i),s[c(1:i,i:1-1)])
flodel
@flodel tendría que tener en cuenta que eso se imprime en stderr, y también podría hacerlo for(i in s<-c(1:9,8:1))...para guardar un byte
Giuseppe
64 bytes
Giuseppe
4

k ( 64 50 caracteres)

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

Antiguo método:

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

skeevey
fuente
(1+!9)#'"1"es,\9#"1"
ngn
4

CJam, 31 27 bytes

CJam es mucho más nuevo que este desafío, por lo que esta respuesta no es elegible para ser aceptada. Sin embargo, este fue un pequeño desafío ordenado el sábado por la noche. ;)

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

Pruébalo aquí.

La idea es formar primero el cuadrante superior izquierdo. Así es como funciona:

Primero, forma la cadena " 123456789", usando 8S*9,:)+. Esta cadena tiene 17 caracteres de longitud. Ahora repetimos la cadena 9 veces, y luego la dividimos en subcadenas de longitud 9 con 9/. La falta de coincidencia entre 9 y 17 compensará cada dos filas un carácter a la izquierda. Imprimiendo cada subcadena en su propia línea obtenemos:

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

Entonces, si simplemente dejamos caer cualquier otra fila (que convenientemente funciona haciendo 2%), obtenemos un cuadrante como lo desee:

        1
       12
      123
     1234
    12345
   123456
  1234567
 12345678
123456789

Finalmente, duplicamos esto dos veces, transponiendo la cuadrícula en el medio para asegurarnos de que las dos operaciones de duplicación sigan diferentes ejes. El espejo en sí mismo es solo

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

Por último, solo unimos todas las líneas con líneas nuevas, con N*.

Martin Ender
fuente
3

GolfScript, 36 caracteres

Suponiendo que esto se entiende como un desafío de , aquí hay una solución básica de GolfScript:

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

Ruby, 76 caracteres

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

Mejoras bienvenidas. :)

Mark Reed
fuente
1
69 caracteres:f=->x{[*1..x]+[*1...x].reverse};puts f[9].map{|i|(f[i]*'').center 17}
Patrick Oscity
Gran comentario, no sabía el '...' y no entendía cómo podría funcionar.
GB
60 caracteres:[*-8..8].map{|i|puts' '*i.abs+"#{eval [?1*(9-i.abs)]*2*?*}"}
GB
3

Befunge-93 , 155 caracteres

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-#$:_^

Pruébalo en línea!

Definitivamente podría jugar más golf, pero es mi primer programa Funge y ya me duele la cabeza. Aunque me divertí mucho

León
fuente
3

JavaScript, 170 bytes

Mi primer código de golf :)

Golfed

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>");

Sin golf

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
fuente
Bienvenido a PPCG!
Евгений Новиков
2

Perl 56 54 caracteres

Se agregó 1 carácter para el -pcambio.

Utiliza repunidades al cuadrado para generar la secuencia.

s//12345678987654321/;s|(.)|$/.$"x(9-$1).(1x$1)**2|eg
ardnew
fuente
2

Perl, 43 + 1

agregando +1 para lo -Ecual se requiere parasay

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

editar: acortado un poco

perl chino goth
fuente
2

Python, 65

for i in map(int,str(int('1'*9)**2)):print' '*(9-i),int('1'*i)**2
caja de cartón
fuente
Intente anteponer I=int;su código y reemplazar todas las instancias posteriores de intconI
Cyoce
@Cyoce, había pensado en eso. Ahorraría 2 caracteres cada vez que intse usa, y se usa 3 veces, por lo que ahorra 6 caracteres a un costo de 6 caracteres.
cartón_box
2

Groovy 77 75

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

versión antigua:

(-8..9).each{a->(-8..9).each{c=a.abs()+it.abs();print c>8?' ':9-c};println""}
Marco Martinelli
fuente
agregó una solución maravillosa de 57 char. Puede reemplazar ambos eachcon anypara guardar dos caracteres.
Matias Bjarland
2

Scala - 86 caracteres

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

Javascript, 137

Con recursividad:

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,""))

Primera vez en CG :)

O 118

Si puedo encontrar una implementación JS que se ejecute 111111111**2con mayor precisión.
(Aquí: 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
fuente