Advertisement
Guest User

Untitled

a guest
Jun 18th, 2019
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.49 KB | None | 0 0
  1. import numpy as np
  2. import random as r
  3.  
  4.  
  5. def coordenadas(pos):
  6. '''
  7. Retorna las coordenadas del tablero para una posición del mismo
  8. '''
  9. sumador=0
  10. while True:
  11. if (pos + sumador) % 8 == 0: # Como sé que para cualquier posición que tenga como coordenada x = 8 va a ser múltiplo de 8, voy sumando 1 a la posición hasta que
  12. x = 8-sumador # se vuelva múltiplo de 8. Cuando esto se cumpla solo tengo que restar_ 1: La cantidad de veces que he sumado 1 a la posición y 2: El 8
  13. break # con eso tengo la coordenada en x
  14. sumador += 1
  15. if pos-x>0:
  16. y = (pos-x)//8+1
  17. else:
  18. y=0
  19. return [x,y]
  20.  
  21.  
  22. def grados(column, row):
  23. '''
  24. Retorna los grados de libertad y sus posiciones en el tablero para unas coordenadas dadas
  25. '''
  26. Posicion = (column + 1) + row * 8
  27. column += 1
  28. row += 1
  29. Filas = {1: [1, 8], 2: [9, 16], 3: [17, 24], 4: [25, 32], 5: [33, 40], 6: [41, 48], 7: [49, 56], 8: [57, 64]}
  30. Grados = 0
  31. posiciones=[]
  32. try: #Que intente restarle 1 a la fila, si no puede significa que por arriba no hay grados
  33. FilaActual = Filas[row - 1]
  34. except:
  35. pass
  36. else: #Verifico que las 2 posibles casillas que están 1 fila arriba de la posición estén dentro del rango de esa fila
  37. if Posicion - 8 + 2 <= FilaActual[1] and Posicion - 8 + 2 >= FilaActual[0]:
  38. Grados += 1
  39. posiciones.append(Posicion - 8 + 2)
  40. if Posicion - 8 - 2 >= FilaActual[0] and Posicion - 8 - 2 <= FilaActual[1]:
  41. Grados += 1
  42. posiciones.append(Posicion - 8 - 2)
  43. try: # Como se ha podido restar 1 a la fila, pruebo a ver si se puede restar 2, de poderse se ejecuta el mismo procedimiento.
  44. FilaActual = Filas[row - 2]
  45. except:
  46. pass
  47. else:
  48. if Posicion - 16 + 1 >= FilaActual[0] and Posicion-16 + 1 <= FilaActual[1]:
  49. Grados += 1
  50. posiciones.append(Posicion-16 + 1)
  51. if Posicion - 16 - 1 <= FilaActual[1] and Posicion-16 - 1 >= FilaActual[0]:
  52. Grados += 1
  53. posiciones.append(Posicion - 16 - 1)
  54. try:
  55. FilaActual = Filas[row+1]
  56. except:
  57. pass
  58. else:
  59. if Posicion + 8 + 2 <= FilaActual[1]:
  60. Grados += 1
  61. posiciones.append(Posicion + 8 + 2)
  62.  
  63. if Posicion + 8 - 2 >= FilaActual[0]:
  64. Grados += 1
  65. posiciones.append(Posicion + 8 - 2)
  66. try:
  67. FilaActual = Filas[row+2]
  68. except:
  69. pass
  70. else:
  71. if Posicion + 16 + 1 <= FilaActual[1]:
  72. Grados += 1
  73. posiciones.append(Posicion + 16 + 1)
  74. if Posicion + 16 - 1 >= FilaActual[0]:
  75. Grados += 1
  76. posiciones.append(Posicion + 16 - 1)
  77. return Grados,posiciones
  78.  
  79. Tablero = np.array([[ 1, 2, 3, 4, 5, 6, 7, 8],
  80. [ 9, 10, 11, 12, 13, 14, 15, 16],
  81. [17, 18, 19, 20, 21, 22, 23, 24],
  82. [25, 26, 27, 28, 29, 30, 31, 32],
  83. [33, 34, 35, 36, 37, 38, 39, 40],
  84. [41, 42, 43, 44, 45, 46, 47, 48],
  85. [49, 50, 51, 52, 53, 54, 55, 56],
  86. [57, 58, 59, 60, 61, 62, 63, 64]])
  87.  
  88. # ***** Inicio aleatorio ********
  89.  
  90. x = r.randint(0, 7) # Columna
  91. y = r.randint(0, 7) # Fila
  92.  
  93. limitado=0
  94. PosicionCaballo = 1
  95. CasillasRecorridas=[]
  96. while True:
  97. Tablero[y, x] = PosicionCaballo # Marco la posición actual
  98. print(Tablero)
  99. print("Entro con: x= {} y = {}".format(x,y))
  100. if limitado == 400:
  101. break
  102.  
  103. Grados, posiciones = grados(x, y) # Consigo los grados y las posiciones de ellos para la posición actual
  104. GradosLibertadSig=[] # Establezco una lista para almacenar los grados de libertad
  105. CoordenadasSig = [] # Lista para almacenar sus coordenadas
  106. for i in posiciones: # Hallo la posición con más grados
  107. Coordenadas = coordenadas(i) #Tengo las coordenadas de la posición
  108.  
  109. GradosLibertadSig.append(grados(Coordenadas[0]-1, Coordenadas[1]-1)[0]) # Hallo los grados de libertad para esas coordenadas y lo pongo en una lista
  110. CoordenadasSig.append(Coordenadas)
  111.  
  112. PosicionCaballo += 1
  113. m = max(GradosLibertadSig)
  114. CasillasMax = [i for i, j in enumerate(GradosLibertadSig) if j == m]
  115. if len(CasillasMax) > 1:
  116. restador=0
  117. while True:
  118. RandomSquare=r.randint(0,len(CasillasMax))
  119. x = CoordenadasSig[CasillasMax[RandomSquare-1]][0] - 1
  120. y = CoordenadasSig[CasillasMax[RandomSquare-1]][1] - 1
  121. if [x,y] not in CasillasRecorridas:
  122. CasillasRecorridas.append([x,y])
  123. break
  124. else:
  125. while True:
  126. CasillasMax.pop(8-restador)
  127. restador -= 1
  128.  
  129. else:
  130. restador = 0
  131. while True:
  132. x = CoordenadasSig[CasillasMax[0]][0]-1
  133. y = CoordenadasSig[CasillasMax[0]][1]-1
  134. CasillasRecorridas.append([x, y])
  135. if [x,y] not in CasillasRecorridas:
  136. CasillasRecorridas.append([x,y])
  137. break
  138. else:
  139. CasillasMax.pop(8-restador)
  140. restador -= 1
  141.  
  142. # break
  143. limitado = limitado + 1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement