-
Notifications
You must be signed in to change notification settings - Fork 0
/
sudoku.py
111 lines (79 loc) · 3.13 KB
/
sudoku.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
import random
tem2 = False
tabela_sudoku = []
def gerar():
global tem2
# Tabela do Sudoku #
tabela0 = [0, 0, 0, 0, 0, 0, 0, 0, 0]
tabela1 = [0, 0, 0, 0, 0, 0, 0, 0, 0]
tabela2 = [0, 0, 0, 0, 0, 0, 0, 0, 0]
tabela3 = [0, 0, 0, 0, 0, 0, 0, 0, 0]
tabela4 = [0, 0, 0, 0, 0, 0, 0, 0, 0]
tabela5 = [0, 0, 0, 0, 0, 0, 0, 0, 0]
tabela6 = [0, 0, 0, 0, 0, 0, 0, 0, 0]
tabela7 = [0, 0, 0, 0, 0, 0, 0, 0, 0]
tabela8 = [0, 0, 0, 0, 0, 0, 0, 0, 0]
# tabela geral #
tabela = [tabela0, tabela1, tabela2, tabela3, tabela4, tabela5, tabela6, tabela7, tabela8]
# colocar um numero em um lugar aleatorio #
numero_inicial = random.randrange(0, 9)
posicao_inicial = random.choice(tabela)
posicao_inicial[random.randrange(0, 9)] = numero_inicial
dificuldade = 'medio'
# Função de gerar chance, gera um número em uma escala dependendo da dificuldade
def gerar_chance():
if dificuldade == 'facil':
return random.randrange(0, 2)
if dificuldade == 'medio':
return random.randrange(0, 5)
if dificuldade == 'dificil':
return random.randrange(0, 10)
# Adicionar os números aleatoriamente pela tabela (de 1 a 9)
for tabela_atual in tabela:
for elemento_atual in tabela_atual:
chance = gerar_chance()
if chance == 0:
numero_aleatorio = random.randrange(1, 10)
# Ignorar se ele já está, se não, colocar ele
if numero_aleatorio in tabela_atual:
pass
else:
tabela_atual[random.randrange(0, 9)] = numero_aleatorio
# Todas as células (3x3)
celulas = [
[tabela[0][0:3], tabela[1][0:3], tabela[2][0:3]],
[tabela[0][3:6], tabela[1][3:6], tabela[2][3:6]],
[tabela[0][6:9], tabela[1][6:9], tabela[2][6:9]],
[tabela[3][0:3], tabela[4][0:3], tabela[5][0:3]],
[tabela[3][3:6], tabela[4][3:6], tabela[5][3:6]],
[tabela[3][6:9], tabela[4][6:9], tabela[5][6:9]],
[tabela[6][0:3], tabela[7][0:3], tabela[8][0:3]],
[tabela[6][3:6], tabela[7][3:6], tabela[8][3:6]],
[tabela[6][6:9], tabela[7][6:9], tabela[8][6:9]],
]
lst = []
apareceram = ''
# Sistema para checar todas as casas em todos os blocos
# Se o número que está sendo checado na casa já existe nela, chama a função denovo
# Assim previnindo numeros duplicados em uma casa
for bloco in celulas:
for casa in bloco:
for numero in casa:
if numero != 0:
apareceram += str(numero)
lst.append(numero)
for e in lst:
# list.count() retorna a quantidade de vezes que um elemento aparece em uma lista
if lst.count(e) > 1:
tem2 = True
break
if tem2:
break
lst.clear()
apareceram = ''
for i in tabela:
global tabela_sudoku
tabela_sudoku.append(i)
gerar()
for i in tabela_sudoku:
print(i)