Como seguimiento a este desafío , ahora queremos contar el número de rectángulos en la cuadrícula con r filas yc columnas donde hay una línea que cruza cada diagonal de un cuadrado en la cuadrícula. Ahora, seguimos contando los mismos rectángulos que antes, pero esta vez también debemos incluir rectángulos que estén inclinados 45 grados.
Su objetivo es crear una función o programa que, dada la cantidad de filas r y columnas c, genere la cantidad de rectángulos en una cuadrícula diagonal con dimensiones ( r , c ).
Como demostración, esta es una animación que recorre los 37 rectángulos formados por una cuadrícula diagonal (2 x 3).
Casos de prueba
Each case is [rows, columns] = # of rectangles
[0, 0] = 0
[0, 1] = 0
[1, 0] = 0
[1, 1] = 1
[3, 2] = 37
[2, 3] = 37
[6, 8] = 2183
[7, 11] = 5257
[18, 12] = 40932
[42, 42] = 2889558
[51, 72] = 11708274
Reglas
- Este es el código de golf, por lo que gana el código más corto.
- Los componentes que resuelven esto no están permitidos.
Respuestas:
Ruby, 58 bytes
Esta es una implementación directa del algoritmo en Liberar la respuesta C de Helium Nuclei .
He estado investigando por qué funciona esta fórmula, con un éxito limitado. Es fácil confirmar que el número de rectángulos verticales es igual
(m+1)*m/2 * (n+1)*n/2
, el número de rectángulos diagonales es un poco más difícil de alcanzar.Neil ha confirmado para
m==n
que el número de rectángulos inclinados en unn*n
cuadrado es(4*n**4-n*n-3*n)/6
y que cuandom>n
es necesario agregar un adicional(m-n)(n*(4*n*n-1)/3)
(relacionado con OEIS A000447 ), aunque esto no explica que estas dos fórmulas de procedencia. He encontrado parte de la respuesta.por
m==n
, la forma dentro de la cuadrícula es un diamante azteca .El número de rectángulos en un diamante azteca es la suma del número de rectángulos grandes superpuestos para hacerlo (para el cuarto diamante, que se encuentra en un
5x5
cuadrícula,2x8
,4x6
,6x4
, y8x2
) menos el número de los rectángulos contados dos veces (el número de rectángulos en el diamante azteca anterior ).La fórmula aquí es (TeX se agregará más adelante):
Según Wolfram Alpha, la forma cerrada para
f
decir1/30*(n-1)*n*(4*n**3+14*n**2+19*n+9)
y la forma cerrada paraaztec_rect
decir, como Neil descubrió,1/6*n*(n-1)*(4*n**2+4*n+3) == 1/6*(4*n**4-n**2-3*n)
.Todavía tengo que descubrir por qué
(m-n)(n*(4*n*n-1)/3)
funciona, aunque sospecho que es porque una definición de A000447 esbinomial(2*n+1, 3)
. Te mantendré informado.Actualizar: Tengo razones para creer que la función del número de rectángulos en un diamante azteca extendido
m>n
está relacionada con el número de2k*2(n-k)
rectángulos superpuestos en el diamante menosF(m-1,n-1)
. Más resultados cuando los tengo.Actualizar: probé una ruta diferente y terminé con otra fórmula para diamantes aztecas extendidos que es explicable en su mayoría pero tiene un término que aún no entiendo. Huzzah! :RE
Un desglose rápido de esa última fórmula:
(m-n+1)*(4*n**4-n*n-3*n)/6
es el número de diamantes aztecas superpuestos de tamañon
en la estructura, comof(n,n) = (4*n**4-n*n-3*n)/6
.f(7,3)
tiene 5 diamantes superpuestos de tamaño azteca3
, mientras quef(3,3)
solo tiene 1 diamante.-f(m-1,n-1)
elimina algunos de los rectángulos duplicados del centro de los diamantes superpuestos.+(m-n)*2
representa 2 extra2
-por-(2n-1)
rectángulos para cada diamante adicional.+(m-n)*(n-2)
representa un extran
-by-n
cuadrado para cada diamante adicional.-(m-n-1)*f(n-1,n-1)
Este es el nuevo término desconcertante. Aparentemente, no he tenido en cuenta algunos cuadrados adicionales en mi conteo, pero no he descubierto dónde están en el diamante extendido.Nota: cuando
m==n
,m-n-1 = -1
lo que significa que este último término agrega cuadrados al conteo. Puede que me falte algo en mi fórmula habitual. Revelación completa, esto solo pretendía ser un parche para un borrador anterior de esta fórmula que acaba de funcionar. Claramente, todavía necesito profundizar en lo que está sucediendo, y puede ser que mi fórmula tenga algunos errores. Te mantendré informado.Russell, Gary y Weisstein, Eric W. "Diamante azteca". De MathWorld: un recurso web de Wolfram. http://mathworld.wolfram.com/AztecDiamond.html
fuente
DO,
7164 bytesPruébalo en Ideone
fuente
m==n
: el número de rectángulos inclinados en unn*n
cuadrado es(4*n*n*n*n-n*n-3*n)/6
. La secuencia es 0, 9, 51, 166, 410, 855, 1589, 2716, 4356, 6645 pero no aparece en OEIS.m>n
necesita agregar un adicional(m-n)(n*(4*n*n-1)/3)
(última parte de la fórmula tomada de OEIS A000447). Reorganizar y agregar da la fórmula de @ betseg.m==n
. Luego calculé manualmente el número de rectángulos inclinados en rectángulos pequeños y noté que el aumento de la dimensión más larga siempre agregaba la misma cantidad de rectángulos para una dimensión más corta. Introduje los incrementos en OEIS que encontraron una coincidencia en A000447.Python,
7368 bytesY aunque la siguiente versión tiene un bytecount más alto (75), fue un buen ejercicio para encontrar lugares para usar
~
:fuente
x=lambda m,n:m*~m*n*~n/4+n*((2*m-n)*(4*n*n-1)-3)/6if m>n else x(n,m)
def
. ¡Gracias! Actualizado.Convexo,
3736 bytesPruébalo en línea!
Utiliza el algoritmo de betseg modificado y optimizado para un lenguaje basado en pila. Explicación por venir cuando tenga más tiempo libre. Apuesto a que esto se puede acortar, pero no voy a molestar en este momento.
fuente
Lote, 82 bytes
fuente