Ejercicio: 3Eva_IIT2010_T3 Rompecabezas, desordena y ubica
Incluye respuestas del tema 1 y Tema 2
Propuesta de solución en Python:
# ICM00794-Fundamentos de Computación - FCNM-ESPOL # 3Eva_IIT2010_T3 Rompecabezas, desordena y ubica # Propuesta: edelros@espol.edu.ec # Tarea: identificar donde se podrá usar lazo "for" # opcional, el tamaño de matriz nxm se puede obtener con # numpy.shape(matriz) y se obtiene un arreglo con n y m import numpy import random # Tema 1. funcion desordena(n) # dado el tamaño de matriz cuadrada, pone numeros aleatorios # No repetidos entre 0 y n*n-1 def desordena(n): matriz = numpy.zeros(shape=(n,n), dtype=int) numero = 1 maximo = n*n-1 while not(numero>maximo): fila = int(random.random()*n)+0 columna = int(random.random()*n)+0 if (matriz[fila,columna]==0): matriz[fila,columna]=numero numero = numero+1 return(matriz) # Tema 2. ubica un numero k en la matriz de nxn def ubica(matriz,n,k): donde = numpy.zeros(2, dtype=int) encontre = 0 fila = 0 while not(fila>=n or encontre==1): columna = 0 while not(columna>=n or encontre==1): if (matriz[fila,columna]==k): encontre = 1 donde[0] = fila donde[1] = columna columna = columna+1 fila = fila+1 return(donde) # funcion matrizigual, compara dos matrices A y B # de igual tamano nxn def matrizigual(A,B,n): resuelto = 1 fila = 0 while not(fila>=n or resuelto==0): columna = 0 while not(columna>=n or resuelto==0): if (A[fila,columna]!=B[fila,columna]): resuelto = 0 columna = columna+1 fila = fila+1 return(resuelto) # funcion solucion del rompecabeza # Usado para comparar con la solucion def original(n): matriz = numpy.zeros(shape=(n,n), dtype=int) numero = 1 fila = 0 while not(fila>=n): columna = 0 while not(columna>=n): matriz[fila, columna] = numero numero = numero+1 columna = columna+1 fila = fila+1 matriz[n-1,n-1] = 0 return(matriz) # Tema 3. Juego del Rompecabeza # Programa para jugar el Rompecabeza tamano = int(input('¿Tamaño del tablero?: ')) resuelto = 0 turno = 1 solucion = original(tamano) tablero = desordena(tamano) while not(resuelto==1): print(turno) print(tablero) ficha = int(input('¿Ficha a mover?: ')) dondeficha = ubica(tablero,tamano,ficha) dondecero = ubica(tablero,tamano,0) if (dondeficha[0]==dondecero[0] or dondeficha[1]==dondecero[1]): temporal = ficha tablero[dondeficha[0],dondeficha[1]] = 0 tablero[dondecero[0],dondecero[1]] = temporal turno = turno+1 if (matrizigual(tablero,solucion,tamano)==1): resuelto = 1 print('Ganaste...! ')