Advertisement
pefelippe

Sudoku v0.8

Jun 21st, 2018
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.99 KB | None | 0 0
  1. #Variáveis Globais
  2. grade = [[" " for x in range(9)] for y in range(9)]
  3. cont = 0
  4. programa = 1
  5. contadorPistas = 0
  6. verificador = 0
  7. padrão = True
  8. linha = 0
  9. coluna = 0
  10. numero = " "
  11.  
  12. pistas = open('pistas.txt', 'r') #Lê o arquivo "pistas.txt"
  13. for line in pistas: #Trata as pistas e as insere na matriz.
  14. contadorPistas +=1
  15. COL1 = line[:1]
  16. coluna = int(ord(COL1) - 65) #Converte a Letra para Número.
  17. LIN1 = line[2:3]
  18. linha = int(LIN1) - 1
  19. NUM1 = line[4:5]
  20. numero = int(NUM1)
  21. grade[linha][coluna] = numero
  22.  
  23.  
  24. def sudoku(): #exibe a grade do sudoku já formatada e com as pistas.
  25. colunasletras = " A B C D E F G H I "
  26. linhaHorizontal1 = " ++---+---+---++---+---+---++---+---+---++ "
  27. linhaHorizontal2 = " ++===+===+===++===+===+===++===+===+===++ "
  28. print (colunasletras)
  29.  
  30. for i in range(0,9):
  31. if i == 3 or i == 6:
  32. print (linhaHorizontal2)
  33. else:
  34. print(linhaHorizontal1)
  35. for j in range(0,9):
  36. if (j == 3) or (j == 6):
  37. print ("|| {} |".format(grade[i][j]), end = " ")
  38. elif (j == 0):
  39. print (i+1,"|| {} |".format(grade[i][j]), end = " ")
  40. elif (j == 8):
  41. print("| {} ||".format(grade[i][j]),i+1, end = " ")
  42. elif j == 2 or j == 5:
  43. print("| {}".format(grade[i][j]), end = " ")
  44. else:
  45. print("{}".format(grade[i][j]), end = " ")
  46. print()
  47.  
  48. print(linhaHorizontal1)
  49. print(colunasletras)
  50.  
  51. def testar(): #checa se pode escrever valor em matriz[linha][coluna]
  52.  
  53. for i in range(0,9):
  54. if(i != coluna and grade[linha][i] == numero): #checando linha
  55. return False
  56. if(i != linha and grade[i][coluna] == numero): #checando coluna
  57. return False
  58.  
  59. quadranteLinha = int( linha / 3 )
  60. inicioLinha = quadranteLinha * 3
  61. fimLinha = inicioLinha + 3;
  62.  
  63. quadranteColuna = int( coluna / 3 )
  64. inicioColuna = quadranteColuna * 3
  65. fimColuna = inicioColuna + 3;
  66.  
  67. for i in range(inicioLinha, fimLinha): #checando quadrante
  68. for j in range(inicioColuna, fimColuna):
  69. if(i == linha and j == coluna):
  70. continue
  71. if (grade[i][j] == numero):
  72. return False
  73. return True
  74.  
  75. verificador = testar() #atribui um verificador ao resultado da função testar()
  76.  
  77. def Tratamento_de_Jogada():
  78. pistas = open('pistas.txt', 'r') #Lê o arquivo "pistas.txt"
  79. for line in pistas: #Trata as pistas e as insere na matriz.
  80. COL1 = line[:1]
  81. coluna = int(ord(COL1) - 65) #Converte a Letra para Número.
  82. LIN1 = line[2:3]
  83. linha = int(LIN1) - 1
  84. NUM1 = line[4:5]
  85. numero = int(NUM1)
  86.  
  87.  
  88. dic = {"A":0,"B":1,"C":2,"D":3,"E":4,"F":5,"G":6,"H":7,"I":8}
  89. padrão = True
  90.  
  91. while True:
  92. jogadas = input('Insira sua jogada:')
  93. jogadas = jogadas.split()
  94. jogadas = "".join(jogadas)
  95. jogadas = jogadas.upper()
  96.  
  97. if len(jogadas) == 5: #quantidade correta de algarismos em uma jogada, qualquer len diferente significa erro.
  98. if jogadas[0].isalpha() and jogadas[0] in dic:
  99. colunaJ = dic[jogadas[0]]
  100. if jogadas[1] != ',' or jogadas[3] != ':':
  101. print('Dígitos incorretos')
  102. padrão = False
  103. if jogadas[2].isdigit():
  104. if int(jogadas[2]) > 0 and int(jogadas[2]) < 10:
  105. linhaJ = int(jogadas[2]) - 1
  106. if grade[linha][coluna] == grade[linhaJ][colunaJ]:
  107. print("ERRO: Uma entrada não pode sobrescrever uma Pista!")
  108. padrão = False
  109. else:
  110. linha = linhaJ
  111. coluna = colunaJ
  112. else:
  113. print('Linha inválida')
  114. padrão = False
  115. else:
  116. print('Linha inválida')
  117. padrão = False
  118. if jogadas[4].isdigit() and len(jogadas)==5:
  119. if int(jogadas[4]) > 0 and int(jogadas[4]) < 10:
  120. numero = int(jogadas[4])
  121.  
  122. else:
  123. print('Coluna inválida')
  124. padrão = False
  125. elif len(jogadas) == 4: #Remove um dos elementos do Sudoku OBS: tb remove pistas.
  126. if jogadas[0] == "D":
  127. if jogadas[2] == ",":
  128. coluna = dic[jogadas[1]]
  129. linha = int(jogadas[3]) - 1
  130. grade[linha][coluna] = " "
  131. sudoku()
  132. padrão = False
  133. else:
  134. print("Fora do padrão de jogadas")
  135. padrão = False
  136. else:
  137. print('Fora do padrão de jogadas')
  138. padrão = False
  139. else:
  140. print('Fora do padrão de jogadas')
  141. padrão = False
  142. if padrão:
  143. testar()
  144. if verificador == True:
  145. grade[linha][coluna] = numero
  146. sudoku()
  147. else:
  148. print("JOGADA INVALIDA:")
  149. else:
  150. padrão = True
  151. contador = 0
  152. for i in range(0, 9):
  153. for j in range(0, 9):
  154. if grade[i][j] != " ":
  155. contador += 1
  156. if contador == 81:
  157. print("Parabens! O sudoku esta completo!")
  158.  
  159. ###---Algoritmo Principal---###
  160.  
  161. while (programa == 1):
  162. print ("""
  163. Sudoku - Trabalho Final - Versão 0.6 - Data de ínicio: 12/06/2018""")
  164. print ("""Seja Bem Vindo ao Sudoku!
  165. Selecione o Modo de Jogo:
  166. (1) para selecionar o MODO INTERATIVO
  167. (2) para selecionar o MODO BATCH""")
  168.  
  169. MENU = int(input("Selecione o número referente a opção desejada: "))
  170.  
  171. if MENU == 1: #modo interativo
  172. print("""
  173. >>>MODO INTERATIVO:
  174. """)
  175. testar()
  176. if verificador == False or contadorPistas > 80:
  177. sudoku()
  178. print ("JOGO INVÁLIDO: Configuracao de pistas inválida, tente novamente.")
  179.  
  180.  
  181. elif verificador == True:
  182. sudoku()
  183. Tratamento_de_Jogada()
  184. testar()
  185. if verificador == False:
  186. sudoku()
  187. print("JOGO INVÁLIDO: Configuracao de entradas inválida, tente novamente.")
  188. elif verificador == True:
  189. grade[linha][coluna] = numero
  190. sudoku()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement