13 respuestas

  1. jacobo
    13/06/2011

    oie, que representa este pedazo de código?

    tablero[f]1
    es de la linea 24.

    lo pregunto porque lo intenté correr pero da error de sintaxis en esa parte.

  2. adrigm
    13/06/2011

    Es para Python 2.x asegúrate que no estás usando una versión 3.x

  3. Richard
    16/04/2012

    Disculpa, en Python 2.7 Portable me bota error de sintaxis en la linea 21. Agradeceria tu ayuda.

    • adrigm
      16/04/2012

      son comillas que el resaltado de sintáxis ha cambiado seria:

      tab = “”

      en el resto del código igual.

      • Juan Diego Moreno Velasco
        26/11/2014

        tab = “quot;quot”; quedaría así?

  4. karina
    22/04/2012

    Disculpa que representa esto:
    "CC"

    cuando corro el programa me muestra error en esas partes
    gracias

  5. karina
    22/04/2012

    22/04/2012 a las 18:20 pm
    Disculpa que representa esto:
    ” "CC"”cuando corro el programa me muestra error en esas partes
    gracias

    • adrigm
      22/04/2012

      Qué error te da?

  6. Llanos
    16/11/2012

    alguien sabe cómo se puede hacer en Java?

  7. cemete
    21/12/2012

    porqué pones “tablero[f]1″ y cómo puedo cambiarlo para que no me dé error? Uso python 2.7

  8. cemete
    21/12/2012

    He quitado el 1 y lo he dejado como tablero[f] y parece que funciona, pero ahora me da este error en la linea 123: ‘str’ object does not support item assignment

  9. alex
    13/04/2015

    este programa sirve también para netbeans ????

  10. Juan Miguel
    08/01/2019

    # Bibliotecas
    import random
    import sys
    import time

    # — Constantes —
    ANCHO = 8
    ALTO = 8
    MOVIMIENTO_CABALLO = 8
    VACIO = 0
    # — Funciones —

    # Dibuja el tablero
    def dibujar(tablero):
    # Crea un tablero auxiliar
    tab = “”
    for fila in range(ALTO):
    for columna in range(ANCHO):
    # Crea una celda con la pieza centrada a 3 espacios
    celda = str(tablero[fila][columna]).center(3,’ ‘)
    tab = tab + celda + “”
    # Agrega un salto de linea
    tab = tab + “\n”
    # Muestra el tablero
    print(tab)
    time.sleep(2)

    # Devuelve una lsita con las coordenadas del caballo
    def pos_caballo(tablero):
    for fila in range(ALTO):
    for columna in range(ANCHO):
    # Si encuentra la posicion del caballo
    if tablero[fila][columna] == “C”:
    # Guarda la posicion del caballo
    pos = [fila, columna]
    return pos

    # Devuelve 1 si el tablero esta lleno
    def esta_lleno(tablero):
    for fila in range(ALTO):
    for columna in range(ANCHO):
    # Pregunta si la casilla esta vacia
    if tablero[fila][columna] == “*”:
    # Por una estar vacia el tablero no esta lleno
    return 0
    # Si sale del ciclo for con exito significa que todas las casillas estan ocupadasss
    return 1

    # Mueve desde CC desde inicial hasta final
    def mover(inicial, final, tablero, contador):
    # Asigna el numero actual en la posicion inical
    tablero[inicial[0]][inicial[1]] = str(contador)
    # Asigna la nueva posicion del caballo
    tablero[final[0]][final[1]] = “C”

    # Retrocede una posicion
    def retroceder(inicial, final, tablero):
    # Remueve la posicion inicial del caballo
    tablero[inicial[0]][inicial[1]] = “*”
    # Lo ubica en su nueva posicion
    tablero[final[0]][final[1]] = “C”

    # Devuelve una lista con los movimientos posibles
    def posibles_movimientos(mov, pos, tablero):
    posibles = []
    # Recorre por los 8 movimientos posibles del caballo
    for x in range(MOVIMIENTO_CABALLO):
    valor1 = pos[0] + mov[x][0]
    valor2 = pos[1] + mov[x][1]
    # Confirma de uqe la nueva posicion no este fuera de los limites
    if (valor1) in range(ANCHO) and (valor2) in range(ANCHO):
    # Pregunta si la nueva posicion esta libre
    if tablero[valor1][valor2] == “*”:
    # Asigna la nueva posicion en ‘posibles’
    v = [valor1, valor2]
    posibles.append(v)
    return posibles

    # Ordena dos listas en funcion de la primera (menor a mayor)
    def ordenar(lista_a, lista_b):
    # Si la lista_b esta vacia la retorna
    if lista_b == []: return lista_b
    else:
    # Recorre cada elemento de la lista_a
    for i in range(len(lista_a)):
    for j in range(len(lista_a) – 1):
    # Si el elemento siguiente es mayor que el actual
    if lista_a[j] > lista_a[j+1]:
    # cambia la posicion en ambas listas
    lista_b[j], lista_b[j+1] = lista_b[j+1], lista_b[j]
    lista_a[j], lista_a[j+1] = lista_a[j+1], lista_a[j]
    return lista_b

    # Ordena los valores de manera que el primero se va a los menos probables
    def heuristica(pos_mov, tablero, mov):
    n_pos = []
    for n in range(len(pos_mov)):
    pos = len(posibles_movimientos(mov, pos_mov[n], tablero))
    n_pos.append(pos)
    return ordenar(n_pos, pos_mov)

    # Fucion recursiva principal
    def caballo(contador, tablero):
    contador += 1
    pos = pos_caballo(tablero)
    # Movimientos posible del caballo en forma de “L”
    mov = [[2, 1], [1, 2], [-2, 1], [2, -1], [-1, 2], [1, -2], [-2, -1], [-1, -2]]

    pos_mov = posibles_movimientos(mov, pos, tablero)
    # Aplica el algoritmo de ‘heristica’ con los posibles movimientos
    pos_mov = heuristica(pos_mov, tablero, mov)

    # Evalua todos los movimientos que ‘heuristica’ entrega
    for i in range(len(pos_mov)):
    # Guarda la posicion del caballo antes de moverlo
    pos_ant = pos
    # Ejecuta un movimiento
    mover(pos, pos_mov[i], tablero, contador)
    dibujar(tablero)
    # Si despues del movimiento se llena el tablero, entonces se sale del programa
    if esta_lleno(tablero):
    sys.exit() # Salir del programa
    # Si sigue la ejecucion significa que aun no se ha llenado el tablero
    pos = pos_caballo(tablero)
    caballo(contador, tablero)
    # Si pasa por este punto significa que el caballo se quedo sin movimiento y necesita retorceder
    retroceder(pos, pos_ant, tablero)
    pos = pos_caballo(tablero)
    dibujar(tablero)

    def main():
    # Crea un tablero ANCHO x ALTO
    tablero = [x for x in range(ANCHO)]
    for n in tablero:
    tablero[n] = [str(x) for x in range(ALTO)]

    # Pone el tablero a cero
    for fila in range(ALTO):
    for columna in range(ANCHO):
    # Elimina los numeros y los sustituye por asteriscos
    tablero[fila][columna] = “*”

    # Posicion inicial del caballo
    tablero[0][0] = “C”

    # Comienza el programa
    dibujar(tablero)
    contador = 0
    caballo(contador, tablero)

    if __name__ == ‘__main__':
    main()

Responder

 

 

 

Volver arriba
móvil escritorio