Rubinowy, 58 bajtów
Jest to prosta implementacja algorytmu w wyzwalaniu odpowiedzi C Helium Nuclei .
g=->m,n{n>m ?g[n,m]:m*~m*n*~n/4+n*((2*m-n)*(4*n*n-1)-3)/6}
Badałem, dlaczego ta formuła działa, z ograniczonym powodzeniem. Łatwo jest potwierdzić, że liczba prostokątów pionowych jest równa (m+1)*m/2 * (n+1)*n/2
, liczba prostokątów diagonalnych jest nieco bardziej nieuchwytna.
Neil został potwierdzony przez m==n
że liczba pochylonych prostokątów w n*n
kwadracie jest (4*n**4-n*n-3*n)/6
i że kiedy m>n
trzeba dodać dodatkowy (m-n)(n*(4*n*n-1)/3)
(związane OEIS A000447 ), choć nie wyjaśnia, gdzie te dwie formuły pochodzi. Znalazłem część odpowiedzi.
Ponieważ m==n
kształt wewnątrz siatki to diament Azteków .
Liczba prostokątów w Azteków diamentu jest sumą liczby dużych prostokątów nałożony aby uczynić go (za czwarty diament, który znajduje się w 5x5
sieci, 2x8
, 4x6
, 6x4
, i 8x2
) minus liczba prostokątów liczone dwukrotnie (liczba prostokąty w poprzednim diamentie azteckim).
Formuła tutaj jest (TeX do dodania później):
# 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)
Zgodnie z Wolfram Alpha, zamkniętej formie za f
Is 1/30*(n-1)*n*(4*n**3+14*n**2+19*n+9)
a zamkniętym formularz aztec_rect
jest, jak Neil odkryto 1/6*n*(n-1)*(4*n**2+4*n+3) == 1/6*(4*n**4-n**2-3*n)
.
Muszę jeszcze odkryć, dlaczego (m-n)(n*(4*n*n-1)/3)
działa, ale podejrzewam, że dzieje się tak, ponieważ jedna definicja A000447 jest binomial(2*n+1, 3)
. Będę cię informować.
Aktualizacja: Mam powody sądzić, że funkcja liczby prostokątów w rozszerzonym azteckim diamentie m>n
jest związana z liczbą nałożonych 2k*2(n-k)
prostokątów w diamentie minus F(m-1,n-1)
. Więcej wyników, gdy je mam.
Aktualizacja: Próbowałem innej drogi i skończyłem z inną formułą dla rozszerzonych diamentów azteckich, która jest w większości możliwa do wyjaśnienia, ale ma jeden termin, którego jeszcze nie rozumiem. Huzzah! :RE
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)
Szybki podział tej ostatniej formuły:
(m-n+1)*(4*n**4-n*n-3*n)/6
to liczba nałożonych na siebie diamentów azteckich wielkości n
w strukturze, jak f(n,n) = (4*n**4-n*n-3*n)/6
. f(7,3)
ma 5 nałożonych na siebie diamentów Azteków 3
, a f(3,3)
ma tylko 1 diament.
-f(m-1,n-1)
usuwa niektóre zduplikowane prostokąty ze środka nałożonych diamentów.
+(m-n)*2
Rachunki dla 2 dodatkowych 2
-by- (2n-1)
prostokątów dla każdego dodatkowego diamentu.
+(m-n)*(n-2)
Rachunki za dodatkową n
-by- n
kwadratowy dla każdego dodatkowego diamentu.
-(m-n-1)*f(n-1,n-1)
To nowy zagadkowy termin. Najwyraźniej nie uwzględniłem dodatkowych kwadratów w moim liczeniu, ale nie zorientowałem się, gdzie znajdują się w przedłużonym diamentie.
Uwaga: kiedy m==n
, m-n-1 = -1
co oznacza, że ten ostatni termin dodaje kwadraty do liczenia. Być może brakuje mi czegoś w mojej regularnej formule. Pełne ujawnienie, miało to być jedynie łatka do wcześniejszego szkicu tej formuły, która właśnie się sprawdziła. Oczywiście nadal muszę zagłębiać się w to, co się dzieje i być może moja formuła zawiera w sobie pewne błędy. Będę was informować.
Russell, Gary i Weisstein, Eric W. „Aztec Diamond”. From MathWorld - zasoby internetowe Wolfram. http://mathworld.wolfram.com/AztecDiamond.html