Combinaciones numericas por posicion con numeros guias

Iniciado por luis456, 28 Junio 2014, 18:06 PM

0 Miembros y 1 Visitante están viendo este tema.

luis456

Cita de: Tzhed\ Kyperf/ en 30 Junio 2014, 09:16 AM
Igual es xq estoy acabado de levantar, pero no entiendo nada xddd

Hay algun sitio donde se pueda consultar esa 'forma' de generar numeros y su itilidad?

Bien util para los que les guste las loterías :) y para quienes buscamos claves numéricas diferentes porque ya sabemos que con un generador genérico de combinaciones numéricas se producen la hostia de combinaciones pero predecibles :)


Pongo el contenido de lo que me encontré para este proyecto



Para usar esta rueda: Imprime una copia de la impresora. Escribe tus números
debajo de mis números guías, úsalos como usarías una rueda de códigos infantil
para cambiar los números por los míos en las combinaciones debajo. Esto es una
rueda cargada, entonces si clasificas tus números de mejor a peor, entonces
coloca de primero las mejores opciones en la rueda yendo de izquierda a derecha.

Números guías: 01-02-03-04-05-06-07-08-09-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

01)...01-02-03-04-05-06. . 02)...01-02-03-07-08-09. . 03)...01-04-09-10-11-12
04)...01-05-17-29-41-49. . 05)...01-06-13-20-30-43. . 06)...01-08-19-26-33-44
07)...01-10-22-31-36-39. . 08)...01-11-14-28-42-47. . 09)...01-19-32-34-38-48
10)...02-04-18-30-42-49. . 11)...02-05-06-10-11-12. . 12)...02-07-16-20-31-41
13)...02-09-15-17-28-38. . 14)...02-13-22-29-33-40. . 15)...02-14-19-35-37-43
16)...02-21-26-32-39-45. . 17)...03-04-22-32-41-43. . 18)...03-05-19-25-31-42
19)...03-06-14-26-38-49. . 20)...03-07-08-10-11-12. . 21)...03-09-21-27-36-44
22)...03-11-17-20-33-39. . 23)...03-23-28-34-37-49. . 24)...04-05-06-07-08-09
25)...04-08-16-25-35-39. . 26)...04-10-17-34-40-47. . 27)...04-11-13-24-31-44
28)...04-12-21-29-38-46. . 29)...05-07-21-24-33-43. . 30)...05-10-13-18-28-46
31)...05-12-15-30-34-39. . 32)...05-15-20-26-35-40. . 33)...05-16-32-36-47-49
34)...06-07-15-25-36-45. . 35)...06-17-24-35-42-46. . 36)...06-18-21-34-41-48
37)...06-19-22-27-40-47. . 38)...07-09-14-30-32-40. . 39)...07-13-19-27-39-49
40)...07-22-28-35-38-44. . 41)...08-12-17-22-30-37. . 42)...08-14-23-36-41-46
43)...08-15-21-31-43-49. . 44)...08-20-24-27-38-45. . 45)...09-11-16-22-34-46
46)...09-12-13-25-41-49. . 47)...09-17-23-26-31-48. . 48)...09-18-24-29-37-47
49)...10-14-16-29-45-48. . 50)...10-19-24-30-33-41. . 51)...10-20-25-32-37-44
52)...11-15-27-33-37-48. . 53)...11-18-23-25-38-40. . 54)...12-16-26-27-42-43
55)...12-23-33-35-45-47. . 56)...12-24-28-36-40-48. . 57)...13-14-15-16-17-18
58)...13-14-15-19-20-21. . 59)...13-16-21-22-23-24. . 60)...14-17-18-22-23-24
61)...15-19-20-22-23-24. . 62)...15-23-29-32-42-44. . 63)...16-17-18-19-20-21
64)...25-26-27-28-29-30. . 65)...25-26-27-31-32-33. . 66)...25-28-33-34-35-36
67)...26-29-30-34-35-36. . 68)...27-31-32-34-35-36. . 69)...28-29-30-31-32-33
70)...37-38-39-40-41-42. . 71)...37-38-39-43-44-45. . 72)...37-40-45-46-47-48
73)...38-41-42-46-47-48. . 74)...39-43-44-46-47-48. . 75)...40-41-42-43-44-45

