Рубін, 58 байт
Це прямо реалізація алгоритму у звільненні відповіді на гелій Нуклеї .
g=->m,n{n>m ?g[n,m]:m*~m*n*~n/4+n*((2*m-n)*(4*n*n-1)-3)/6}
Я досліджував, чому ця формула працює, з обмеженим успіхом. Неважко підтвердити, що кількість прямокутних прямокутників дорівнює (m+1)*m/2 * (n+1)*n/2
, кількість діагональних прямокутників трохи невловиміше.
Ніл підтвердив для m==n
що кількість похилих прямокутників в n*n
квадраті , (4*n**4-n*n-3*n)/6
і що , коли m>n
вам потрібно додати додатковий (m-n)(n*(4*n*n-1)/3)
(пов'язаний з OEIS A000447 ), хоча це не пояснює , де ці дві формули прийшли. Я знайшов частину відповіді.
Бо m==n
форма всередині сітки - алмаз ацтеків .
Кількість прямокутників в ацтекської алмазі є сума ряду великих прямокутників накладається , щоб зробити це (за четвертий алмаз, який знаходиться в 5x5
сітці 2x8
, 4x6
, 6x4
і 8x2
) мінус число прямокутників пораховано двічі (число прямокутники в попередньому алмазному ацтеку).
Формула тут (TeX буде додано пізніше):
# superimposed rectangles, 2x(2n-2), 4*(2n-4), ...
f = lambda n: sum( (2*k)*(2*k+1)/2 * (2*n-2*k)*(2*n-2*k+1)/2 for k in range(1, n) )
aztec_rect = f(n) - f(n-1)
Згідно Wolfram Alpha, в замкнутій формі для f
IS 1/30*(n-1)*n*(4*n**3+14*n**2+19*n+9)
і закритої форми aztec_rect
є, як виявив Ніл 1/6*n*(n-1)*(4*n**2+4*n+3) == 1/6*(4*n**4-n**2-3*n)
.
Я до сих пір зрозуміти , чому (m-n)(n*(4*n*n-1)/3)
працює, хоча я підозрюю , що це тому , що одне визначення A000447 є binomial(2*n+1, 3)
. Я буду тримати вас в курсі.
Оновлення: У мене є підстави вважати, що функція кількості прямокутників у розширеному алмазному ацтеку m>n
пов'язана з кількістю накладених 2k*2(n-k)
прямокутників у мінус алмазу F(m-1,n-1)
. Більше результатів, коли я їх маю.
Оновлення: я спробував інший маршрут і закінчив іншу формулу для розширених алмазів ацтеків, яка в основному пояснюється, але має один термін, який я ще не розумію. Huzzah! : D
def f(m,n):
if n > m:
return f(n,m)
if n == 0:
return 0
else:
return(m-n+1)*(4*n**4-n*n-3*n)/6-f(m-1,n-1)+(m-n)*2+(m-n)*(n-2)-(m-n-1)*f(n-1,n-1)
Швидкий розбір цієї останньої формули:
(m-n+1)*(4*n**4-n*n-3*n)/6
- кількість накладених ацтекських алмазів розміром n
у структурі, як f(n,n) = (4*n**4-n*n-3*n)/6
. f(7,3)
має 5 накладених алмазів розміром ацтеків 3
, тоді як f(3,3)
має лише 1 алмаз.
-f(m-1,n-1)
видаляє частину повторюваних прямокутників із середини накладених ромбів.
+(m-n)*2
становить 2 додаткових 2
матрицю з розмірністю (2n-1)
прямокутників для кожного додаткового діаманта.
+(m-n)*(n-2)
рахунки за додаткову n
матрицю з розмірністю n
квадрата для кожного додаткового діаманта.
-(m-n-1)*f(n-1,n-1)
Це новий загадковий термін. Мабуть, я не рахував якихось зайвих квадратів у своєму підрахунку, але я не зрозумів, де вони знаходяться в розширеному діаманті.
Примітка: коли m==n
, m-n-1 = -1
маючи на увазі, що цей останній член додає квадрати до підрахунку. Я можу щось бракувати в моїй звичайній формулі. Повне розкриття, це було призначено лише для виправлення попереднього проекту цієї формули, який щойно спрацював. Ясна річ, мені все одно потрібно розібратися в тому, що відбувається, і, можливо, у моїй формулі є деякі помилки. Я буду тримати вас у курсі.
Рассел, Гері та Вайштайн, Ерік У. "Ацтек Алмаз". Від MathWorld - веб-ресурс Wolfram. http://mathworld.wolfram.com/AztecDiamond.html