s3Eva_IIT2010_T3 Juego de rompecabezas

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...! ')