Para 50 Números En 80 Combinaciones
Poder de ganar premios
3 si 3 = 08.02%... 4 si 4 = 00.52%... 5 si 5 = 00.02%
3 si 4 = 29.18%... 4 si 5 = 02.50%... 5 si 6 = 00.13%
3 si 5 = 59.06%... 4 si 6 = 07.16%
3 si 6 = 84.30%



Luis

Que tu sabiduria no sea motivo de Humillacion para los demas

Slava_TZD

#11
Vale, y que es lo que debe de hacer el programa? ¿"Generar" las combinaciones guía? O basándose en las 75 que has puesto cambiar los números del usuario según diga la combinación guia?

Es decir, pongo un ejemplo simple, que es lo que debías haber hecho desde el principio...Tenemos:

A B C D
1 2 3 4


3 Combinaciones de 4:

A B C D
1 2 3 4
A B D C
1 2 4 3
A D B C
1 4 2 3


Debe el programa llevar A B D C...etc dentro? y simplemente sustituir según los números del usuario? Lo que sigo sin saber es cómo se generan las ruedas...¿Se coge simplemente un número(fijo para varias combinaciones) y luego el resto es random entre la guía?




The fact is, even if you were to stop bombing us, imprisoning us, torturing us, vilifying us, and usurping our lands, we would continue to hate you because our primary reason for hating you will not cease to exist until you embrace Islam.

luis456

#12
Hola ya me mareo jejeje

es simplemente sustituir  los números de las combinaciones de la rueda por los que introduzca el usuario se supone que estos numeros van de menor a mayor. lo que todavia no logro entender es como se hacen estas combinaciones ,el codigo que hizo elektro funciona pero cambia las combinaciones cada ves que se ejecuta el codigo y se supone que con los mismos numeros deberian de ser siempre las mismas combinaciones.

Luis


Pondré ejemplo con menos numeros a ver si atinamos a saber como se hacen estas combis 

Para 9 Números en 3 Combinaciones

Poder de ganar premios
3 si 3 = 67.86%... 4 si 4 = 35.71%... 5 si 5 = 14.28%
3 si 4 = 100.0%... 4 si 5 = 100.0%... 5 si 6 = 67.86%
3 si 5 = 100.0%... 4 si 6 = 100.0%
3 si 6 = 100.0%

Para usar esta rueda: Imprime una copia de la impresora. Escribe tus números
debajo de mis números guías, úsalos como usarías una rueda de códigos infantil
para cambiar los números por los míos en las combinaciones debajo. Esto es una
rueda cargada, entonces si clasificas tus números de mejor a peor, entonces
coloca de primero las mejores opciones en la rueda yendo de izquierda a derecha.

Números guías: 01-02-03-04-05-06-07-08-09

01)...01-02-03-04-05-06. . 02)...01-02-03-07-08-09. . 03)...04-05-06-07-08-09

Para 12 Números en 6 Combinaciones
Poder de ganar premios
3 si 3 = 51.36%... 4 si 4 = 18.18%... 5 si 5 = 04.54%
3 si 4 = 95.15%... 4 si 5 = 63.64%... 5 si 6 = 24.02%
3 si 5 = 100.0%... 4 si 6 = 100.0%
3 si 6 = 100.0%

Para usar esta rueda: Imprime una copia de la impresora. Escribe tus números
debajo de mis números guías, úsalos como usarías una rueda de códigos infantil
para cambiar los números por los míos en las combinaciones debajo. Esto es una
rueda cargada, entonces si clasificas tus números de mejor a peor, entonces
coloca de primero las mejores opciones en la rueda yendo de izquierda a derecha.

Números guías: 01-02-03-04-05-06-07-08-09-10-11-12

01)...01-02-03-04-05-06. . 02)...01-02-03-07-08-09. . 03)...04-05-06-07-08-09
06)...01-04-09-10-11-12. . 04)...02-05-06-10-11-12. . 06)...03-07-08-10-11-12












Que tu sabiduria no sea motivo de Humillacion para los demas

Slava_TZD

#13
Solo para estar claro, algo como esto es lo que buscas? (aunque no está en .net se entiende)

Código (perl) [Seleccionar]
#Numeros que ha introducido el usuario, en este caso 1 2 3 4
%guia = ('A' => 1, 'B', => 2, 'C' => 3, 'D' => 4);

#Combinaciones predefinidas
@combinaciones = ('A-B-C-D', 'A-B-D-C', 'A-D-B-C');

foreach(@combinaciones) {
 s/(A|B|C|D)/$guia{$1}/g;
 say;
}


El output es este:

1-2-3-4
1-2-4-3
1-4-2-3


EDIT: Modificando un poco el código para que coincida con el ejemplo que has puesto antes:

CitarNúmeros guías: 01-02-03-04-05-06-07-08-09

01)...01-02-03-04-05-06. . 02)...01-02-03-07-08-09. . 03)...04-05-06-07-08-09

Suponiendo que los números del usuario sean 10..90, el output es el siguiente:

10-20-30-40-50-60
10-20-30-70-80-90
40-50-60-70-80-90


Si es eso lo que buscas, en realidad es muy simple, solo sustituir... Lo ideal sería, que en vez de llevar hardcodeadas las combinaciones, se pudiesen generar con una función (pero para eso hace falta saber como es que se hacen las combinaciones, además seguro que hay varios tipos de 'ruedas'), mas que nada porque en el primer mensaje hablas de 80 combinaciones, para meterlas todas en el código te vas a dejar los dedos...


The fact is, even if you were to stop bombing us, imprisoning us, torturing us, vilifying us, and usurping our lands, we would continue to hate you because our primary reason for hating you will not cease to exist until you embrace Islam.

luis456

Bueno todavía no doy como hacerlo :)

la cuestión esta en como hace los saltos para las combinaciones ???


numeros de la rueda
01)...01-02-03-04-05-06. .
02)...01-02-03-07-08-09. .
03)...04-05-06-07-08-09
04)...01-04-09-10-11-12. .
05)...02-05-06-10-11-12. .
06)...03-07-08-10-11-12


01-02-03-04-05-06-07-08-09-10-11-12 <---numeros guias

15-19-20-22-25-30-34-36-38-40-42-48 <---mis numeros


aca hice lo que explica el tema pero a mano ;(

01)...01-02-03-04-05-06<---numeros de la rueda
      15-19-20-22-25-30<---mis numeros

02)...01-02-03-07-08-09<---numeros de la rueda
      15-19-20-34-36-38<---mis numeros combinados segun la rueda

03)...04-05-06-07-08-09
      22-25-30-34-36-38

04)...01-04-09-10-11-12
      15-22-38-40-42-48

05)...02-05-06-10-11-12
      19-25-30-40-42-48

06)...03-07-08-10-11-12
      20-34-36-40-42-48


Buaaa

Luis
Que tu sabiduria no sea motivo de Humillacion para los demas

Eleкtro

#15
hmmm... por lo que me estoy dando cuenta, lo que llamas "números guias" son como un índice y cada índice está ligado a un número especifico

Es decir:
Index 1 = number 15
...
Index 6 = number 30
etc...

En ese caso puedes usar un objeto al que poder asignarle una llave y un valor, por ejemplo un Dictionary(Of Integer, Integer) , y al acceder según el índice, se mostraría el número ligado.

Ejemplo (escrito al vuelo):
   Private ReadOnly NumberWheel As new Dictionary(of integer, integer) from
      { {1, 15}, {2, 19}, {3, 20}, {4, 22}, etc...}


Si estoy en lo correcto entonces repasate el código que posteé en la primera página de este hilo, creo que con estas modificaciones sería suficiente para obtener el resultado esperado:

1. Asignar un índice y sus valores ligados como en el ejemplo de arriba, en un Array, una Lista, un Diccionario, una Tupla, o como prefieras.
2. Desordenar el índice y hacer combinaciones con el índice, en lugar de desordenar los números ligados como yo hice.
+
3. Eliminar posibles duplicados en las combinaciones (se me olvidó hacerlo xD)

PD: Te lo modificaría yo, pero por el momento con el código anterior considero que ya me esmeré bastante, y que programes como "afición" no significa que no puedas intentar hacerle esas modificaciones por ti mismo, ¡muestranos algo tuyo!.

Saludos








luis456

Cita de: Eleкtro en  6 Julio 2014, 10:01 AM
hmmm... por lo que me estoy dando cuenta, lo que llamas "números guias" son como un índice y cada índice está ligado a un número especifico

Es decir:
Index 1 = number 15
...
Index 6 = number 30
etc...

Puedes usar un objeto al que poder asignarle una llave y un valor, por ejemplo un Dictionary(Of Integer, Integer) , y al acceder según el índice, se mostraría el número ligado.

Ejemplo (escrito al vuelo):
   Private ReadOnly NumberWheel As new Dictionary(of integer, integer) from
      { {1, 15}, {2, 19}, {3, 20}, {4, 22}, etc...}


Luis, repasate el código que posteé en la primera página de este hilo, solo necesitarías hacerle unas pequeñas modificaciones:

Creo que con estas modificaciones sería suficiente para obtener el resultado esperado:

1. Asignar un índice y sus valores ligados como en el ejemplo de arriba, en un Array, una Lista, un Diccionario, una Tupla, o como prefieras.
2. Desordenar el índice y hacer combinaciones con el índice, en lugar de desordenar los números ligados como yo hice.
+
3. Eliminar posibles duplicados en las combinaciones (se me olvidó hacerlo xD)

PD: Te lo modificaría yo, pero por el momento con el código anterior considero que ya me esmeré bastante, y que programes como "afición" no significa que no puedas intentar hacerle esas modificaciones por ti mismo, ¡muestranos algo tuyo!.

Saludos


Si señor  :silbar: me esmerare en hacerlo ya tengo la una pista jejej, y gracias :)

Luis

Que tu sabiduria no sea motivo de Humillacion para los demas

luis456

#17
Hola ahora si estoy mas loco todavia jejje tengo dos dias tratando de hacer lo que me dijo elektro y na,tambien no encuentro la logica ya que los numeros que introdusco son diferentes cada ves que nesecito hacer el procedimiento y recien me doy cuenta que creo que lo del indice que me dices no es con mis numeros si no la posición original de la rueda y esta no debe de cambiar solo la de mis numeros.

he tratado de hacerlo corto pero solo me da las mismas combinaciones ????


Código (vbnet) [Seleccionar]
Public Class ComboTest : Inherits Form

#Region " Objects, Vars "

   ' La Class "Random", es necesaria para desordenar una colección
   ' y esta declaración tiene que ir siempre fuera de cualquier Sub.
   Private ComboRandomizer As New Random

   ' El control que creo en tiempo de ejecución, donde mostraré las combinaciones.
   Private rtb As New RichTextBox With
           {
             .Dock = DockStyle.Fill,
             .Font = New Font("Lucida Console", 10.0F)
           }

   ' Una "palanca" para habilitar/deshabilitar el bloque de depuración.
   Private EnableDebug As Boolean = False

   ' Instancio una lista donde iremos guardando cada combinación obtenida.
   Private Combos As New List(Of Integer())


   ' enpesamos combis
   Private ReadOnly NumberWheel As New Dictionary(Of Integer, Integer) From
      {{1, 15}, {2, 19}, {3, 20}, {4, 22}, {5, 22}}

   ' Otra lista donde le daré el formato deseado a los números.
   Dim ComboStrings As List(Of String) = Nothing

   ' El máximo de combinaciones.
   Private Property MaxCombos As Integer = 50I

   ' El máximo de longitud para cada combinación.
   Private Property MaxComboLength As Integer = 11I

   ' Los números "guías" que usaremos para rellenar cada combinación.
   Private ReadOnly Numbers As Integer() =
       (From n As Integer In
        ("01-02-03-04-05-06" &
         ""
        ).Split({"-"}, StringSplitOptions.RemoveEmptyEntries)).ToArray

#End Region

#Region " Constructors "

   ' De este Sub no hagas caso, es el constructor del Form.
   Public Sub New()

       ' This call is required by the designer.
       ' Add any initialization after the InitializeComponent() call.  
       InitializeComponent()

       ' Añado el control al Form.
       Me.Controls.Add(rtb)

   End Sub

#End Region

#Region " Event-Handlers "

   Private Sub ComboTest() Handles MyBase.Load

       Me.DoCombos()
       Me.PrintCombos()

   End Sub

#End Region

#Region " Methods "

   ' La función que se encarga de desordenar y devolverte una combinación.
   ' By Elektro.
   Friend Function GetRandomCombination(Of T)(ByVal [NumberWheel] As IEnumerable(Of T),
                                              ByVal [Length] As Integer) As IEnumerable(Of T)

       Return (From Item As T In [NumberWheel] Order By ComboRandomizer.Next Take [Length]).ToArray

   End Function

   Private Sub DoCombos()

       ' Añadir combinaciones a la lista, hasta que la lista tenga 'MaxComboLength' (80) elementos.
       Do Until Combos.Count = (MaxCombos - 1)

           ' Obtengo una combinación.
           Dim tmpCombo As Integer() = Me.GetRandomCombination(Of Integer)(Numbers, MaxComboLength)

           ' Ordeno los elementos de la combinación, de menos a mayor.
           Array.Sort(tmpCombo)

           ' Añado la combinación a la lista.
           Combos.Add(tmpCombo)

       Loop

       ' Ordeno los elementos de la lista, basandome en el orden de los elementos de cada Array.
       ' NOTA: Puede tener fallos al ordenar, no aseguro que el orden sea perfecto.
       Combos = (From Combo As Integer() In Combos Order By Convert.ToDecimal(String.Join("", Combo)) Ascending).ToList
       Combos = (From Combo As Integer() In Combos Order By Combo.First Ascending).ToList

       ' Además, creo utra lista Strings, para darle formato a cada combo numérico,
       ' y añadirle así un "0" a los números del "1" al "9" y que quede más bonito en la previsualización xD.
       Me.ComboStrings =
           (From Combo In Combos
            Select (String.Join(" | ", From Value As String In Combo
                                      Select If(Value.Length = 1, "0" & Value, Value)))).ToList

#If DEBUG Then

       ' El bloque de depuración.
       ' Este bloque entero es para testear el formato que le quieras dar.
       If Me.EnableDebug Then

           Dim sb As New System.Text.StringBuilder

           With sb

               For Index As Integer = 0 To (MaxCombos - 1)

                   sb.AppendLine(String.Format("Combo sin formato:"))
                   sb.AppendLine(String.Join(", ", Combos(Index)))
                   sb.AppendLine()
                   sb.AppendLine(String.Format("Combo con formato:"))
                   sb.AppendLine(String.Join(", ", ComboStrings(Index)))

                   MessageBox.Show(sb.ToString, "", MessageBoxButtons.OK, MessageBoxIcon.Information)

                   sb.Clear()

               Next Index

           End With

       End If

#End If

   End Sub

   Private Sub PrintCombos()

       ' Muestro los Combos en el control.
       With Me.rtb

           .SuspendLayout()
           For Each Combo As String In Me.ComboStrings
               .AppendText(Combo)
               .AppendText(Environment.NewLine & New String("-", Combo.Length) & Environment.NewLine)
           Next Combo
           .ResumeLayout()

           .Select(0, 0)

       End With

   End Sub

#End Region

End Class



Te envie un privado elektro

gracias :)

Luis


Que tu sabiduria no sea motivo de Humillacion para los demas

luis456

#18
He logrado esto :) todavia me falta grabar en txt y eliminar repetidos y meter los numeros a combinar manualmente :)

Código (vbnet) [Seleccionar]
Public Class ComboTest : Inherits Form

#Region " Objects, Vars "

   ' La Class "Random", es necesaria para desordenar una colección
   ' y esta declaración tiene que ir siempre fuera de cualquier Sub.
   Private ComboRandomizer As New Random

   ' El control que creo en tiempo de ejecución, donde mostraré las combinaciones.
   Private rtb As New RichTextBox With
           {
             .Dock = DockStyle.Fill,
             .Font = New Font("Lucida Console", 10.0F)
           }

   ' Una "palanca" para habilitar/deshabilitar el bloque de depuración.
   Private EnableDebug As Boolean = False

   ' Instancio una lista donde iremos guardando cada combinación obtenida.
   Private Combos As New List(Of Integer())


   ' enpesamos combis
   Private ReadOnly NumberWheel As New Dictionary(Of Integer, Integer) From
      {{1, 15}, {2, 19}, {3, 20}, {4, 22}, {5, 25}, {6, 30}} '<---- esto solo tengo que ir seguiendo la secuencia de la rueda :). tengo que eliminar las conbis  repetidas ????
   ' esto los he puesto a lo loco


   ' Otra lista donde le daré el formato deseado a los números.
   Dim ComboStrings As List(Of String) = Nothing

   ' El máximo de combinaciones.
   Private Property MaxCombos As Integer = 20I ' <---aca esta chupado.

   ' El máximo de longitud para cada combinación.
   Private Property MaxComboLength As Integer = 6I '<----- aca esta tambien chupado.

   ' Los números "guías" que usaremos para rellenar cada combinación. """"""  <-----aca estoy tratando de que estos numeros se introduscan manualmente
   ' ya que cambian a cada rato y no son los mismos
   Private ReadOnly Numbers As Integer() =
       (From n As Integer In
        ("01-02-03-04-05-06-07-12-18-22-44-48-55-69-99" &
         ""
        ).Split({"-"}, StringSplitOptions.RemoveEmptyEntries)).ToArray

#End Region

#Region " Constructors "

   ' De este Sub no hagas caso, es el constructor del Form.
   Public Sub New()

       ' This call is required by the designer.
       ' Add any initialization after the InitializeComponent() call.  
       InitializeComponent()

       ' Añado el control al Form.
       Me.Controls.Add(rtb)

   End Sub

#End Region

#Region " Event-Handlers "

   Private Sub ComboTest() Handles MyBase.Load

       Me.DoCombos()
       Me.PrintCombos()

   End Sub

#End Region

#Region " Methods "

   ' La función que se encarga de desordenar y devolverte una combinación.'<---- tengo que eliminar las conbis  repetidas ????
   ' By Elektro.
   Friend Function GetRandomCombination(Of T)(ByVal [NumberWheel] As IEnumerable(Of T),
                                              ByVal [Length] As Integer) As IEnumerable(Of T)

       Return (From Item As T In [NumberWheel] Order By ComboRandomizer.Next Take [Length]).ToArray

   End Function

   Private Sub DoCombos()

       ' Añadir combinaciones a la lista, hasta que la lista tenga 'MaxComboLength' (80) elementos.
       Do Until Combos.Count = (MaxCombos - 1)

           ' Obtengo una combinación.
           Dim tmpCombo As Integer() = Me.GetRandomCombination(Of Integer)(Numbers, MaxComboLength)

           ' Ordeno los elementos de la combinación, de menos a mayor.
           Array.Sort(tmpCombo)

           ' Añado la combinación a la lista.'<----y  grabar estas listas en un txt ????
           Combos.Add(tmpCombo)

       Loop

       ' Ordeno los elementos de la lista, basandome en el orden de los elementos de cada Array.
       ' NOTA: Puede tener fallos al ordenar, no aseguro que el orden sea perfecto.
       Combos = (From Combo As Integer() In Combos Order By Convert.ToDecimal(String.Join("", Combo)) Ascending).ToList
       Combos = (From Combo As Integer() In Combos Order By Combo.First Ascending).ToList

       ' Además, creo utra lista Strings, para darle formato a cada combo numérico,
       ' y añadirle así un "0" a los números del "1" al "9" y que quede más bonito en la previsualización xD.
       Me.ComboStrings =
           (From Combo In Combos
            Select (String.Join(" | ", From Value As String In Combo
                                      Select If(Value.Length = 1, "0" & Value, Value)))).ToList

