En el post anterior tuvimos
import numpy as np from random import * def random3(): aux1 = 3*random() if aux1 > 0 and aux1<=1: aux2=1 if aux1 > 1 and aux1<=2: aux2=2 if aux1 > 2 and aux1<=3: aux2=3 return aux2 print(random3()) def busca2(A): solucion = 1 # Es una bandera, solucion 1 se asume temporalmente que es solucion, 0 Se demuestra que NO es solucion if solucion ==1: # Checando el primer renglon... if A[0,0] == A[0,1] or A[0,0] == A[0,2] or A[0,1]==A[0,2]: solucion = 0 if solucion ==1: # Checando el segundo renglon... if A[1,0] == A[1,1] or A[1,0] == A[1,2] or A[1,1]==A[1,2]: solucion = 0 if solucion ==1: # Checando el segundo renglon... if A[2,0] == A[2,1] or A[2,0] == A[2,2] or A[2,1]==A[2,2]: solucion = 0 if solucion ==1: # Checando la primer columna... if A[0,0] == A[1,0] or A[0,0] == A[2,0] or A[1,0]==A[2,0]: solucion = 0 if solucion ==1: # Checando la segunda columna... if A[0,1] == A[1,1] or A[0,1] == A[2,1] or A[1,1]==A[2,1]: solucion = 0 if solucion ==1: # Checando la tercer columna... if A[0,2] == A[1,2] or A[0,2] == A[2,2] or A[1,2]==A[2,2]: solucion = 0 return solucion ############################################# cuenta=0 N=500 A=np.zeros((3,3)) for k in range(N): for i in range(3): for j in range(3): A[i,j]=random3() z2=busca2(A) if z2==1: print(z2,'una solucion') print(A) cuenta=cuenta+1 print(cuenta)
que por ejemplo, puede arrojar
1 1 una solucion [[3. 2. 1.] [2. 1. 3.] [1. 3. 2.]] 1 una solucion [[3. 2. 1.] [2. 1. 3.] [1. 3. 2.]] 1 una solucion [[3. 2. 1.] [1. 3. 2.] [2. 1. 3.]] 1 una solucion [[3. 2. 1.] [1. 3. 2.] [2. 1. 3.]] 1 una solucion [[3. 2. 1.] [1. 3. 2.] [2. 1. 3.]] 1 una solucion [[1. 3. 2.] [2. 1. 3.] [3. 2. 1.]] 1 una solucion [[1. 3. 2.] [2. 1. 3.] [3. 2. 1.]] 7
?Como podemos quedarnos solamente con las soluciones distintas? La respuesta NO es sencilla. Primero vamos a encontrar la manera de guardar todas las soluciones. Para lograrlo, consideremos la intruccion np.append que funciona d ela siguiente manera
a = np.array([0,1,2]) print(a) # [0 1 2] a_append = np.append(a, 3) print(a_append) # [0 1 2 3] print(a)
![](https://manza.space/wp-content/uploads/2024/11/Screenshot-from-2024-11-15-09-45-12.png)
Consideremos el programa
cuenta=0 N=500 A=np.zeros((3,3)) for k in range(N): for i in range(3): for j in range(3): A[i,j]=random3() z2=busca2(A) if z2==1: print(z2,'una solucion') print(A) if cuenta==0: B=np.array([A[0,0],A[0,1],A[0,2],A[1,0],A[1,1],A[1,2],A[2,0],A[2,1],A[2,2]]) else: B=np.append(B,[A[0,0],A[0,1],A[0,2],A[1,0],A[1,1],A[1,2],A[2,0],A[2,1],A[2,2]]) cuenta=cuenta+1 print(cuenta) print(B)
![](https://manza.space/wp-content/uploads/2024/11/Screenshot-from-2024-11-15-09-46-44.png)
Si se corre el programa 1000 veces
cuenta=0 N=1000 A=np.zeros((3,3)) for k in range(N): for i in range(3): for j in range(3): A[i,j]=int(random3()) z2=busca2(A) if z2==1: print(z2,'una solucion') print(A) if cuenta==0: B=np.array([A[0,0],A[0,1],A[0,2],A[1,0],A[1,1],A[1,2],A[2,0],A[2,1],A[2,2]]) if cuenta>0: B=np.append(B,[A[0,0],A[0,1],A[0,2],A[1,0],A[1,1],A[1,2],A[2,0],A[2,1],A[2,2]]) print('van ',B.size/9,' soluciones ..., el tamanio de B es ',B.size) cuenta=cuenta+1 print(cuenta) print(B)
cuenta=0 N=1000 A=np.zeros((3,3)) for k in range(N): for i in range(3): for j in range(3): A[i,j]=int(random3()) z2=busca2(A) if z2==1: print(z2,'una solucion') print(A) if cuenta==0: B=np.array([A[0,0],A[0,1],A[0,2],A[1,0],A[1,1],A[1,2],A[2,0],A[2,1],A[2,2]]) if cuenta>0: B=np.append(B,[A[0,0],A[0,1],A[0,2],A[1,0],A[1,1],A[1,2],A[2,0],A[2,1],A[2,2]]) print('van ',B.size/9,' soluciones ..., el tamanio de B es ',B.size) cuenta=cuenta+1 print(cuenta) print(B) 1 una solucion [[1. 2. 3.] [2. 3. 1.] [3. 1. 2.]] 1 una solucion [[3. 1. 2.] [1. 2. 3.] [2. 3. 1.]] van 2.0 soluciones ..., el tamanio de B es 18 1 una solucion [[3. 1. 2.] [1. 2. 3.] [2. 3. 1.]] van 3.0 soluciones ..., el tamanio de B es 27 1 una solucion [[3. 1. 2.] [1. 2. 3.] [2. 3. 1.]] van 4.0 soluciones ..., el tamanio de B es 36 1 una solucion [[1. 2. 3.] [2. 3. 1.] [3. 1. 2.]] van 5.0 soluciones ..., el tamanio de B es 45 1 una solucion [[1. 2. 3.] [2. 3. 1.] [3. 1. 2.]] van 6.0 soluciones ..., el tamanio de B es 54 1 una solucion [[2. 3. 1.] [3. 1. 2.] [1. 2. 3.]] van 7.0 soluciones ..., el tamanio de B es 63 7 [1. 2. 3. 2. 3. 1. 3. 1. 2. 3. 1. 2. 1. 2. 3. 2. 3. 1. 3. 1. 2. 1. 2. 3. 2. 3. 1. 3. 1. 2. 1. 2. 3. 2. 3. 1. 1. 2. 3. 2
Para entender el problema, consideremos
for i in range(0,int(B.size/3),3): print(int(B[i]),int(B[i+1]),int(B[i+2])) 1 2 3 2 3 1 3 1 2 3 1 2 1 2 3 2 3 1 3 1 2
?Como podriamos contar las ternas distintas de tres digitos? Hay 7 en total
import numpy as np import matplotlib.pyplot as plt B=np.zeros(21) B = [1, 2, 3, 2, 3, 1, 3, 1, 2, 3, 1, 2, 1, 2, 3, 2, 3, 1, 3, 1, 2] ----------------- for rana in range (0,21): print('B[',rana,']=',B[rana]) ------------------ renglon=1 for rana in range (0,21,3): triada = np.array([B[rana+0],B[rana+1],B[rana+2]]) print('renglon ',renglon,' con la triada ',triada,'---> rana=',rana) renglon = renglon+1 -------------- renglon=1 for rana in range (0,21,3): triada = np.array([B[rana+0],B[rana+1],B[rana+2]]) print('renglon ',renglon,' con la triada ',triada,'---> rana=',rana) if renglon == 1: bolsa=triada_new print('en la bolsa',bolsa) if renglon == 2: print('tamanio de la bolsa',bolsa.size) print('porque hay ',int(bolsa.size/3),'soluciones') renglon = renglon+1 ------------ renglon=1 for rana in range (0,21,3): triada = np.array([B[rana+0],B[rana+1],B[rana+2]]) print('renglon ',renglon,' con la triada ',triada,'---> rana=',rana) if renglon == 1: bolsa=triada print('en la bolsa',bolsa) if renglon == 2: print('tamanio de la bolsa',bolsa.size) print('porque hay ',int(bolsa.size/3),'soluciones') aux1 = np.array([bolsa[(int(bolsa.size/3)-1)+0],bolsa[(int(bolsa.size/3)-1)+1],bolsa[(int(bolsa.size/3)-1)+2]]) print('aux1',aux1,'triada',triada) renglon = renglon+1 --------------- renglon=1 for rana in range (0,21,3): triada = np.array([B[rana+0],B[rana+1],B[rana+2]]) print('renglon ',renglon,' con la triada ',triada,'---> rana=',rana) if renglon == 1: bolsa=triada print('en la bolsa',bolsa) if renglon == 2: print('tamanio de la bolsa',bolsa.size) print('porque hay ',int(bolsa.size/3),'soluciones') aux1 = np.array([bolsa[(int(bolsa.size/3)-1)+0],bolsa[(int(bolsa.size/3)-1)+1],bolsa[(int(bolsa.size/3)-1)+2]]) print('aux1',aux1,'triada',triada) if aux1[0] != triada[0]: print('primer elemento no igual') if aux1[1] != triada[1]: print('segundo elemento no igual') if aux1[2] != triada[2]: print('tercer elemento no igual') renglon = renglon+1 ---------------- renglon=1 for rana in range (0,21,3): triada = np.array([B[rana+0],B[rana+1],B[rana+2]]) print('renglon ',renglon,' con la triada ',triada,'---> rana=',rana) if renglon == 1: bolsa=triada print('en la bolsa',bolsa) if renglon == 2: print('tamanio de la bolsa',bolsa.size) print('porque hay ',int(bolsa.size/3),'soluciones') aux1 = np.array([bolsa[(int(bolsa.size/3)-1)+0],bolsa[(int(bolsa.size/3)-1)+1],bolsa[(int(bolsa.size/3)-1)+2]]) print('aux1',aux1,'triada',triada) if aux1[0] != triada[0] and aux1[1] != triada[1] and aux1[2] != triada[2]: print('todos los elementos no son iguales') bolsa=np.append(bolsa,triada) print('en la bolsa ', bolsa) renglon = renglon+1 ---- renglon=1 for rana in range (0,21,3): triada = np.array([B[rana+0],B[rana+1],B[rana+2]]) if renglon == 1: bolsa=triada if renglon == 2: aux1 = np.array([bolsa[(int(bolsa.size/3)-1)+0],bolsa[(int(bolsa.size/3)-1)+1],bolsa[(int(bolsa.size/3)-1)+2]]) if aux1[0] != triada[0] and aux1[1] != triada[1] and aux1[2] != triada[2]: bolsa=np.append(bolsa,triada) if renglon == 3: print('en este renglon la triada es ',triada) print('y en la bolsa hay ',bolsa) renglon = renglon+1 --------- renglon=1 for rana in range (0,21,3): triada = np.array([B[rana+0],B[rana+1],B[rana+2]]) if renglon == 1: bolsa=triada if renglon == 2: aux1 = np.array([bolsa[(int(bolsa.size/3)-1)+0],bolsa[(int(bolsa.size/3)-1)+1],bolsa[(int(bolsa.size/3)-1)+2]]) if aux1[0] != triada[0] and aux1[1] != triada[1] and aux1[2] != triada[2]: bolsa=np.append(bolsa,triada) if renglon == 3: print('en este renglon la triada es ',triada) print('y en la bolsa hay ',bolsa,bolsa.size) for i1 in range(0,int(bolsa.size),3): print(i1) renglon = renglon+1 ---------- renglon=1 for rana in range (0,21,3): triada = np.array([B[rana+0],B[rana+1],B[rana+2]]) if renglon == 1: bolsa=triada if renglon == 2: aux1 = np.array([bolsa[(int(bolsa.size/3)-1)+0],bolsa[(int(bolsa.size/3)-1)+1],bolsa[(int(bolsa.size/3)-1)+2]]) if aux1[0] != triada[0] and aux1[1] != triada[1] and aux1[2] != triada[2]: bolsa=np.append(bolsa,triada) if renglon == 3: print('en este renglon la triada es ',triada) print('y en la bolsa hay ',bolsa,bolsa.size) for i1 in range(0,int(bolsa.size),3): print(i1,' -- ',bolsa[i1+0],bolsa[i1+1],bolsa[i1+2],triada) renglon = renglon+1 ---------- renglon=1 for rana in range (0,21,3): triada = np.array([B[rana+0],B[rana+1],B[rana+2]]) if renglon == 1: bolsa=triada if renglon == 2: aux1 = np.array([bolsa[(int(bolsa.size/3)-1)+0],bolsa[(int(bolsa.size/3)-1)+1],bolsa[(int(bolsa.size/3)-1)+2]]) if aux1[0] != triada[0] and aux1[1] != triada[1] and aux1[2] != triada[2]: bolsa=np.append(bolsa,triada) if renglon == 3: print('en este renglon la triada es ',triada) print('y en la bolsa hay ',bolsa,bolsa.size) for i1 in range(0,int(bolsa.size),3): print(i1,' -- ',bolsa[i1+0],bolsa[i1+1],bolsa[i1+2],triada) if bolsa[i1+0] != triada[0] and bolsa[i1+1] != triada[1] and bolsa[i1+2] != triada[2] : print('no iguales') renglon = renglon+1