Dado un número N
, ¿cómo puedo imprimir un árbol de navidad de altura N
usando la menor cantidad de caracteres de código? N
se supone restringido a un valor mínimo de 3
, y un valor máximo de 30
(no son necesarios los límites y la comprobación de errores). N
se proporciona como el único argumento de línea de comando para su programa o script.
Todos los idiomas son apreciados, si ve un idioma ya implementado y puede acortarlo, edite si es posible, comente lo contrario y espere que alguien limpie el desorden. Incluya nuevas líneas y espacios en blanco para mayor claridad, pero no los incluya en el recuento de caracteres.
Un árbol de Navidad se genera como tal, con su "tronco" que consiste solo en un "*" centrado
N = 3:
*
***
*****
*
N = 4:
*
***
*****
*******
*
N = 5:
*
***
*****
*******
*********
*
N define la altura de las ramas sin incluir el tronco de una línea.
Feliz Navidad PPCG!
c=:[:((\:i.@#),}.)"1[:$&'*'"0[:>:0,~i.
Brainfuck, 240 caracteres
Todavía no está listo. Funciona, pero solo con números de un solo dígito.EDITAR: ¡Listo! Funciona para intérpretes que usan 0 como EOF. Vea
NOTE
s en la fuente comentada para aquellos con -1.EDITAR nuevamente: debo tener en cuenta que debido a que Brainfuck carece de un método estándar para leer argumentos de línea de comandos, usé stdin (entrada estándar) en su lugar. ASCII, por supuesto.
EDITAR una tercera vez: Oh querido, parece que eliminé
.
los caracteres (salida) al condensar el código. Fijo...Aquí está la gestión básica de la memoria del bucle principal. Estoy seguro de que se puede optimizar mucho para reducir el recuento de caracteres en aproximadamente 30.
Versión condensada:
Y la bonita versión:
fuente
Perl, 50 caracteres
(1 espacios relevantes)
perl: versión de una línea:
y ahora con más whitesapce:
Explicación ampliada para usuarios que no son de Perl.
fuente
Idioma: Python (a través de shell), recuento de caracteres: 64 (2 espacios significativos)
fuente
x86 asm de 16 bits, 50 bytes
¿Todavía no hay una versión de ensamblaje? :)
(Nota: N está limitado a 1 - 9 en esta versión)
Descarga aquí
fuente
Idioma: Windows Batch Script ( ¡impactante! )
fuente
setlocal enabledelayedexpansion
comandoRuby, 64 bytes
Feliz Navidad a todos!
Editar: Mejoras agregadas según lo sugerido por Joshua Swink
fuente
n=$*[0].to_i;puts [*1..n,1].map{|i|" "*(n-i)+"*"*(2*i-1)}
lo reduce a 58.Idioma: C #, recuento de caracteres: 120
Solo el código, sin formato (120 caracteres):
Versión con 109 caracteres (solo el código):
Resultado para altura = 10:
fuente
Idioma: dc (a través de shell) Recuento de caracteres: 83
Una versión de cc un poco más corta:
EDITAR: cambió la constante 10 a $ 1
fuente
python, truco "-c" ... @ 61 caracteres (y una línea)
fuente
Aquí hay una versión de Haskell razonablemente eficiente en espacio, con 107 caracteres:
ejecutándolo
Feliz Navidad a todos :)
fuente
Idioma: dc (a través de shell), recuento de caracteres: 119 (1 espacio significativo)
Solo por la oscuridad :)
fuente
Mejor C ++, alrededor de 210 caracteres:
Minimizado a 179:
fuente
Lenguaje: pitón, sin trucos, 78 caracteres
fuente
Groovy 62B
_ _
fuente
Mejorando la respuesta de ΤΖΩΤΖΙΟΥ. No puedo comentar, así que aquí hay una nueva publicación. 72 caracteres.
Usando el truco "python -c", 61 caracteres.
Aprendí la función central y que "python -c" puede aceptar más de un código de línea. Gracias ΤΖΩΤΖΙΟΥ.
fuente
C # usando Linq:
170 personajes.
fuente
AWK, 86 caracteres en una línea.
fuente
Idioma: Java, recuento de caracteres: 219
Como referencia, pude afeitar la solución Java anterior, usando recursividad, hasta 231 caracteres, desde el mínimo anterior de 269. Aunque un poco más, me gusta esta solución porque
T
está realmente orientada a objetos. Podría crear un pequeño bosque deT
instancias de tamaño aleatorio . Aquí está la última evolución en esa táctica:fuente
class T{public static void main(String[]v){long n=new Long(v[0]),r=1,s;String o="";for(;r<=n;r++){for(s=n-r;s-->0;)o+=' ';for(;++s<2*r;)o+='*';o+="\n";}while(n-->1)o+=' ';System.out.println(o+"*");}}
(199 caracteres / bytes)Idioma: PowerShell, recuento de caracteres: 41 (incluido 1 espacio)
fuente
21 personajes con dyalog APL.
⍳ da un vector de enteros que comienzan con 1.
1, ⍨ agrega uno al final del vector. Este será el pie del árbol.
'*' \ ¨⍨ da un vector de * cadenas con longitudes dadas por el vector anterior.
↑ transforma el vector en una matriz y agrega espacios a la derecha.
m ← almacena la matriz en m.
0 1 ↓ elimina cero filas y la primera columna.
⌽ invierte la matriz.
m, ⍨ se concatena con m en el lado derecho.
fuente
m,⍨⌽0 1↓m←
->(⌽,0 1↓⊢)
Idioma: C, recuento de caracteres: 133
Mejora de la versión C.
Funciona e incluso toma la altura del árbol como argumento. Necesita un compilador que tolere el código de estilo K y R.
Me siento tan sucia ahora. Este código es feo.
fuente
R (62 bytes)
Todavía no vi la solución R. Corrígeme si me lo perdí.
Salida:
fuente
Idioma: C, recuento de caracteres: 176 (2 espacios relevantes)
fuente
Versión de shell, 134 caracteres:
fuente
Idioma: Python, Cantidad de caracteres significativa: 90
Es feo pero funciona:
...
fuente
Como se trata de un CW: no me gusta que los códigos de golf siempre estén organizados en términos de "número de caracteres" o algo así. ¿No podrían organizarse en términos de número de instrucciones para el compilador / intérprete (o algún criterio similar)? Aquí está la solución Ruby nuevamente , y es básicamente la misma, pero ahora también para consumo humano:
fuente
Carbón de leña , 9 bytes (sin competencia)
Pruébalo en línea!
Verboso
Pruébalo en línea!
fuente
Jalea , 12 bytes
Pruébalo en línea!
fuente
PHP, 111 caracteres
(El último carácter debería ser una nueva línea).
Versión legible:
fuente