Comenzamos llamando a las librerias
import numpy as np from random import *
Encontramos un numero aleatorio entre el 1,2 o 3
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 print(aux2)
Es convniente crear una funcion que encapsule la determinacion del numero aleatorio
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())
Probamos a ver que tal funciona
for i in range(10): print(random3()) 1 2 1 3 2 3 1 3 2 2
Ahora creamos una matriz de 3×3
A=np.zeros((3,3)) print(A) [[0. 0. 0.] [0. 0. 0.] [0. 0. 0.]]
La asignacion de elementos de matriz puede hacerse de la siguiente forma
A[0,0]=0 A[0,1]=1 A[0,2]=2 A[1,0]=3 A[1,1]=4 A[1,2]=5 A[2,0]=6 A[2,1]=7 A[2,2]=8 print(A) [[0. 1. 2.] [3. 4. 5.] [6. 7. 8.]]
A continuacion, planteamos una propuesta de solucion aleatoria
A[0,0]=random3() A[0,1]=random3() A[0,2]=random3() A[1,0]=random3() A[1,1]=random3() A[1,2]=random3() A[2,0]=random3() A[2,1]=random3() A[2,2]=random3() print(A) [[3. 3. 2.] [1. 2. 2.] [1. 2. 3.]]
Una forma mas conpacta de crear una matriz aleatoria es
for i in range(3): for j in range(3): A[i,j]=random3() print(A) [[2. 3. 2.] [3. 2. 3.] [3. 1. 1.]]
Tambien, para este caso es conveniente crear una funcion que cree una matriz aleatoria
def crea(): for i in range(3): for j in range(3): A[i,j]=random3() return A
A continuacion probamos la funcion de la siguiente forma
for i in range(5): A=crea() print(A) [[2. 3. 2.] [1. 1. 2.] [3. 1. 2.]] [[1. 3. 3.] [2. 1. 2.] [2. 3. 2.]] [[3. 1. 2.] [2. 2. 1.] [1. 3. 3.]] [[1. 3. 2.] [3. 3. 3.] [3. 2. 2.]] [[3. 2. 3.] [3. 2. 3.] [1. 1. 3.]]
Para checar que una matriz A es solucion, planteamos
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]:
print('Hay dos numeros iguales en el primer renglon')
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]:
print('Hay dos numeros iguales en el segundo renglon')
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]:
print('Hay dos numeros iguales en el tercer renglon')
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]:
print('Hay dos numeros iguales en la primer columna')
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]:
print('Hay dos numeros iguales en la segunda columna')
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]:
print('Hay dos numeros iguales en la tercer columna')
solucion = 0
print(solucion)
Es conveniente que este procedimiento de checar si una matriz A es solucion, se encapsule en una funcion, de la forma
def busca(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]:
print('Hay dos numeros iguales en el primer renglon')
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]:
print('Hay dos numeros iguales en el segundo renglon')
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]:
print('Hay dos numeros iguales en el tercer renglon')
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]:
print('Hay dos numeros iguales en la primer columna')
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]:
print('Hay dos numeros iguales en la segunda columna')
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]:
print('Hay dos numeros iguales en la tercer columna')
solucion = 0
return solucion
Hacemos una prueba
z=busca(A) print(A) print(z)
Hacemos varias pruebas
for k in range(10): for i in range(3): for j in range(3): A[i,j]=random3() print(A) z=busca(A) print(z) for k in range(10): for i in range(3): for j in range(3): A[i,j]=random3() print(A) z=busca(A) print(z) [[1. 1. 1.] [1. 2. 3.] [1. 3. 3.]] Hay dos numeros iguales en el primer renglon 0 [[3. 1. 2.] [3. 1. 3.] [1. 1. 1.]] Hay dos numeros iguales en el segundo renglon 0 [[3. 1. 2.] [1. 1. 3.] [2. 2. 3.]] Hay dos numeros iguales en el segundo renglon 0 [[2. 2. 1.] [1. 1. 1.] [2. 3. 3.]] Hay dos numeros iguales en el primer renglon 0 [[2. 1. 2.] [3. 3. 1.] [2. 2. 1.]] Hay dos numeros iguales en el primer renglon 0 [[2. 2. 3.] [1. 3. 2.] [3. 1. 2.]] Hay dos numeros iguales en el primer renglon 0 [[3. 1. 1.] [3. 3. 2.] [1. 3. 2.]] Hay dos numeros iguales en el primer renglon 0 [[3. 1. 1.] [2. 2. 2.] [2. 2. 1.]] Hay dos numeros iguales en el primer renglon 0 [[3. 3. 3.] [2. 1. 3.] [1. 1. 2.]] Hay dos numeros iguales en el primer renglon 0 [[2. 2. 2.] [1. 1. 2.] [1. 2. 2.]] Hay dos numeros iguales en el primer renglon 0
Es conveniente reescribir la funcion busca() de forma que ya no arroje tanta informacion
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
hacemos una prueba
cuenta=0
N=1000
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)
1 una solucion
[[3. 1. 2.]
[2. 3. 1.]
[1. 2. 3.]]
1 una solucion
[[3. 1. 2.]
[2. 3. 1.]
[1. 2. 3.]]
2
Como podemos checar que tenemos soluciones diferentes y ademas, guardarlas???
Una opcion puede ser
a = np.array([[1,2,3],[4,5,6]])
print('First array:')
print(a)
print('\n')
print('Append elements to array:')
print(np.append(a, [7,8,9]))
print('\n')
print('Append elements along axis 0:')
print(np.append(a, [[7,8,9]],axis = 0))
print('\n')
print('Append elements along axis 1:')
print(np.append(a, [[5,5,5],[7,8,9]],axis = 1))