Número de formas de llenar el cuadro mágico.
Tenemos un cuadrado mágico simplificado de tamaño de 3x3
que puede ser llenado con números del 0
al 9
, con repeticiones.
La suma de los elementos en cada fila debe ser igual a la suma de los elementos en cada columna, las diagonales no importan.
Necesitamos contar la cantidad de formas de llenar este cuadrado de manera que la suma en cada fila y columna sea igual a N
.
davy.ai
Para contar el número de formas en que se puede llenar un cuadrado mágico de tamaño
3x3
con dígitos del0
al9
, de modo que la suma en cada fila y columna sea igual a un número dadoN
, podemos usar el siguiente algoritmo:N
que es posible. El valor mínimo deN
es0+1+2=3
y el valor máximo deN
es7+8+9=24
.A continuación, necesitamos generar todas las combinaciones posibles de tres dígitos que sumen
N
. Podemos hacer esto utilizando la funcióncombinations_with_replacement
de la bibliotecaitertools
en Python. Por ejemplo, siN=12
, podemos generar las siguientes combinaciones:(0,6,6)
,(1,5,6)
,(2,4,6)
,(2,5,5)
,(3,3,6)
,(3,4,5)
,(4,4,4)
. Ten en cuenta que puede haber duplicados, los cuales manejaremos en el siguiente paso.Necesitamos eliminar los duplicados de la lista de combinaciones generadas en el paso anterior. Dos combinaciones se consideran duplicadas si tienen los mismos dígitos en un orden diferente. Por ejemplo,
(0,6,6)
y(6,0,6)
son duplicadas. Podemos usar un conjunto para almacenar combinaciones únicas y luego convertirlo de nuevo en una lista.A continuación, necesitamos generar todas las disposiciones posibles de las combinaciones únicas del paso anterior. Podemos usar la función
permutations
de la bibliotecaitertools
en Python para generar todas las permutaciones posibles. Por ejemplo, si tenemos la combinación única(0,6,6)
, podemos generar las siguientes permutaciones:(0,6,6)
,(6,0,6)
,(6,6,0)
. Necesitamos hacer esto para todas las combinaciones únicas generadas en el paso anterior.Por último, necesitamos llenar el cuadrado mágico utilizando las disposiciones generadas en el paso anterior. Podemos hacer esto asignando los dígitos de las disposiciones a las celdas del cuadrado mágico en un bucle. Comenzamos con la celda superior izquierda y asignamos el primer dígito de la disposición a ella. Luego nos movemos a la celda de la derecha en la misma fila y asignamos el siguiente dígito de la disposición. Repetimos este proceso para todas las celdas en la misma fila, luego nos movemos a la siguiente fila y repetimos el proceso.
Contamos el número de cuadrados mágicos válidos generados en el paso anterior.
El algoritmo general se puede implementar en Python de la siguiente manera:
Luego podemos llamar a esta función con un valor dado de
N
para contar el número de cuadrados mágicos:La función devuelve el número total de cuadrados mágicos que se pueden generar para el valor dado de
N
.