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.
code-golf
ascii-art
kolmogorov-complexity
Eric Wilson
fuente
fuente
Respuestas:
J,
29 26 24 23 2221 caracteresGracias a FUZxxl por el
"+
truco (no creo que lo haya usadou"v
antes, je).Explicación
fuente
"0]
escribir"+
.,.0(<#":)"+9-+/~|i:8
⍪↑{(0<⍵)/⍕⍵}¨9-∘.+⍨|9-⍳17
APL (
3331)Si se permiten espacios que separan los números (como en la entrada de Mathematica), se puede acortar a
2826:Explicación:
⍳9
: una lista de los números del 1 al 91↓⎕D
:⎕D
es la cadena '0123456789',1↓
elimina el primer elemento⍴∘(1↓⎕D)¨⍳9
: para cada elemento N de⍳9
, tome los primeros N elementos de1↓⎕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" ...]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
:⊖A
es un espejo vertical (dando la mitad inferior),1↓
elimina la fila superior de la mitad inferior yA⍪
es la mitad superior encima1↓⊖A
.fuente
Clojure,
191179 bytes-12 bytes cambiando el exterior
doseq
a aloop
, lo que me permitió deshacerme delatom
(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))
, donden
es el número más alto de la fila.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:
Ni siquiera es correcto ignorar el error obvio, pero se veía genial.
fuente
Mathematica
83 49 43 5451Con 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.
fuente
f = Table[# - Abs@k, {k, -8, 8}] &; f[f[9]] /. n_ /; n < 1 -> "" // Grid
Table[9 - ManhattanDistance[{9, 10}, {j, k}], {j, 18}, {k, 18}] /. n_ /; n < 1 -> "" // Grid
Grid@#@#@9&[Table[#-Abs@k,{k,-8,8}]&]/.n_/;n<1->""
50 caracteresArrayPlot[Sum[k~DiamondMatrix~17, {k, 0, 8}], AspectRatio -> 2]
Pitón 2,
72696761No inteligente:
fuente
s=`0x2bdc546291f4b1`
'L'
.C, 79 caracteres
fuente
Pitón 2,
6059Abusa de backticks y repunits.
fuente
in
palabra clave se puede eliminar, tal como lo hizo con elprint
teclado.L
en el medio de siete líneas de salida.GolfScript,
333130 caracteresOtra solución de GolfScript
Gracias a @PeterTaylor por otro char.
Versiones anteriores:
( correr en línea )
fuente
17,{8-abs." "*10@-,1>.-1%1>n}%
Mathematica
5550454138fuente
Javascript, 114
Mi primera entrada en Codegolf!
Si esto se puede acortar más, por favor comente :)
fuente
PHP,
9290 caracteresCalcula 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):
fuente
<?
omitido por meta . Además, parece tener algunos problemas de codificación en el segundo código.<?
incluyo en el bytecount. También he hecho algunas otras mejoras.Carbón (no competidor), 13 bytes
No compite porque el lenguaje es (mucho) más nuevo que la pregunta.
Pruébalo en línea!
¿Cómo?
Dibuja nueve diamantes sucesivamente más pequeños, concéntricos, uno encima del otro:
fuente
Lisp común, 113 caracteres
Primero noté que los elementos del diamante podrían expresarse así:
etc.
x
calcula recursivamente la base (1, 11, 111, etc.), que se eleva al cuadrado y luego se imprime centrada porformat
. 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 ciclofuente
JavaScript, 81
fuente
PowerShell (2 opciones):
928445 bytesExplicación:
1..8+9..1
o1..9+8..1
genera una matriz de enteros que asciende de 1 a 9 y luego desciende de nuevo a 1.|%{
...}
canaliza la matriz entera en unForEach-Object
bucle 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'*$_)*$x
se define$x
como una cadena de1
s 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.fuente
long
lugar deint64
1..8+9..1|%{' '*(9-$_)+ +($x='1'*$_+'L')*$x}
Vim,
623938 pulsaciones de teclas¡Gracias a @DJMcMayhem por guardar una tonelada de bytes!
Mi primera respuesta de Vim, ¡tan emocionante!
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:
EDITAR:
Usé en
H
lugar degg
y guardé 1 bytefuente
ma
y cambiar`ai<space>
aI<space>
.APL (Dyalog Classic) ,
2019 bytesPrué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:⌽
invertir la matriz horizontalmente(
...)⍣2
haz esto dos veces:⍉⊢⍪1↓⊖
la transposición (⍉
) de la matriz misma (⊢
) concatenada verticalmente (⍪
) con la matriz invertida verticalmente (⊖
) sin su primera fila (1↓
)fuente
R, 71 caracteres
Por los récords:
fuente
message(rep(" ",9-i),s[c(1:i,i:1-1)])
for(i in s<-c(1:9,8:1))...
para guardar un bytek (
6450 caracteres)Antiguo método:
fuente
(1+!9)#'"1"
es,\9#"1"
CJam,
3127 bytesCJam 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. ;)
Pruébalo aquí.
La idea es formar primero el cuadrante superior izquierdo. Así es como funciona:
Primero, forma la cadena
" 123456789"
, usando8S*9,:)+
. Esta cadena tiene 17 caracteres de longitud. Ahora repetimos la cadena 9 veces, y luego la dividimos en subcadenas de longitud 9 con9/
. 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:Entonces, si simplemente dejamos caer cualquier otra fila (que convenientemente funciona haciendo
2%
), obtenemos un cuadrante como lo desee: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
Por último, solo unimos todas las líneas con líneas nuevas, con
N*
.fuente
GolfScript, 36 caracteres
Suponiendo que esto se entiende como un desafío de código de golf , aquí hay una solución básica de GolfScript:
fuente
Ruby, 76 caracteres
Mejoras bienvenidas. :)
fuente
f=->x{[*1..x]+[*1...x].reverse};puts f[9].map{|i|(f[i]*'').center 17}
[*-8..8].map{|i|puts' '*i.abs+"#{eval [?1*(9-i.abs)]*2*?*}"}
Befunge-93 , 155 caracteres
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
fuente
JavaScript, 170 bytes
Mi primer código de golf :)
Golfed
Sin golf
fuente
Perl
5654 caracteresSe agregó 1 carácter para el
-p
cambio.Utiliza repunidades al cuadrado para generar la secuencia.
fuente
Perl, 43 + 1
agregando +1 para lo
-E
cual se requiere parasay
say$"x(9-$_).(1x$_)**2for 1..9,reverse 1..8
editar: acortado un poco
fuente
Python, 65
fuente
I=int;
su código y reemplazar todas las instancias posteriores deint
conI
int
se usa, y se usa 3 veces, por lo que ahorra 6 caracteres a un costo de 6 caracteres.Groovy
7775versión antigua:
fuente
each
conany
para guardar dos caracteres.Scala - 86 caracteres
fuente
Javascript, 137
Con recursividad:
Primera vez en CG :)
O 118
Si puedo encontrar una implementación JS que se ejecute
111111111**2
con mayor precisión.(Aquí: 12345678987654320).
fuente