Rubino, 58 byte
Questa è un'implementazione diretta dell'algoritmo nella risposta C di Rilascio di 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}
Ho studiato perché questa formula funziona, con un successo limitato. È facile confermare che il numero di rettangoli verticali è uguale a (m+1)*m/2 * (n+1)*n/2, il numero di rettangoli diagonali è un po 'più sfuggente.
Neil ha confermato per m==nil numero di rettangoli inclinati in un n*nquadrato è (4*n**4-n*n-3*n)/6e che quando m>n è necessario aggiungere un ulteriore (m-n)(n*(4*n*n-1)/3)(in relazione alla OEIS A000447 ), anche se questo non spiega dove queste due formule provenienza. Ho trovato parte della risposta.
Perché m==n, la forma all'interno della griglia è un diamante azteco .

Il numero di rettangoli in un diamante Aztec è la somma del numero di grandi rettangoli sovrapposti per renderlo (per il quarto diamante, che si trova in una 5x5griglia, 2x8, 4x6, 6x4, e 8x2) meno il numero dei rettangoli contato due volte (il numero di rettangoli nel diamante azteco precedente ).
La formula qui è (TeX da aggiungere in seguito):
# 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)
Secondo Wolfram Alpha, la forma chiusa per fIS 1/30*(n-1)*n*(4*n**3+14*n**2+19*n+9)e la forma chiusa per aztec_rectdire, come ha scoperto Neil, 1/6*n*(n-1)*(4*n**2+4*n+3) == 1/6*(4*n**4-n**2-3*n).
Devo ancora scoprire perché (m-n)(n*(4*n*n-1)/3)funziona, anche se sospetto che sia perché una definizione di A000447 è binomial(2*n+1, 3). Vi terremo aggiornati.
Aggiornamento: ho motivo di credere che la funzione del numero di rettangoli in un diamante azteco esteso m>nsia correlata al numero di 2k*2(n-k)rettangoli sovrapposti nel meno diamante F(m-1,n-1). Altri risultati quando li ho.
Aggiornamento: ho provato un percorso diverso e ho finito con un'altra formula per diamanti aztechi estesi che è principalmente spiegabile ma ha un termine che non ho ancora capito. 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)
Una rapida analisi di quest'ultima formula:
(m-n+1)*(4*n**4-n*n-3*n)/6è il numero di diamanti aztechi sovrapposti di dimensioni nnella struttura, come f(n,n) = (4*n**4-n*n-3*n)/6. f(7,3)ha 5 diamanti aztechi sovrapposti 3, mentre f(3,3)ha solo 1 diamante.
-f(m-1,n-1) rimuove alcuni dei rettangoli duplicati dal centro dei diamanti sovrapposti.
+(m-n)*2rappresenta il 2 extra 2-by- (2n-1)rettangoli per ogni diamante in più.
+(m-n)*(n-2)rappresenta un nquadrante in più nper ogni diamante in più.
-(m-n-1)*f(n-1,n-1)Questo è il nuovo termine enigmatico. Apparentemente non ho tenuto conto di alcuni quadrati extra nel mio conteggio, ma non ho capito dove si trovano nel diamante esteso.
Nota: quando m==n, m-n-1 = -1significa che quest'ultimo termine aggiunge quadrati al conteggio. Potrei mancare qualcosa nella mia formula normale. Divulgazione completa, questo doveva solo essere una patch per una bozza precedente di questa formula che ha funzionato. Chiaramente, ho ancora bisogno di scavare in quello che sta succedendo e potrebbe essere che la mia formula abbia alcuni bug. Vi terrò aggiornati.
Russell, Gary e Weisstein, Eric W. "Aztec Diamond". Da MathWorld - Una risorsa Web Wolfram. http://mathworld.wolfram.com/AztecDiamond.html