Código de Basic - Resolver Sudokus

Imágen de perfil
Val: 545
Oro
Ha mantenido su posición en Basic (en relación al último mes)
Gráfica de Basic

Resolver Sudokusgráfica de visualizaciones


Basic

Actualizado el 25 de Septiembre del 2017 por Adelino (24 códigos) (Publicado el 12 de Septiembre del 2016)
6.800 visualizaciones desde el 12 de Septiembre del 2016
Resuelve Sudokus por fuerza bruta método "backtrack".
Se maneja con las teclas de dirección.

Dificil

Requerimientos

QBasic64 en Windows x64.
Qbasic4.5 x86.

SDKQB64
estrellaestrellaestrellaestrellaestrella(4)

Publicado el 12 de Septiembre del 2016gráfica de visualizaciones de la versión: SDKQB64
866 visualizaciones desde el 12 de Septiembre del 2016
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

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
DEFINT A-Z: REM                 Declara enteras las variables
SCREEN 0: REM                   Pantalla de texto
WIDTH 40: REM                   40 columnas
COLOR 15, 1: REM                Tinta blanca, fondo azul
DIM A(80), B(80): REM           81 casillas y casillas fijas
DIM Y1(80), Y2(80), Y3(80): REM Agrupando casillas
DIM X1(81), X2(81), X3(81): REM Control de ocupacion
CLS: REM                        Limpiar pantalla
PRINT: REM                      Dibujar cuadricula con caracteres ASCII
PRINT , "ÚÄÄÄÄÄÂÄÄÄÄÄÂÄÄÄÄÄ¿"
PRINT , "³     ³     ³     ³"
PRINT , "³     ³     ³     ³"
PRINT , "³     ³     ³     ³"
PRINT , "³     ³     ³     ³"
PRINT , "³     ³     ³     ³"
PRINT , "ÃÄÄÄÄÄÅÄÄÄÄÄÅÄÄÄÄÄ´"
PRINT , "³     ³     ³     ³"
PRINT , "³     ³     ³     ³"
PRINT , "³     ³     ³     ³"
PRINT , "³     ³     ³     ³"
PRINT , "³     ³     ³     ³"
PRINT , "ÃÄÄÄÄÄÅÄÄÄÄÄÅÄÄÄÄÄ´"
PRINT , "³     ³     ³     ³"
PRINT , "³     ³     ³     ³"
PRINT , "³     ³     ³     ³"
PRINT , "³     ³     ³     ³"
PRINT , "³     ³     ³     ³"
PRINT , "ÀÄÄÄÄÄÁÄÄÄÄÄÁÄÄÄÄÄÙ"
10 COLOR 1, 0: REM              Tinta azul, fondo negro simulando cursor
A = A(N): REM                   Valor de casilla (0,9)
GOSUB 300: REM                  Ir a rutina de plasmar valor
COLOR 0, 1: REM                 Tinta negra, fondo azul
IF a$ = " " OR VAL(a$) > 0 OR a$ = "0" THEN a$ = " M": GOTO 30
REM                             Si el ultimo valor fue valido avanzar una casilla
20 a$ = INKEY$: REM             Lectura de teclado
IF a$ = "" GOTO 20: REM         Si es nulo volver
IF a$ = CHR$(27) THEN END: REM  Si es ESCAPE salir
IF a$ = CHR$(13) GOTO 40: REM   Si es INTRO iniciar resolucion
30 A = A(N): REM                Valor de casilla (0,9)
GOSUB 300: REM                  Ir a rutina de plasmar valor
A = VAL(a$): REM                Valor de tecla pulsada
a$ = RIGHT$(a$, 1): REM         Caracter derecho
REM                             Las teclas de direccion devuelven dos caracteres)
IF a$ = "M" AND N < 80 THEN N = N + 1: REM Flecha derecha
IF a$ = "K" AND N > 0 THEN N = N - 1: REM  Flecha izquierda
IF a$ = "P" AND N < 72 THEN N = N + 9: REM Flecha abajo
IF a$ = "H" AND N > 8 THEN N = N - 9: REM  Flecha arriba
IF A = 0 AND LEN(a$) < 2 AND a$ <> " " AND a$ <> "0" GOTO 10
REM                             Si el caracter no es valido volver a cursor
A(N) = A: REM                   Asignar valor pulsado a la casilla actual
GOTO 10: REM                    Volver a cursor
40 N = 0: REM                   Casilla inicial
REM                             Inicio de agrupamiento
FOR V = 0 TO 2
    FOR W = 0 TO 2
        FOR X = 0 TO 2
            FOR Y = 0 TO 2
                Y1(N) = 27 * V + 9 * W: REM Puntero fila (0,72)
                Y2(N) = 27 * X + 9 * Y: REM Puntero columna (0,72)
                Y3(N) = 27 * V + 9 * X: REM Puntero zona (0,72)
                N = N + 1: REM  Siguiente casilla
NEXT Y, X, W, V: REM            Fin agrupamiento
50 FOR N = 0 TO 80: REM         Inicio control de casillas ocupadas
    A = A(N): REM               Obtener valor de casilla
    IF A = 0 GOTO 60: REM       Si es "0" saltar
    Y1 = Y1(N) + A: REM         Puntero de fila mas valor
    Y2 = Y2(N) + A: REM         Puntero de columna mas valor
    Y3 = Y3(N) + A: REM         Puntero de zona mas valor
    IF X1(Y1) + X2(Y2) + X3(Y3) THEN A(N) = 0: GOTO 60
    REM                         Si valor ya esta en uso saltar
    B(N) = 1: REM               Establecer casilla ocupada
    X1(Y1) = 1: REM             Establecer valor en uso para fila
    X2(Y2) = 1: REM             Establecer valor en uso para columna
    X3(Y3) = 1: REM             Establecer valor en uso para zona
60 NEXT: REM                    Fin control de ocupacion
N = -1: REM                     Inicio rutina de resolucion
70 N = N + 1: REM               Siguiente casilla
IF N = 81 GOTO 200: REM         Si supera el limite saltar a resuelto
IF B(N) GOTO 70: REM            Si es fijo ir a siguiente
80 A = A(N): REM                Valor de casilla (0,9)
Y1 = Y1(N) + A: REM             Puntero de fila mas valor
Y2 = Y2(N) + A: REM             Puntero de columna mas valor
Y3 = Y3(N) + A: REM             Puntero de zona mas valor
IF A THEN X1(Y1) = 0: X2(Y2) = 0: X3(Y3) = 0
REM                             Si el valor no es "0" establecer sin uso
90 A = A + 1: REM               Siguiente numero en casilla
IF A > 9 GOTO 100: REM          Si era le nueve saltar a rebase
Y1 = Y1 + 1: REM                Puntero de fila mas 1
Y2 = Y2 + 1: REM                Puntero de columna mas 1
Y3 = Y3 + 1: REM                Puntero de zona mas 1
IF X1(Y1) + X2(Y2) + X3(Y3) GOTO 90
REM                             Si valor ya esta en uso volver a siguiente
X1(Y1) = 1: REM                 Establecer valor en uso para fila
X2(Y2) = 1: REM                 Establecer valor en uso para columna
X3(Y3) = 1: REM                 Establecer valor en uso para zona
A(N) = A: REM                   Asignar nuevo valor
GOTO 70: REM                    Volver a siguiente
100 A(N) = 0: REM               Asignar "0" por rebase
110 N = N - 1: REM              Casilla anterior
IF N < 0 THEN RUN: REM          No hay mas soluciones reiniciar
IF B(N) GOTO 110: REM           Si es fijo ir a anterior
GOTO 80: REM                    Volver a obtener casilla
200 Z = Z + 1: REM              Imprimir solucion en pantalla
LOCATE 1, 1: REM
PRINT , "      **"; Z; "**"
LOCATE 22, 18
COLOR 1, 15
PRINT " Pulsar INTRO "
FOR N = 0 TO 80
    A = A(N)
    COLOR 15 - 15 * B(N), 1
    GOSUB 300
NEXT
210 IF INKEY$ <> "" GOTO 210
220 a$ = INKEY$
IF a$ = "" GOTO 220
IF a$ = CHR$(27) THEN RUN
GOTO 110: REM                   Si no se pulsa ESCAPE buscar mas soluciones
300 LOCATE 2 * INT(N / 9) + 3, 2 * (N - 9 * INT(N / 9)) + 16
PRINT CHR$(A - 48 * (A > 0) - 32 * (A = 0))
RETURN



Comentarios sobre la versión: SDKQB64 (4)

Manel
12 de Septiembre del 2016
estrellaestrellaestrellaestrellaestrella
La verdad es que da gusto ver que hay quien no se olvido el BASIC de toda la vida. Por cierto, en que dialecto está, porque aparecen algunos de los números de línea pero no todos?
Responder
Imágen de perfil
12 de Septiembre del 2016
estrellaestrellaestrellaestrellaestrella
El original es para Gwbasic con números de línea, está adaptado para Qbasic de 64 bits que solo necesita etiquetas, este genera un archivo EXE bastante rápido.
Quería poner el ejecutable para que fuera más fácil probarlo.
Responder
jorge ibsen
3 de Mayo del 2017
estrellaestrellaestrellaestrellaestrella
copie el programa, introduzco valores para un sudoku y solo llego hasta aqui, y el programa no continua, sin obtener resultados. ¿Que debo hacer para correrlo y obtener resultado? Coloco Intro y se borra loa pantalla. Con run todo queda igual.
Responder
Imágen de perfil
4 de Mayo del 2017
estrellaestrellaestrellaestrellaestrella
La mejor opción para usar el programa es utilizar la versión .EXE (x64) del fichero ZIP, el fichero .bas es el mismo que el .txt y se ejecutan arrancando qbasic x64 o x86, fáciles de encontrar en internet.
Responder

Comentar la versión: SDKQB64

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad

1.2

Actualizado el 17 de Septiembre del 2017 (Publicado el 12 de Septiembre del 2016)gráfica de visualizaciones de la versión: 1.2
1.318 visualizaciones desde el 12 de Septiembre del 2016

1.3

Actualizado el 6 de Octubre del 2016 (Publicado el 26 de Septiembre del 2016)gráfica de visualizaciones de la versión: 1.3
1.359 visualizaciones desde el 26 de Septiembre del 2016

1.4

Publicado el 16 de Septiembre del 2017gráfica de visualizaciones de la versión: 1.4
533 visualizaciones desde el 16 de Septiembre del 2017

1.5
estrellaestrellaestrellaestrellaestrella(1)

Actualizado el 5 de Junio del 2019 (Publicado el 17 de Septiembre del 2017)gráfica de visualizaciones de la versión: 1.5
692 visualizaciones desde el 17 de Septiembre del 2017

1.6

Publicado el 25 de Septiembre del 2017gráfica de visualizaciones de la versión: 1.6
2.033 visualizaciones desde el 25 de Septiembre del 2017
http://lwp-l.com/s3664