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

Hola a todos hace tiempo que no entraba debido a motivos de salud pero ya estamos dando querrá de nuevo :)

Después de estar buscando mucho he encontrado esta forma de combinar numeros, según esto es para la lotería primitiva y se basa en algo llamado la rueda ?

bien la pregunta especifica es la siguiente.

tengo un form donde introduzco estos numeros guías mediante unos textbox (eso esta chupado jejej) lo que por supuesto no tengo idea es que me genere los numeros
como el ejemplo que pongo y me los muestre en un lixtbox.

Para 50 Números En 80 Combinaciones

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-50


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


Gracias de antemano

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

engel lex

pienso que la manera más facil es:

colocar los números ingresados en un array, por cada combinación a crear, haces un for con tantos ciclos como números en la combinación y dentro de el un random de 0 al largo del array, de manera que escoja valores del array, organizas los números obtenidos por el random, te aseguras que no haya repetidos y listo, luego te aseguras que no hagan combinaciones repetidas y listo completo :P
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

luis456

Cita de: engel lex en 28 Junio 2014, 18:24 PM
pienso que la manera más facil es:

colocar los números ingresados en un array, por cada combinación a crear, haces un for con tantos ciclos como números en la combinación y dentro de el un random de 0 al largo del array, de manera que escoja valores del array, organizas los números obtenidos por el random, te aseguras que no haya repetidos y listo, luego te aseguras que no hagan combinaciones repetidas y listo completo :P


Hola :)

Gracias por tu respuesta tan pronto me dejas enredado yo pensaba en hacer coincidir los textbos uno por uno :) ya que los numeros quías cambian eso del 1 al 50 es para el ejemplo ya que pueden empezar con cualquier numero.pero tienen que quedar en el orden que da el ejemplo
esto es lo que llevo hasta el momento



Código (vbnet) [Seleccionar]
Public Class Form1
    Dim maximum As Short = 99
    Dim Número As Double
    Private TextBoxes As TextBox() = {Nothing}
    Private Result1 As Int32(), Result2 As Int32(), Result3 As Int32(), Result4 As Int32(), Result5 As Int32(), Result6 As Int32(), Result7 As Int32(), Result8 As Int32(), Result9 As Int32(), Result10 As Int32(), Result11 As Int32(), Result12 As Int32(), Result13 As Int32(), Result14 As Int32(), Result15 As Int32(), Result16 As Int32(), Result17 As Int32(), Result18 As Int32(), Result19 As Int32(), Result20 As Int32()
    Private _textBox As Object
    Private Property ListBox1Count As Integer
    ReadOnly MAX As Integer = 99
 
   
     l


Public Sub solonumeros(ByRef e As System.Windows.Forms.KeyPressEventArgs)
        ' evitar letras
        If Char.IsDigit(e.KeyChar) Then
            e.Handled = False
        ElseIf Char.IsControl(e.KeyChar) Then
            e.Handled = False
        ElseIf Char.IsSeparator(e.KeyChar) Then
            e.Handled = False
        Else
            e.Handled = True
        End If

    End Sub


' Elimino duplicados al mismo tiempo que selecciono los números inferiores a MAX.
        Dim Resultss As IEnumerable(Of Integer) =
            (
                From Value As Integer
                In (Result1.Concat(Result2).Concat(Result3).Concat(Result4).Concat(Result5).Concat(Result6).Concat(Result7).Concat(Result8).Concat(Result9).Concat(Result10).Concat(Result11).Concat(Result12).Concat(Result13).Concat(Result14).Concat(Result15).Concat(Result16).Concat(Result17).Concat(Result18).Concat(Result19).Concat(Result20)).Distinct
                Where Value <= MAX
            )


' concateno todos y muestro en un listbox

Dim Rand288 As New Random

        Dim Result288 As IEnumerable(Of Integer) =
            (Result1.Concat(Result2).Concat(Result3).Concat(Result4).Concat(Result5).Concat(Result6).Concat(Result7).Concat(Result8).Concat(Result9).Concat(Result10).Concat(Result11).Concat(Result12).Concat(Result13).Concat(Result14).Concat(Result15).Concat(Result16).Concat(Result17).Concat(Result18).Concat(Result19).Concat(Result20).
        Distinct.
        Select(Function(Value As Integer)
                   Return If(Value < MAX, Value, Rand.Next(0, MAX))
               End Function))
        ListBox12.Items.AddRange(Result288.Cast(Of Object).ToArray)



  End Sub
End Class




Que tu sabiduria no sea motivo de Humillacion para los demas

engel lex

#3
me parece que aún no has aprendido a usar arrays (arreglos) te recomiendo estúdiate un tutorial, es simple y verás como te facilita la vida de inmediato XD
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

luis456

Cita de: engel lex en 29 Junio 2014, 08:52 AM
me parece que aún no has aprendido a usar arrays (arreglos) te recomiendo estúdiate un tutorial, es simple y verás como te facilita la vida de inmediato XD

Gracias de nuevo lo que creo es dificil de hacer ya que con 10 horas de curro al dia como mecánico y 54 años se me hace cuesta arriba :) lo que me gustaría saber es como hacerlo sin tantas pegas ya que esto es una aficcion y no trabajo y de paso me acostumbre a programar a pie ,escribir montón de código jejej

te agradezco tu interés de verdad

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

Slava_TZD

No entiendo muy bien lo de las 80 combinaciones, es decir, según entiendo, se han de generar X combinaciones a partir de los números 1..50 y éstas nunca deben ser iguales y deben abarcar la mayor parte de combinaciones...ejemplo:

1 2 3 21 31 35
1 2 3 21 31 36
1 2 3 21 31 37
1 2 3 21 31 38
1 2 3 21 31 39
1 2 3 21 31 40
1 2 3 21 31 41
1 2 3 21 31 42
1 2 3 21 31 43
1 2 3 21 31 44
1 2 3 21 31 45
1 2 3 21 31 46
1 2 3 21 31 47


La cosa es, si el número 'límite' de combinaciones es X, ¿como se han se elegir las combinaciones exactamente? es decir, que criterio debe seguir la función que genera números para saltar por ejemplo de 1-8-10-11-23-43 a 1-28-30-33-34-35.


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 puede ser que no haya sabido explicar el problema ya que no son combinaciones como tal,es solamente acomodar los numeros en las posiciones
que da la rueda, los numeros guias son para que debajo de ellos se pongan los numeros que uno quiere :tomare solo unos cuantos

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

numeros propios:  10-15-18-19-22-24-36-38-39-40-41-43-44-47-50-54-56-61-63-68-68-70-71-73-75-76-77-78-79-80-81-83-84-86-87-88-59-90-91-92


numeros guías

01) 1 2 12 14 16 37
02) 1 3 13 22 25 38

y el resultado seria tomando nuestros numeros

01) 10-15-43-47-54-59
02) 10-18-44-70-75-90

Como se ve los numeros que uno pongan se ponen en en el orden que se da en los numeros guías,(hasta yo me enredo jejej)
Que tu sabiduria no sea motivo de Humillacion para los demas

Eleкtro

#7
Cita de: Tzhed\ Kyperf/ en 29 Junio 2014, 15:57 PM
La cosa es, si el número 'límite' de combinaciones es X, ¿como se han se elegir las combinaciones exactamente? es decir, que criterio debe seguir la función que genera números para saltar por ejemplo de 1-8-10-11-23-43 a 1-28-30-33-34-35.

Buena pregunta, siempre me ha traido de cabeza este problema del compañero @Luis xD.

A ver si hoy es el dia en que resuelvo lo que precisas ;):

Output:

01 | 02 | 09 | 27 | 33 | 49
---------------------------
01 | 03 | 09 | 20 | 33 | 45
---------------------------
01 | 07 | 08 | 13 | 36 | 42
---------------------------
01 | 07 | 08 | 18 | 19 | 35
---------------------------
01 | 07 | 14 | 16 | 36 | 48
---------------------------
01 | 07 | 24 | 28 | 33 | 47
---------------------------
01 | 09 | 11 | 13 | 28 | 46
---------------------------
01 | 11 | 15 | 19 | 21 | 34
---------------------------
02 | 03 | 13 | 40 | 49 | 50
---------------------------
02 | 06 | 10 | 30 | 36 | 45
---------------------------
02 | 12 | 23 | 30 | 40 | 44
---------------------------
02 | 21 | 25 | 30 | 38 | 45
---------------------------
03 | 04 | 05 | 06 | 38 | 46
---------------------------
03 | 04 | 08 | 24 | 28 | 44
---------------------------
03 | 06 | 12 | 18 | 30 | 49
---------------------------
03 | 07 | 25 | 27 | 32 | 45
---------------------------
03 | 10 | 22 | 40 | 44 | 50
---------------------------
03 | 11 | 25 | 26 | 29 | 33
---------------------------
03 | 12 | 25 | 34 | 35 | 36
---------------------------
03 | 13 | 23 | 31 | 36 | 50
---------------------------
03 | 17 | 19 | 43 | 44 | 46
---------------------------
03 | 21 | 24 | 29 | 31 | 48
---------------------------
04 | 05 | 13 | 25 | 37 | 46
---------------------------
04 | 07 | 19 | 24 | 33 | 40
---------------------------
04 | 09 | 13 | 29 | 32 | 40
---------------------------
04 | 17 | 23 | 37 | 39 | 45
---------------------------
04 | 25 | 28 | 35 | 36 | 41
---------------------------
05 | 07 | 14 | 18 | 20 | 38
---------------------------
05 | 09 | 20 | 25 | 29 | 35
---------------------------
05 | 13 | 21 | 29 | 38 | 50
---------------------------
05 | 15 | 16 | 21 | 37 | 43
---------------------------
05 | 15 | 20 | 22 | 26 | 29
---------------------------
05 | 19 | 21 | 39 | 41 | 46
---------------------------
06 | 07 | 13 | 15 | 20 | 44
---------------------------
06 | 08 | 27 | 28 | 31 | 39
---------------------------
06 | 09 | 22 | 23 | 37 | 42
---------------------------
06 | 09 | 23 | 36 | 40 | 47
---------------------------
06 | 12 | 23 | 29 | 35 | 47
---------------------------
07 | 08 | 26 | 31 | 40 | 41
---------------------------
07 | 11 | 14 | 37 | 38 | 45
---------------------------
07 | 11 | 15 | 19 | 23 | 36
---------------------------
07 | 11 | 18 | 27 | 44 | 46
---------------------------
07 | 13 | 18 | 30 | 31 | 38
---------------------------
08 | 12 | 17 | 26 | 48 | 49
---------------------------
08 | 23 | 24 | 25 | 32 | 47
---------------------------
08 | 26 | 28 | 37 | 39 | 44
---------------------------
09 | 10 | 14 | 22 | 33 | 49
---------------------------
09 | 11 | 18 | 19 | 38 | 40
---------------------------
09 | 11 | 18 | 21 | 38 | 48
---------------------------
09 | 13 | 20 | 29 | 37 | 45
---------------------------
09 | 13 | 22 | 30 | 37 | 43
---------------------------
09 | 14 | 15 | 27 | 44 | 45
---------------------------
10 | 20 | 37 | 39 | 41 | 49
---------------------------
11 | 13 | 20 | 22 | 24 | 49
---------------------------
11 | 14 | 16 | 23 | 45 | 48
---------------------------
11 | 17 | 19 | 21 | 25 | 45
---------------------------
12 | 13 | 23 | 24 | 32 | 48
---------------------------
12 | 19 | 24 | 37 | 38 | 42
---------------------------
12 | 25 | 29 | 30 | 44 | 46
---------------------------
13 | 14 | 19 | 24 | 34 | 40
---------------------------
13 | 16 | 21 | 29 | 33 | 40
---------------------------
13 | 22 | 23 | 29 | 35 | 49
---------------------------
14 | 15 | 27 | 30 | 33 | 41
---------------------------
14 | 18 | 23 | 42 | 45 | 47
---------------------------
14 | 21 | 27 | 39 | 43 | 47
---------------------------
15 | 19 | 28 | 31 | 38 | 40
---------------------------
15 | 20 | 27 | 35 | 42 | 45
---------------------------
16 | 18 | 21 | 30 | 49 | 50
---------------------------
16 | 23 | 24 | 38 | 45 | 48
---------------------------
19 | 30 | 42 | 43 | 44 | 49
---------------------------
20 | 22 | 26 | 33 | 40 | 41
---------------------------
21 | 29 | 31 | 38 | 47 | 48
---------------------------
22 | 29 | 31 | 34 | 45 | 47
---------------------------
23 | 26 | 29 | 31 | 35 | 38
---------------------------
23 | 28 | 30 | 33 | 39 | 50
---------------------------
23 | 36 | 43 | 44 | 46 | 49
---------------------------
24 | 28 | 35 | 37 | 45 | 48
---------------------------
25 | 31 | 35 | 37 | 39 | 46
---------------------------
28 | 30 | 36 | 43 | 48 | 50
---------------------------


Código:
(Copiar, pegar, y compilar)
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

#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)([Collection] As IEnumerable(Of T),
                                               [Length] As Integer) As IEnumerable(Of T)

        Return (From Item As T In [Collection] 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


PD: ¿Era eso lo que querías o tampoco? xD.

Saludos








luis456

Si combina bien :) pero , pero, ya sabes Elektro  siempre hay un pero, jeje, los numeros guías son para posicionar los numeros que hay que introducir manualmente esos numeros no son los que se van a combinar :) si no los que se introduzcan mediante unos texbosex.

fíjate como se ordenan los numeros mediante los numeros guías


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

numeros propios:  10-15-18-19-22-24-36-38-39-40-41-43-44-47-50-54-56-61-63-68-68-70-71-73-75-76-77-78-79-80-81-83-84-86-87-88-59-90-91-92 < estos son los que se introducen a mano


los numeros que yo introduzco se tienen que ordenar según  estos numeros

numeros guías para tomar el orden fíjate que la combinación 01)  se ordena 1, 2 salta al 14 y hace saltos al 16 y así sucesivamente

01) 1 2 12 14 16 37 <---ordenar mis numeros en este orden o posiciones guias
02) 1 3 13 22 25 38

y el resultado seria tomando (acá usamos mis numeros)  y los ordenamos como están ordenados las combinaciones guías
es estos el orden es igual a la combinación 01 pero numeros diferentes, el 10 esta en la posición del 1, el 15 en la del dos el 43 hace el salto a la posición 14 y a si igual como lo hacen las combinaciones guías

01) 10-15-43-47-54-59
02) 10-18-44-70-75-90


Gracias por tu tiempo :)  y sobre todo Paciencia jejej

Luis




Que tu sabiduria no sea motivo de Humillacion para los demas

Slava_TZD

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?


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.