El teorema de Nichomachus relaciona el cuadrado de una suma con la suma de cubos:
y tiene una hermosa visualización geométrica:
Desafío: cree la 2ª parte de esta visualización en ascii.
Deberá asegurarse de que su diagrama confirme todas las demarcaciones visuales. Esto es más simple de hacer con cuatro "colores", aunque es posible lograrlo con solo tres (vea el último ejemplo a continuación para saber cómo). Con cuatro colores, utiliza dos para distinguir entre regiones dentro de una "tira" (es decir, las diferentes partes que forman un solo cubo), y dos para distinguir entre tiras adyacentes. También puede usar más de cuatro colores si lo desea. Si algo de esto es confuso, el resultado de ejemplo a continuación debería aclararse.
De entrada y salida
La entrada es un entero entero mayor que 0. La salida es una cuadrícula ascii similar a los ejemplos a continuación, que corresponde a la cuadrícula aplanada para ese número de entrada en la imagen de arriba. Los espacios en blanco iniciales y finales están bien.
Este es el código de golf, con reglas estándar.
Resultados de muestra
N = 1
#
N = 2
#oo
o@@
o@@
N = 3
#oo+++
o@@+++
o@@+++
+++###
+++###
+++###
N = 4
#oo+++oooo
o@@+++oooo
o@@+++@@@@
+++###@@@@
+++###@@@@
+++###@@@@
oo@@@@oooo
oo@@@@oooo
oo@@@@oooo
oo@@@@oooo
N = 5
#oo+++oooo+++++
o@@+++oooo+++++
o@@+++@@@@+++++
+++###@@@@+++++
+++###@@@@+++++
+++###@@@@#####
oo@@@@oooo#####
oo@@@@oooo#####
oo@@@@oooo#####
oo@@@@oooo#####
+++++#####+++++
+++++#####+++++
+++++#####+++++
+++++#####+++++
+++++#####+++++
Versión tricolor para N = 4, gracias a @BruceForte:
#oo+++oooo
o##+++oooo
o##+++####
+++ooo####
+++ooo####
+++ooo####
oo####++++
oo####++++
oo####++++
oo####++++
Respuestas:
MATL ,
302827 bytesPruébalo en línea!
Caracteristicas adicionales:
Para 26 bytes , la siguiente versión modificada produce una salida gráfica :
¡Pruébalo en MATL Online!
La imagen está pidiendo algo de color , y solo cuesta 7 bytes:
¡Pruébalo en MATL Online!
O use una versión más larga (37 bytes) para ver cómo se construye gradualmente la matriz de caracteres :
¡Pruébalo en MATL Online!
Salidas de ejemplo
Para la entrada es
8
, lo siguiente muestra la versión básica, la salida gráfica y la salida gráfica en color.Explicación
Procedimiento general
Se construye una matriz numérica desde las capas externas a las internas en
N
pasos, dondeN
está la entrada. Cada paso sobrescribe una parte interna (superior izquierda) de la matriz anterior. Al final, los números en la matriz obtenida se cambian a caracteres.Ejemplo
Para la entrada,
4
la primera matriz esComo segundo paso, la matriz
se sobrescribe en la mitad superior de este último. Entonces lo mismo se hace con
y finalmente con
La matriz resultante es
Por último,
30
se agrega a cada entrada y los números resultantes se interpretan como puntos de código y se convierten en caracteres (comenzando en33
, correspondiente a!
).Construcción de las matrices intermedias.
Para la entrada
N
, considere disminuir los valores dek
desdeN
a1
. Para cada unok
, se genera un vector de enteros de1
ak*(k+1)
, y luego cada entrada se dividek
y se redondea. Como ejemplo, parak=4
esto da (todos los bloques tienen tamañok
excepto el último):mientras que para
k=3
el resultado sería (todos los bloques tienen tamañok
):Este vector se agrega, en cuanto a elementos con difusión, a una copia transpuesta de sí mismo; y luego
k
se agrega a cada entrada. Parak=4
esto daEsta es una de las matrices intermedias que se muestran arriba, excepto que se voltea horizontal y verticalmente. Entonces, todo lo que queda es voltear esta matriz y escribirla en la esquina superior izquierda de la matriz "acumulada" hasta ahora, inicializada en una matriz vacía para el primer (
k=N
) paso.Código
fuente
Python 2 ,
187178164162152 bytes-8 bytes gracias a Mr.Xcoder
-1 byte gracias a Stephen
-10 bytes gracias a Jonathan Frech
Pruébalo en línea!
fuente
sum(range(y))%y
->y*~-y/2%y
Carbón ,
5046 bytesPruébalo en línea! El enlace es a la versión detallada del código. Versión anterior de 50 bytes con explicación: ¡ Pruébelo en línea!
Nota: hago un bucle sobre el carácter en lugar de tratar de asignarle el carácter directamente
l
porque no se puede asignar directamente el resultado de indexar una cadena a una variable, ya que es una construcción ambigua en Charcoal. Afortunadamente, el recuento de bytes es el mismo.fuente
C (gcc) ,
135128120 bytesPruébalo en línea!
Utiliza solo tres colores.
Conceptualmente, funciona en una cuadrícula girada 180 grados:
Y calcula los colores de acuerdo con la fórmula:
fuente
gcc -O2
.g(i%m,i/m,n)%3
)?x/k&&y/k
lugar dex>=k&y>=k
R ,
131126123 bytes3 bytes guardados gracias a @Giuseppe
Pruébalo en línea!
Este sistema utiliza el mismo algoritmo que @LuisMendo 's respuesta MAT . La única diferencia es que, en lugar de convertir a caracteres, la matriz se genera con todos los valores mod4 para garantizar que cada elemento sea un único carácter ascii.
fuente
for
bucle para -1 byte :)Python 2 ,
176175 bytesPruébalo en línea!
fuente
J="".join;
(+10 bytes) y reemplaza ambos"".join
s (-2 * 7 = -14 bytes) conJ
(+2 bytes), puede guardar un byte (ya que debe haber un espacio adicional después delprint
; +1 byte) .