-
Notifications
You must be signed in to change notification settings - Fork 0
/
A00839531_SUDOKU.py
193 lines (181 loc) · 7.25 KB
/
A00839531_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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
import random
import os
def instrucciones():
print("""
Este sudoku se juega igual que el juego clásico con algunas excepciones:
Para empezar recordemos que en un sudoku tienes que colocar números del 1-9 en una matriz de 9x9 de tal forma que no se repita el mismo número en la misma fila, columna, o cuadro, (los cuadrados están marcados dentro del juego).
Para jugar este sudoku, debes de colocar un número del 1-9 son sus coordenadas que van de (0-8,0-8)El tablero la primera columna y fila son (0 0) y las últimas (8 8). las coordenadas se deben colocar en el formato ("x y") por ejemplo (0 8).
El juego sigue hasta que cometas 5 errores o coloques un 0, los números que coloques y estén correctos al momento de ponerlos no se pueden quitar. Es decir, solo te marcará error cuando hayas repetido número en la misma fila, columna, o cuadro. De otra forma podrás seguir jugando.
Los puntos se consiguen con cada número correcto puesto en el tablero menos el numero de errores cometidos, siendo el número máximo de puntos un 41. Cada matriz es diferente y tiene un resultado. ¡Mucha suerte!
""")
while True:
print("Bienvenido! Elige la opcion que des")
print("\nMenú:")
print("1. Instrucciones")
print("2. Jugar")
print("3. salir")
opcion = input("Selecciona una opción: ")
if opcion == "1":
instrucciones()
elif opcion == "2":
def imprimir(Matriz_Sudoku):
for i, fila in enumerate(Matriz_Sudoku):
fila_formateada = ' '.join(fila)
if i % 3 == 0 and i != 0:
print('-' * len(fila_formateada))
print(fila_formateada)
def escribir(Matriz_Sudoku, a, b, c):
d=b+1
if(d%3==0):
Matriz_Sudoku[a][b] = c +'|'
else:
Matriz_Sudoku[a][b] = c
return Matriz_Sudoku
def pedirnum():
while True:
try:
valor = int(input("Ingrese un número del 1 al 9: "))
if 0 <= valor <= 9:
break
else:
print("El número debe estar en el rango de 1 a 9.")
except ValueError:
print("Por favor, ingrese un número válido.")
return valor
def pedircoordenadas(Matriz_Sudoku):
x = 0
y = 0
while True:
try:
coordenadas = input("Ingresa las coordenadas (x y): ")
x, y = map(int, coordenadas.split())
if 0 <= x < 9 and 0 <= y < 9:
if Matriz_Sudoku[x][y] == '-' or Matriz_Sudoku[x][y] == '-|':
break
else:
print("Por favor, ingrese coordenadas vacías.")
else:
print("Ingrese números válidos")
except ValueError:
print("Por favor, ingrese números válidos.")
return x, y
def generar_tablero_sudoku():
tablero = [[0] * 9 for _ in range(9)]
def es_valido(fila, columna, numero):
for i in range(9):
if tablero[fila][i] == numero or tablero[i][columna] == numero:
return False
cuadrante_fila = (fila // 3) * 3
cuadrante_columna = (columna // 3) * 3
for i in range(3):
for j in range(3):
if tablero[cuadrante_fila + i][cuadrante_columna + j] == numero:
return False
return True
def resolver():
for fila in range(9):
for columna in range(9):
if tablero[fila][columna] == 0:
numeros_disponibles = list(range(1, 10))
random.shuffle(numeros_disponibles)
for numero in numeros_disponibles:
if es_valido(fila, columna, numero):
tablero[fila][columna] = numero
if resolver():
return True
tablero[fila][columna] = 0
return False
return True
resolver()
return tablero
nombre=input("cual es tu nombre?")
Matriz_Resuelta = generar_tablero_sudoku()
M1 = []
M2 = []
M3 = []
M4 = []
M5 = []
M6 = []
M7 = []
M8 = []
M9 = []
Matriz_Sudoku=[
M1,
M2,
M3,
M4,
M5,
M6,
M7,
M8,
M9]
j = 9
p = 0
for cont in range(0,9):
for cont1 in range(1,10):
if(cont1%3==0):
a = '-|'
else:
a = '-'
Matriz_Sudoku[cont].append(a)
i=0
while i<40:
xr=i%9
yr=random.randint(0, 8)
if Matriz_Sudoku[xr][yr] == '-' or Matriz_Sudoku[xr][yr] == '-|':
valor=Matriz_Resuelta[xr][yr]
escribir(Matriz_Sudoku,xr,yr,str(valor))
i=i+1
e=0
while (e<5):
f=str(e)
error=0
imprimir(Matriz_Sudoku)
print('tienes '+f+' errores')
valor = pedirnum()
if valor==0:
break
x, y = pedircoordenadas(Matriz_Sudoku)
for z in range (0,8):
if z != y:
q = Matriz_Sudoku[x][z]
q=q.replace('|', "")
else:
q='.'
if z != x:
t = Matriz_Sudoku[z][y]
t=t.replace('|', "")
else:
t='.'
if(str(valor) == q or str(valor)==t):
error = 1
a1=int(x/3)*3
b1=int(y/3)*3
for z in range(0,3):
for v in range (0,3):
a=(a1+z)
b=(b1+v)
if a != x or b!=y:
u = Matriz_Sudoku[a][b]
u = u.replace('|',"")
else:
u='.'
if(str(valor)) == u:
error=1
if (error==1):
e=error+e
else:
escribir(Matriz_Sudoku, x, y, str(valor))
p=p+1
if(p==41):
print("felicidades has ganado")
e=5
puntaje=p-e
if(puntaje<0):
puntaje=0
print(nombre+' tu puntaje fue de '+str(puntaje))
elif opcion == "3":
print("Saliendo del programa.")
break
else:
print("Opción no válida. Por favor, selecciona una opción válida.")