Ejercicio: 3Eva_IIT2010_T3 Rompecabezas, desordena y ubica
Incluye respuestas del tema 1 y Tema 2
Propuesta de solución en Python:
Algoritmo en Python
# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 3Eva_IIT2010_T3 Rompecabezas, desordena y ubica
# 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...! ')