Advertisement
pefelippe

Sudoku c Batch

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