Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- grade = [[" " for x in range(9)] for y in range(9)]
- programa = 1
- contadorPistas = 0
- verificadorPistas = 0
- verificadorEntradas = 0
- padrão = True
- linha = 0
- coluna = 0
- numero = " "
- pistas = open('pistas.txt', 'r') #Lê o arquivo "pistas.txt"
- for line in pistas: #Trata as pistas e as insere na matriz.
- contadorPistas +=1
- COL1 = line[:1]
- coluna = int(ord(COL1) - 65) #Converte a Letra para Número.
- LIN1 = line[2:3]
- linha = int(LIN1) - 1
- NUM1 = line[4:5]
- numero = int(NUM1)
- grade[linha][coluna] = numero
- entradas = open('jogadas.txt', 'r')
- for line in entradas:
- COL2 = line[:1]
- colunaE = int(ord(COL2) - 65)
- LIN2 = line[2:3]
- linhaE = int(LIN2) -1
- NUM2 = line[4:5]
- numeroE = int(NUM2)
- def sudoku(): #exibe a grade do sudoku já formatada e com as pistas.
- colunasletras = " A B C D E F G H I "
- linhaHorizontal1 = " ++---+---+---++---+---+---++---+---+---++ "
- linhaHorizontal2 = " ++===+===+===++===+===+===++===+===+===++ "
- print (colunasletras)
- for i in range(0,9):
- if i == 3 or i == 6:
- print (linhaHorizontal2)
- else:
- print(linhaHorizontal1)
- for j in range(0,9):
- if (j == 3) or (j == 6):
- print ("|| {} |".format(grade[i][j]), end = " ")
- elif (j == 0):
- print (i+1,"|| {} |".format(grade[i][j]), end = " ")
- elif (j == 8):
- print("| {} ||".format(grade[i][j]),i+1, end = " ")
- elif j == 2 or j == 5:
- print("| {}".format(grade[i][j]), end = " ")
- else:
- print("{}".format(grade[i][j]), end = " ")
- print()
- print(linhaHorizontal1)
- print(colunasletras)
- def testarPistas(coluna, linha, numero, grade): #checa se pode escrever valor em matriz[linha][coluna]
- for i in range(0,9):
- if(i != coluna and grade[linha][i] == numero): #checando linha
- return False
- if(i != linha and grade[i][coluna] == numero): #checando coluna
- return False
- quadranteLinha = int( linha / 3 )
- inicioLinha = quadranteLinha * 3
- fimLinha = inicioLinha + 3;
- quadranteColuna = int( coluna / 3 )
- inicioColuna = quadranteColuna * 3
- fimColuna = inicioColuna + 3;
- for i in range(inicioLinha, fimLinha): #checando quadrante
- for j in range(inicioColuna, fimColuna):
- if(i == linha and j == coluna):
- continue
- if (grade[i][j] == numero):
- return False
- return True
- verificadorPistas = testarPistas(coluna, linha, numero, grade) #atribui um verificador ao resultado da função testar()
- def Tratamento_de_Jogada():
- dic = {"A":0,"B":1,"C":2,"D":3,"E":4,"F":5,"G":6,"H":7,"I":8}
- padrão = True
- pistas = open('pistas.txt', 'r') #Lê o arquivo "pistas.txt"
- for line in pistas: #Trata as pistas e as insere na matriz.
- COL1 = line[:1]
- coluna = int(ord(COL1) - 65) #Converte a Letra para Número.
- LIN1 = line[2:3]
- linha = int(LIN1) - 1
- NUM1 = line[4:5]
- numero = int(NUM1)
- while True:
- jogadas = input('Insira sua jogada:')
- jogadas = jogadas.split()
- jogadas = "".join(jogadas)
- jogadas = jogadas.upper()
- if len(jogadas) == 5: #quantidade correta de algarismos em uma jogada, qualquer len diferente significa erro.
- if jogadas[0].isalpha() and jogadas[0] in dic:
- colunaJ = dic[jogadas[0]]
- if jogadas[1] != ',' or jogadas[3] != ':':
- print('Dígitos incorretos')
- padrão = False
- if jogadas[2].isdigit():
- if int(jogadas[2]) > 0 and int(jogadas[2]) < 10:
- linhaJ = int(jogadas[2]) - 1
- if grade[linha][coluna] == grade[linhaJ][colunaJ]:
- print("ERRO: Uma entrada não pode sobrescrever uma Pista!")
- padrão = False
- else:
- linha = linhaJ
- coluna = colunaJ
- else:
- print('Linha inválida')
- padrão = False
- else:
- print('Linha inválida')
- padrão = False
- if jogadas[4].isdigit() and len(jogadas)==5:
- if int(jogadas[4]) > 0 and int(jogadas[4]) < 10:
- numero = int(jogadas[4])
- else:
- print('Coluna inválida')
- padrão = False
- elif len(jogadas) == 4: #Remove um dos elementos
- if jogadas[0] == "D":
- if jogadas[2] == ",":
- coluna = dic[jogadas[1]]
- linha = int(jogadas[3]) - 1
- grade[linha][colunaJ] = " "
- sudoku()
- padrão = False
- else:
- print("Fora do padrão de jogadas")
- padrão = False
- else:
- print('Fora do padrão de jogadas')
- padrão = False
- else:
- print('Fora do padrão de jogadas')
- padrão = False
- if padrão:
- testarPistas(coluna, linha, numero, grade)
- if verificadorPistas == True:
- grade[linha][coluna] = numero
- sudoku()
- if verificadorPistas == False:
- print("JOGO INVÁLIDO: Configuracao de entradas inválida, tente novamente.")
- else:
- padrão = True
- contador = 0
- for i in range(0, 9):
- for j in range(0, 9):
- if grade[i][j] != " ":
- contador += 1
- if contador == 81:
- print("Parabens! O sudoku esta completo!")
- ###---Algoritmo Principal---###
- while (programa == 1):
- print ("""Sudoku - Trabalho Final - Versão 0.9 - Data de ínicio: 12/06/2018""")
- print ("""Seja Bem Vindo ao Sudoku!
- Selecione o Modo de Jogo:
- (1) para selecionar o MODO INTERATIVO
- (2) para selecionar o MODO BATCH""")
- MENU = int(input("Selecione o número referente a opção desejada: "))
- if MENU == 1: #modo interativo
- print("""
- >>>MODO INTERATIVO:
- """)
- testarPistas(coluna, linha, numero, grade)
- if verificadorPistas == False or contadorPistas > 80:
- sudoku()
- print ("JOGO INVÁLIDO: Configuracao de pistas inválida, tente novamente.")
- elif verificadorPistas == True:
- sudoku()
- testarPistas(coluna, linha, numero, grade)
- Tratamento_de_Jogada()
- elif MENU == 2: # modo batch
- grade[linhaE][colunaE] = numeroE
- sudoku()
- if grade[linha][coluna] == grade[linhaE][colunaE]:
- print("A jogada ({0},{1}) = {2} eh invalida!".format(colunaE, linhaE, numeroE))
- contador = 0
- for i in range(0, 9):
- for j in range(0, 9):
- if grade[i][j] != " ":
- contador += 1
- if contador == 81:
- print("A grade foi preenchida com sucesso!")
- else:
- print("""
- A grade foi nao foi preenchida!
- """)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement