elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  [RETO] Sudoku
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 2 [3] Ir Abajo Respuesta Imprimir
Autor Tema: [RETO] Sudoku  (Leído 12,398 veces)
x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: [RETO] Sudoku
« Respuesta #20 en: 24 Septiembre 2011, 05:31 am »

 :-\ aun no e encontrado adonde esta el error si existe ya me estoy quedando ciego :P lo que si me di cuenta es
que BlackZeroX escribio mal el sudoku :P

 5  3  1
 6  2  4
 3  9  6

el 6 es en la imagen 8 quiza eso debe ser la razon porque quiza algunos de nosotros lo resolvimos y no nos dio el mismo resultado :P

EDIT:
lo e comprobado el resultado de BlackZeroX con el programa que publique :xD
y me salio correcto ;D ( o mi programa tambien esta malo :xD )
me di cuenta tambien que hay otro valor mal escrito:


(inicial, esquina superior derecha):

  0  0  0
  0  0  0
  0 1  0

el resultado al parecer es correcto lo que paso es que BlackZeroX escribio mal los valores osea que ese
es otro resultado de otro juego de sudoku :P
quien corrobora? :P


« Última modificación: 24 Septiembre 2011, 05:43 am por Raul100 » En línea

Sanlegas

Desconectado Desconectado

Mensajes: 131


https://fbcdn-sphotos-e-a.akamaihd.net/hphotos-ak-


Ver Perfil
Re: [RETO] Sudoku
« Respuesta #21 en: 24 Septiembre 2011, 06:20 am »

el metio los valores así

Código
  1. bSudoku(2, 2) = 6
  2. bSudoku(2, 7) = 1


Y aunque fuera de otro sudoku las reglas se aplican...

Salu2!


En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: [RETO] Sudoku
« Respuesta #22 en: 24 Septiembre 2011, 06:32 am »

 :rolleyes:
si pero eso que quiere decir? lo que veo yo es que escribio otro problema de sudoku no que el codigo da un resultado incorrecto :P
bueno ya no desviare el tema :P creo que esta claro :P
En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: [RETO] Sudoku
« Respuesta #23 en: 24 Septiembre 2011, 06:46 am »

JAJAJA pense que nadie lo hiba a notar xP... ya lo corrijo.

Dulces Lunas!¡.
En línea

The Dark Shadow is my passion.
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: [RETO] Sudoku
« Respuesta #24 en: 24 Septiembre 2011, 08:11 am »

.
Optimise varias cosas...

[opcional]
El siguiente codigo requiere de un form con varios textbox llamados txtCell (matrix de controles) y un boton llamado cmdSolve, pongo en descarga el archivo para bajar.
[/opcional]

Código
  1.  
  2. '
  3. '   /////////////////////////////////////////////////////////////
  4. '   // Autor:   BlackZeroX ( Ortega Avila Miguel Angel )       //
  5. '   //                                                         //
  6. '   // Web:     http://InfrAngeluX.Sytes.Net/                  //
  7. '   //                                                         //
  8. '   //    |-> Pueden Distribuir Este codigo siempre y cuando   //
  9. '   // no se eliminen los creditos originales de este codigo   //
  10. '   // No importando que sea modificado/editado o engrandecido //
  11. '   // o achicado, si es en base a este codigo                 //
  12. '   /////////////////////////////////////////////////////////////
  13.  
  14. Option Explicit
  15.  
  16. Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
  17.  
  18. Dim bSudoku(8, 8)   As Byte '   //  (nColumnas, nFilas)
  19.  
  20. 'Private Sub cmdSolve_Click()
  21. '    fillSudoku bSudoku
  22. '    Caption = solveSudoku(bSudoku, 0, 0) '   //  Por BackTracking
  23. '    showSudoku bSudoku
  24. 'End Sub
  25.  
  26. Private Sub Form_Load()
  27.    bSudoku(0, 0) = 5
  28.    bSudoku(0, 1) = 3
  29.    bSudoku(0, 4) = 7
  30.  
  31.    bSudoku(1, 0) = 6
  32.    bSudoku(1, 3) = 1
  33.    bSudoku(1, 4) = 9
  34.    bSudoku(1, 5) = 5
  35.  
  36.    bSudoku(2, 1) = 9
  37.    bSudoku(2, 2) = 6
  38.    bSudoku(2, 7) = 1
  39.  
  40.    bSudoku(3, 0) = 8
  41.    bSudoku(3, 4) = 6
  42.    bSudoku(3, 8) = 3
  43.  
  44.    bSudoku(4, 0) = 4
  45.    bSudoku(4, 3) = 8
  46.    bSudoku(4, 5) = 3
  47.    bSudoku(4, 8) = 1
  48.  
  49.    bSudoku(5, 0) = 7
  50.    bSudoku(5, 4) = 2
  51.    bSudoku(5, 8) = 6
  52.  
  53.    bSudoku(6, 1) = 6
  54.    bSudoku(6, 6) = 2
  55.    bSudoku(6, 7) = 8
  56.  
  57.    bSudoku(7, 3) = 4
  58.    bSudoku(7, 4) = 1
  59.    bSudoku(7, 5) = 9
  60.    bSudoku(7, 8) = 5
  61.  
  62.    bSudoku(8, 4) = 8
  63.    bSudoku(8, 7) = 7
  64.    bSudoku(8, 8) = 9
  65.  
  66.    Debug.Print "Matrix inicial."
  67.    showSudoku bSudoku
  68.    If solveSudoku(bSudoku, 0, 0) Then
  69.        Debug.Print "Sudoku Resuelto"
  70.        showSudoku bSudoku
  71.    Else
  72.        Debug.Print "No se puede resolver, revisa la matrix."
  73.    End If
  74. End Sub
  75.  
  76. Public Sub showSudoku(ByRef bArray() As Byte)
  77. Dim i As Integer
  78. Dim j As Integer
  79.    Show
  80.    For i = 0 To UBound(bArray, 1)          '   //  Fila
  81.        For j = 0 To UBound(bArray, 2)      '   //  Columa
  82.            'txtCell((i * 9) + j).Text = bArray(j, i)
  83.            If (((j + &H1) Mod &H3) = &H0) Then
  84.                Debug.Print bArray(j, i); "|";
  85.            Else
  86.                Debug.Print bArray(j, i);
  87.            End If
  88.        Next
  89.        Debug.Print
  90.        If (((i + &H1) Mod &H3) = &H0) Then Debug.Print String(32, "-")
  91.    Next
  92. End Sub
  93.  
  94. 'Public Sub fillSudoku(ByRef bArray() As Byte)
  95. 'Dim i As Integer
  96. 'Dim j As Integer
  97. '    Show
  98. '    For i = 0 To UBound(bArray, 1)          '   //  Fila
  99. '        For j = 0 To UBound(bArray, 2)      '   //  Columa
  100. '            bArray(j, i) = txtCell((i * 9) + j).Text
  101. '        Next
  102. '    Next
  103. 'End Sub
  104.  
  105. Public Function chkRow(ByRef bArray() As Byte, ByVal lIndex As Long, ByVal lVal As Long) As Boolean
  106. '   //  Revisa la existencia de lVal en una Fila (lIndex).
  107. Dim i           As Long
  108.    Do While (i < 8) And (chkRow = False)
  109.        If (bArray(i, lIndex) = lVal) Then chkRow = True
  110.        i = (i + &H1)
  111.    Loop
  112. End Function
  113.  
  114. Public Function chkCol(ByRef bArray() As Byte, ByVal lIndex As Long, ByVal lVal As Long) As Boolean
  115. '   //  Revisa la existencia de lVal en una Columna (lIndex).
  116. Dim i           As Long
  117.    Do While (i < 8) And (chkCol = False)
  118.        If (bArray(lIndex, i) = lVal) Then chkCol = True
  119.        i = (i + &H1)
  120.    Loop
  121. End Function
  122.  
  123. Public Function chkRect(ByRef bArray() As Byte, ByVal lCol As Long, ByVal lRow As Long, ByVal lVal As Long) As Boolean
  124. '   //  Revisa la existencia de lVal en el cuadrante desde la celda superior izquierda respectiva dados por (lCol, lRow).
  125. Dim i           As Long
  126. Dim j           As Long
  127.    '   //  Obtenemos los indices de la celda superior izquierda del cuadrante inicial respectivo.
  128.    lRow = ((lRow \ 3) * 3)
  129.    lCol = ((lCol \ 3) * 3)
  130.    Do          '   //  Filas
  131.        j = &H0
  132.        Do          '   //  Columnas
  133.            If (bArray(lCol + j, lRow + i) = lVal) Then chkRect = True
  134.            j = (j + &H1)
  135.        Loop While (j < &H3) And (chkRect = False)
  136.        i = (i + &H1)
  137.    Loop While (i < &H3) And (chkRect = False)
  138. End Function
  139.  
  140. Public Function solveSudoku(ByRef bArray() As Byte, ByVal lCol As Long, ByVal lRow As Long) As Boolean
  141. '   //  Resuelve una Matrix de Sudoku de 9x9 celdas.
  142. '   //  Si se retorna true, entonces la matrix ya esta Completa y/o Resuelta.
  143. Dim lVal        As Long
  144. Dim i           As Long
  145.  
  146.    '   //  Termino de filas.
  147.    If (lRow >= 9) Then solveSudoku = True: Exit Function
  148.  
  149.    '   //  Nos posicionamos en la 1ra celda de lRow vacia (con valor 0).
  150.    Do While Not (bArray(lCol, lRow) = &H0) And (solveSudoku = False)
  151.        lCol = (lCol + &H1)
  152.        If (lCol = &H9) Then
  153.            lCol = &H0
  154.            lRow = (lRow + &H1)
  155.            If (lRow >= &H8) Then solveSudoku = True
  156.        End If
  157.    Loop
  158.  
  159.    '   //  Recorremos TODOS LOS VALORES desde 1 a 9 para la celda (lCol, lRow).
  160.    For lVal = 1 To 9
  161.        If Not chkRect(bArray, lCol, lRow, lVal) Then       '   //  Cuadro de 3x3.
  162.            If Not (chkRow(bArray, lRow, lVal)) Then        '   //  Fila.
  163.                If Not (chkCol(bArray, lCol, lVal)) Then    '   //  Columnas.
  164.                    bArray(lCol, lRow) = lVal
  165.                    If (lCol < 8) Then                      '   //  Aun no llegamos al final de la fila?
  166.                        solveSudoku = solveSudoku(bArray, (lCol + 1), lRow)
  167.                    Else                                    '   //  Iniciamos otra llamada si mismo pero en la siguiente fila
  168.                        solveSudoku = solveSudoku(bArray, 0, (lRow + 1))
  169.                    End If
  170.                    If Not solveSudoku Then bArray(lCol, lRow) = 0  '   //  Seteamos la celda a 0 para realizar el BackTracking.
  171.                End If
  172.            End If
  173.        End If
  174.    Next
  175.  
  176. End Function
  177.  
  178.  

output:

Código:

Matrix inicial.
 5  6  0 | 8  4  7 | 0  0  0 |
 3  0  9 | 0  0  0 | 6  0  0 |
 0  0  6 | 0  0  0 | 0  0  0 |
--------------------------------
 0  1  0 | 0  8  0 | 0  4  0 |
 7  9  0 | 6  0  2 | 0  1  8 |
 0  5  0 | 0  3  0 | 0  9  0 |
--------------------------------
 0  0  0 | 0  0  0 | 2  0  0 |
 0  0  1 | 0  0  0 | 8  0  7 |
 0  0  0 | 3  1  6 | 0  5  9 |
--------------------------------
No se puede resolver, revisa la matrix.



con la matrix:

Código:

    bSudoku(5, 0) = 5
    bSudoku(6, 0) = 2
   
    bSudoku(1, 1) = 6
    bSudoku(2, 1) = 5
    bSudoku(4, 1) = 3
   
    bSudoku(0, 2) = 9
    bSudoku(1, 2) = 3
    bSudoku(5, 2) = 1
   
    bSudoku(1, 3) = 9
    bSudoku(3, 3) = 4
    bSudoku(4, 3) = 6
    bSudoku(5, 3) = 3
   
    bSudoku(8, 4) = 8
   
    bSudoku(1, 5) = 7
    bSudoku(3, 5) = 8
    bSudoku(6, 5) = 6
   
    bSudoku(1, 6) = 8
    bSudoku(3, 6) = 1
    bSudoku(7, 6) = 3
    bSudoku(8, 6) = 2
   
    bSudoku(4, 7) = 8
    bSudoku(8, 7) = 4
   
    bSudoku(0, 8) = 5
    bSudoku(4, 8) = 9


Output:

Código:

Matrix inicial.
 0  0  0 | 0  0  5 | 2  0  0 |
 0  6  5 | 0  3  0 | 0  0  0 |
 9  3  0 | 0  0  1 | 0  0  0 |
--------------------------------
 0  9  0 | 4  6  3 | 0  0  0 |
 0  0  0 | 0  0  0 | 0  0  8 |
 0  7  0 | 8  0  0 | 6  0  0 |
--------------------------------
 0  8  0 | 1  0  0 | 0  3  2 |
 0  0  0 | 0  8  0 | 0  0  4 |
 5  0  0 | 0  9  0 | 0  0  0 |
--------------------------------
Sudoku Resuelto
 1  4  8 | 6  7  5 | 2  9  3 |
 2  6  5 | 9  3  8 | 4  1  7 |
 9  3  7 | 2  4  1 | 8  5  6 |
--------------------------------
 8  9  2 | 4  6  3 | 1  7  5 |
 4  5  6 | 7  1  9 | 3  2  8 |
 3  7  1 | 8  5  2 | 6  4  9 |
--------------------------------
 6  8  9 | 1  2  7 | 5  3  2 |
 7  1  3 | 5  8  4 | 9  6  4 |
 5  2  4 | 3  9  6 | 7  8  1 |
--------------------------------


Temibles Lunas!¡.
« Última modificación: 24 Septiembre 2011, 08:28 am por BlackZeroX▓▓▒▒░░ » En línea

The Dark Shadow is my passion.
fary


Desconectado Desconectado

Mensajes: 1.061



Ver Perfil WWW
Re: [RETO] Sudoku
« Respuesta #25 en: 24 Septiembre 2011, 13:02 pm »


Matrix inicial.
 0  0  0 | 0  0  5 | 2  0  0 |
 0  6  5 | 0  3  0 | 0  0  0 |
 9  3  0 | 0  0  1 | 0  0  0 |
--------------------------------
 0  9  0 | 4  6  3 | 0  0  0 |
 0  0  0 | 0  0  0 | 0  0  8 |
 0  7  0 | 8  0  0 | 6  0  0 |
--------------------------------
 0  8  0 | 1  0  0 | 0  3  2 |
 0  0  0 | 0  8  0 | 0  0  4 |
 5  0  0 | 0  9  0 | 0  0  0 |
--------------------------------
Sudoku Resuelto
 1  4  8 | 6  7  5 | 2  9  3 |
 2  6  5 | 9  3  8 | 4  1  7 |
 9  3  7 | 2  4  1 | 8  5  6 |
--------------------------------
 8  9  2 | 4  6  3 | 1  7  5 |
 4  5  6 | 7  1  9 | 3  2  8 |
 3  7  1 | 8  5  2 | 6  4  9 |
--------------------------------
 6  8  9 | 1  2  7 | 5  3  2 |
 7  1  3 | 5  8  4 | 9  6  4 |
 5  2  4 | 3  9  6 | 7  8  1 |
--------------------------------


saludos.
En línea

Un byte a la izquierda.
Páginas: 1 2 [3] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
programa pa resoler sudoku help!!!
Programación Visual Basic
scugat 5 1,776 Último mensaje 14 Enero 2006, 11:19 am
por scugat
ayuda con sudoku de imagenes
Programación Visual Basic
Lordbeni 4 2,939 Último mensaje 30 Enero 2006, 10:03 am
por Grimble Grumble
Sudoku.. « 1 2 »
Programación Visual Basic
loco! 16 7,682 Último mensaje 3 Junio 2006, 13:40 pm
por karmany
Ayuda - Algoritmo Sudoku
Programación Visual Basic
VonN 8 6,606 Último mensaje 11 Julio 2009, 02:35 am
por h0oke
Resolución sudoku heuristica
Programación General
psylock 6 7,937 Último mensaje 14 Noviembre 2011, 11:25 am
por BlackZeroX
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines