Autor
|
Tema: Combinaciones numericas por posicion con numeros guias (Leído 19,693 veces)
|
luis456
Desconectado
Mensajes: 551
|
|
Re:
« Respuesta #10 en: 30 Junio 2014, 20:15 pm » |
|
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
|
|
|
En línea
|
Que tu sabiduria no sea motivo de Humillacion para los demas
|
|
|
Slava_TZD
Wiki
Desconectado
Mensajes: 1.466
♪ [8675309] ♪
|
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: 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?
|
|
« Última modificación: 30 Junio 2014, 21:43 pm por Tzhed\ Kyperf/ »
|
En línea
|
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
Desconectado
Mensajes: 551
|
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
|
|
« Última modificación: 30 Junio 2014, 22:46 pm por luis456 »
|
En línea
|
Que tu sabiduria no sea motivo de Humillacion para los demas
|
|
|
Slava_TZD
Wiki
Desconectado
Mensajes: 1.466
♪ [8675309] ♪
|
Solo para estar claro, algo como esto es lo que buscas? (aunque no está en .net se entiende) #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: EDIT: Modificando un poco el código para que coincida con el ejemplo que has puesto antes: 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 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...
|
|
« Última modificación: 30 Junio 2014, 23:01 pm por Tzhed\ Kyperf/ »
|
En línea
|
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
Desconectado
Mensajes: 551
|
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
|
|
|
En línea
|
Que tu sabiduria no sea motivo de Humillacion para los demas
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.866
|
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
|
|
« Última modificación: 6 Julio 2014, 10:17 am por Eleкtro »
|
En línea
|
|
|
|
luis456
Desconectado
Mensajes: 551
|
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 me esmerare en hacerlo ya tengo la una pista jejej, y gracias Luis
|
|
|
En línea
|
Que tu sabiduria no sea motivo de Humillacion para los demas
|
|
|
luis456
Desconectado
Mensajes: 551
|
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 ???? 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 ' 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
|
|
« Última modificación: 8 Julio 2014, 12:02 pm por luis456 »
|
En línea
|
Que tu sabiduria no sea motivo de Humillacion para los demas
|
|
|
luis456
Desconectado
Mensajes: 551
|
He logrado esto todavia me falta grabar en txt y eliminar repetidos y meter los numeros a combinar manualmente 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 ' 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
|
|
« Última modificación: 8 Julio 2014, 12:40 pm por luis456 »
|
En línea
|
Que tu sabiduria no sea motivo de Humillacion para los demas
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.866
|
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. 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 [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 ' 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
|
|
« Última modificación: 12 Julio 2014, 11:21 am por Eleкtro »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Combinaciones numericas
« 1 2 3 »
Hacking
|
Touring
|
25
|
26,397
|
17 Febrero 2012, 00:35 am
por hcalderon11
|
|
|
Generador de claves numericas con todas las combinaciones posibles??? (RESUELTO)
« 1 2 »
Scripting
|
SuperDraco
|
12
|
26,204
|
1 Julio 2010, 23:14 pm
por SuperDraco
|
|
|
Combinaciones con 54 numeros
.NET (C#, VB.NET, ASP)
|
mr_marley
|
3
|
9,547
|
27 Noviembre 2011, 01:56 am
por mr_marley
|
|
|
Buscador de combinaciones numéricas
Dudas Generales
|
hcalderon11
|
0
|
3,476
|
16 Febrero 2012, 21:49 pm
por hcalderon11
|
|
|
formar combinaciones de 7 y 8 numeros con 25 numeros
« 1 2 ... 5 6 »
.NET (C#, VB.NET, ASP)
|
luis456
|
51
|
31,412
|
31 Octubre 2014, 17:48 pm
por luis456
|
|