Introducción
Ayer vi un rompecabezas de cumpleaños . Felicidades !!
También esta semana vi un episodio del programa de televisión Bones donde se encontró un cadáver enterrado debajo de un árbol. Para calcular el momento de la muerte, contaron los anillos de los árboles.
Los anillos de los árboles se forman porque los árboles crecen más lentamente durante el invierno y más rápido durante el verano. Por lo tanto, puede calcular la edad del árbol contando los anillos. También puedes ver eventos naturales como estaciones lluviosas o secas.
Reto
Dado un número entero n >= 1
como entrada, escriba un programa completo para generar los anillos de edad del árbol.
Debido a que los anillos pueden cambiar de forma, use tres caracteres diferentes ('0', '*', '+') para mostrar los ciclos climáticos.
Edad 1
0
Edad 2
***
*0*
***
3 años
+++++
+***+
+*0*+
+***+
+++++
4 años
0000000
0+++++0
0+***+0
0+*0*+0
0+***+0
0+++++0
0000000
El tamaño del árbol es un cuadrado de lados. 2*n - 1
Victorioso
El código más corto en bytes gana.
('0', '*', '+')
entonces 5 años es*
Respuestas:
K5,
2730262522 bytesEste enfoque iterativamente "envuelve" un núcleo (comenzando con
"0"
) en los cuatro lados usando algún otro carácter ({4(|+y,)/x}
). La secuencia de envolturas estacionales está determinada por una3!
secuencia de módulo 3 ( ). Es un poco complicado lograr que el caso base se alinee a la perfección.editar:
Esta alternativa construye toda la matriz rectangular a la vez a partir del rango exclusivo provisto (
!
) invertido y unido consigo mismo después de soltar un elemento (t,1_|t:|
). Luego tomamos el producto cartesiano máximo (u|\:u:
), tomamos toda la matriz módulo 3 (3!
) e indexamos en la matriz de caracteres.En acción:
fuente
BBC Basic, 93 bytes
Las palabras clave abreviadas ayudan mucho aquí. En la línea 2, estoy usando el
VDU
comando (equivalente a Cputchar()
) para imprimir cada carácter. Esto es mucho más eficiente queP.MID$("0*+",p MOD3+1,1)
.Aquí se está ejecutando en BeebEm3 en una Mac:
fuente
CJam, 25 bytes
Pruébalo aquí.
Explicación
fuente
Matlab, 63 bytes
Ejemplo:
fuente
Python 2, 83 bytes
Imprime línea por línea. Cada línea se corta en tres partes:
Para
n=4
:Generamos la parte izquierda en reversa como
w
, clonamos sus últimos2*i
tiempos de carácter , luego agregamos la versión original sin el primer carácter.fuente
Python 2, 83 bytes
Si pensamos en el árbol como una cuadrícula de coordenadas, el símbolo en
(i,j)
está determinado pormax(abs(i),abs(j))%3
, o de manera equivalentemax(i,-i,j,-j)%3
. Para cada filai
, unimos e imprimimos los símbolos en esa fila.fuente
R
dos veces, y tiene más de 5 caracteres, por lo que la tarea gana.Pyth, 23 bytes
Pruébelo en línea: demostración
Explicación:
fuente
MATLAB,
807873 bytes¡Gracias Luis Mendo por ayudarme a afeitarme 5 bytes!
Ejemplo
Sin Golf y Explicación del Código
Nota menor
bwdist
es una función que forma parte de la caja de herramientas de procesamiento de imágenes y solo se puede ejecutar en MATLAB. Octave (IIRC) aún no se habwdist
implementado, por lo que no se puede ejecutar en Octave.fuente
eye
y multiplique por elementos por surot90
versión ed para generar la matriz "semilla":I=eye(2*input('')-1);a='0*+';a(mod(bwdist(I.*rot90(I),'chessboard'),3)+1)
Python 2, 134 bytes
fuente
Perl, 118 bytes
Más por hacer, pero una versión básica por ahora. Ahora con una deliciosa adherencia a las especificaciones adicionales.
Uso:
fuente
Matlab 92
fuente
Sed,
277252caracteres(Código de 251 caracteres + opción de línea de comando de 1 carácter).
Espera entrada en formato unario .
Ejecución de muestra:
fuente
JavaScript (ES6), 114
Uso de alerta para salida: fuente proporcional incorrecta y el resultado es feo. En el fragmento debajo de la alerta se redirige al cuerpo cortado, dando un mejor resultado. La nueva línea dentro de los backticks es significativa y contada.
Prueba a ejecutar el fragmento en Firefox.
fuente
Test running the snippet in Firefox
pero obviamente estaba bromeando, Chrome (sin versión de Chrome) no es compatible con EcmaScritpt 6, faltan las=>
funciones....
. Todavía lejos de ES6Ruby, 85 caracteres
Ejecución de muestra:
fuente
Moonscript - 104 bytes
fuente
C, 138 bytes
Función
t
toma un parámetro entero: la edad.Sin golf (con
main
función para ejecutar fácilmente el anterior):El
stdlib.h
puede ser necesario en algunos sistemas, ya que sin ella el tipo de retorno de la función no declaradacalloc
dejaría de pagar aint
. Debido a queint
ychar*
no son necesariamente del mismo tamaño, se podría escribir un puntero no válidoc
. En la mayoría de sistemas de 32 bits tantochar*
yint
tienen el mismo tamaño, pero esto no es cierto para sistemas de 64 bits.fuente