#If DEBUG Then

       ' El bloque de depuración.
       ' Este bloque entero es para testear el formato que le quieras dar.
       If Me.EnableDebug Then

           Dim sb As New System.Text.StringBuilder

           With sb

               For Index As Integer = 0 To (MaxCombos - 1)

                   sb.AppendLine(String.Format("Combo sin formato:"))
                   sb.AppendLine(String.Join(", ", Combos(Index)))
                   sb.AppendLine()
                   sb.AppendLine(String.Format("Combo con formato:"))
                   sb.AppendLine(String.Join(", ", ComboStrings(Index)))

                   MessageBox.Show(sb.ToString, "", MessageBoxButtons.OK, MessageBoxIcon.Information)

                   sb.Clear()

               Next Index

           End With

       End If

#End If

   End Sub

   Private Sub PrintCombos()

       ' Muestro los Combos en el control.
       With Me.rtb

           .SuspendLayout()
           For Each Combo As String In Me.ComboStrings
               .AppendText(Combo)
               .AppendText(Environment.NewLine & New String("-", Combo.Length) & Environment.NewLine)
           Next Combo
           .ResumeLayout()

           .Select(0, 0)

       End With

   End Sub

#End Region

End Class



No funciona buaaa ya que las cambinaciones cambian cada ves que ejecuto el codigo y deberian de tomar el orden del indice y si los numeros introducidos no cambian no deberian de cambiar las combinciones
Que tu sabiduria no sea motivo de Humillacion para los demas

Eleкtro

#19
Como ya te expliqué sería mejor que te guiases por el código de antes y hacerle las modificaciones que resulten necesarias (lo digo por el nuevo post que has publicado con un código muy distinto), creo que tú entiendes mejor que yo el resultado que esperas obtener...

Mira a ver si es esto lo que quieres:

Establezco los números "guía" con sus números "asociados" (solo 20 guías), luego hago 80 combinaciones con los números "asociados" con una longitud de 6 números, y luego ordeno cada combinación de menor a mayor.
Si algo de lo que acabo de comentar no es correcto, intenta ser específico.

PD: Pueden darse combinaciones repetidas, pero una vez aclarado, en caso de que sea esto lo que buscas, entonces te diré como eliminar repetidas.

Código (vbnet) [Seleccionar]
Public Class ComboTest : Inherits Form

#Region " Objects, Vars "

   ' La Class "Random", es necesaria para desordenar una colección
   ' y esta declaración tiene que ir siempre fuera de cualquier Sub.
   Private ComboRandomizer As New Random

   ' El control que creo en tiempo de ejecución, donde mostraré las combinaciones.
   Private rtb As New RichTextBox With
           {
             .Dock = DockStyle.Fill,
             .Font = New Font("Lucida Console", 10.0F)
           }

   ' Una "palanca" para habilitar/deshabilitar el bloque de depuración.
   Private EnableDebug As Boolean = False

   ' Instancio una lista donde iremos guardando cada combinación obtenida.
   Private Combos As New List(Of Integer())

   ' Otra lista donde le daré el formato deseado a los números.
   Dim ComboStrings As List(Of String) = Nothing

   ' El máximo de combinaciones.
   Private Property MaxCombos As Integer = 80I

   ' El máximo de longitud para cada combinación.
   Private Property MaxComboLength As Integer = 6I

   ' Los números "guías" que usaremos para rellenar cada combinación.
   'Private ReadOnly Numbers As Integer() =
   '    (From n As Integer In
   '     ("01-02-03-04-05-06-07-08-09-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"
   '     ).Split({"-"}, StringSplitOptions.RemoveEmptyEntries)).ToArray

   ' Izquierda: Número "guía"
   ' Derecha: Número asociado
   Private ReadOnly NumberWheel As New Dictionary(Of Integer, Integer) From
     {
         {1, 21}, {2, 22}, {3, 23}, {4, 24}, {5, 25},
         {6, 26}, {7, 27}, {8, 28}, {9, 29}, {10, 30},
         {11, 31}, {12, 32}, {13, 33}, {14, 34}, {15, 35},
         {16, 36}, {17, 37}, {18, 38}, {19, 39}, {20, 40}
     }

#End Region

#Region " Constructors "

   ' De este Sub no hagas caso, es el constructor del Form.
   Public Sub New()

       ' This call is required by the designer.
       ' Add any initialization after the InitializeComponent() call.
       InitializeComponent()

       With Me
           ' Seteo algunas propiedades sin imortancia.
           .Size = New Point(320, 480)
           .StartPosition = FormStartPosition.CenterScreen
           ' Añado el control al Form.
           .Controls.Add(rtb)
       End With

   End Sub

#End Region

#Region " Event-Handlers "

   Private Sub ComboTest() Handles MyBase.Shown

       Me.DoCombos()
       Me.PrintCombos()

   End Sub

#End Region

#Region " Methods "

   ' La función que se encarga de desordenar y devolverte una combinación.
   ' By Elektro.
   'Friend Function GetRandomCombination(Of T)(ByVal [Collection] As IEnumerable(Of T),
   '                                          ByVal [Length] As Integer) As IEnumerable(Of T)

   '    Return (From Item As T In [Collection]
   '            Order By ComboRandomizer.Next
   '            Take [Length]).ToArray

   'End Function

   Friend Function GetRandomCombination(Of T)([Collection] As Dictionary(Of T, T),
                                              [Length] As Integer) As IEnumerable(Of T)

       Return (From Item As KeyValuePair(Of T, T) In [Collection]
               Select Item.Value
               Order By ComboRandomizer.Next
               Take [Length]).ToArray

   End Function

   Private Sub DoCombos()

       ' Añadir combinaciones a la lista, hasta que la lista tenga 'MaxComboLength' (80) elementos.
       Do Until Combos.Count = (MaxCombos - 1)

           ' Obtengo una combinación.
           Dim tmpCombo As Integer() = Me.GetRandomCombination(Of Integer)(NumberWheel, MaxComboLength)

           ' Ordeno los elementos de la combinación, de menos a mayor.
           Array.Sort(tmpCombo)

           ' Añado la combinación a la lista.
           Combos.Add(tmpCombo)

       Loop

       ' Ordeno los elementos de la lista, basandome en el orden de los elementos de cada Array.
       ' NOTA: Puede tener fallos al ordenar, no aseguro que el orden sea perfecto.
       Combos = (From Combo As Integer() In Combos Order By Convert.ToDecimal(String.Join("", Combo)) Ascending).ToList
       Combos = (From Combo As Integer() In Combos Order By Combo.First Ascending).ToList

       ' Además, creo utra lista Strings, para darle formato a cada combo numérico,
       ' y añadirle así un "0" a los números del "1" al "9" y que quede más bonito en la previsualización xD.
       Me.ComboStrings =
           (From Combo In Combos
            Select (String.Join(" | ", From Value As String In Combo
                                      Select If(Value.Length = 1, "0" & Value, Value)))).ToList

#If DEBUG Then

       ' El bloque de depuración.
       ' Este bloque entero es para testear el formato que le quieras dar.
       If Me.EnableDebug Then

           Dim sb As New System.Text.StringBuilder

           With sb

               For Index As Integer = 0 To (MaxCombos - 1)

                   sb.AppendLine(String.Format("Combo sin formato:"))
                   sb.AppendLine(String.Join(", ", Combos(Index)))
                   sb.AppendLine()
                   sb.AppendLine(String.Format("Combo con formato:"))
                   sb.AppendLine(String.Join(", ", ComboStrings(Index)))

                   MessageBox.Show(sb.ToString, "", MessageBoxButtons.OK, MessageBoxIcon.Information)

                   sb.Clear()

               Next Index

           End With

       End If

#End If

   End Sub

   Private Sub PrintCombos()

       ' Muestro los Combos en el control.
       With Me.rtb

           .SuspendLayout()
           For Each Combo As String In Me.ComboStrings
               .AppendText(Combo)
               .AppendText(Environment.NewLine & New String("-", Combo.Length) & Environment.NewLine)
           Next Combo
           .ResumeLayout()

           .Select(0, 0)

       End With

   End Sub

#End Region

End Class