formar combinaciones de 7 y 8 numeros con 25 numeros

Iniciado por luis456, 11 Octubre 2014, 11:54 AM

0 Miembros y 4 Visitantes están viendo este tema.

luis456

Bien es el mismo error que puse antes

Código (vbnet) [Seleccionar]
Dim values As List(Of Integer) = constantValues.GetRange(skipStart, length)

El desplazamiento y la longitud están fuera de los límites para esta matriz o el recuento es superior al número de elementos desde el índice al final de la colección de origen.


Excepción del tipo 'System.ArgumentException' en mscorlib.dll
Que tu sabiduria no sea motivo de Humillacion para los demas

Eleкtro

#21
En serio, Luis... ...

Piensa un poco en lo que estás haciendo, si quieres te lo digo yo... pero es que a estas alturas... como mínimo deberías poder darte cuenta tú de este fallo tan obvio y básico.

Te muestro la parte del código en conflicto:

Código (vbnet, 1, 10, 14) [Seleccionar]
       Dim constantValues As IEnumerable(Of Integer) =
          (
              From Value As Integer
              In (Result1.Concat(Result2).Concat(Result3).Concat(Result4).Concat(Result5).Concat(Result6)).Distinct
              Where Value <= MAX
          )

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
   
      Dim constantValues As New List(Of Integer)

      Do Until ...

          Dim values As List(Of Integer) = constantValues.GetRange(skipStart, length)

          Do Until ...

          Loop

      Loop

  End Sub


¿ Lo entiendes ?


Aparte del sin sentido que estás intentando hacer, luego está esto otro, lo cual en conjunto con el otro fallo me ha tocado un poco las narices ver esto... para ser sinceros, no me explico esta contradicción que añadiste (¿sumas el valor, y seguídamente le reasignas un cero?, ¿entonces para que sumas, si siempre será cero?):

Citar
Código (vbnet,7,8) [Seleccionar]
      Do Until ...

          Do Until ...

          Loop

          skipStart += 1
          skipStart = 0

      Loop

La instrucción 'Skipstart = 0' debe ir fuera del búcle como comenté, esto significa fuera de la anidación (fuera del bloque de los 2 búcles, debajo del todo), no fuera del primer búcle.
De todas formas directamente elimina esa modificación del 0, ya que no estás rehutilizando la variable fuera del búcle así que no tienes porque reasignarle el valor 0.

Saludos








luis456

Cita de: Eleкtro en 15 Octubre 2014, 21:55 PM
En serio, Luis... ...

Piensa un poco en lo que estás haciendo, si quieres te lo digo yo... pero es que a estas alturas... como mínimo deberías poder darte cuenta tú de este fallo tan obvio y básico.

Te muestro la parte del código en conflicto:

Código (vbnet, 1, 10, 14) [Seleccionar]
       Dim constantValues As IEnumerable(Of Integer) =
          (
              From Value As Integer
              In (Result1.Concat(Result2).Concat(Result3).Concat(Result4).Concat(Result5).Concat(Result6)).Distinct
              Where Value <= MAX
          )

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
   
      Dim constantValues As New List(Of Integer)

      Do Until ...

          Dim values As List(Of Integer) = constantValues.GetRange(skipStart, length)

          Do Until ...

          Loop

      Loop

  End Sub


¿ Lo entiendes ?


Aparte del sin sentido que estás intentando hacer, luego está esto otro, lo cual en conjunto con el otro fallo me ha tocado un poco las narices ver esto... para ser sinceros, no me explico esta contradicción que añadiste (¿sumas el valor, y seguídamente le reasignas un cero?, ¿entonces para que sumas, si siempre será cero?):

La instrucción 'Skipstart = 0' debe ir fuera del búcle como comenté, esto significa fuera de la anidación (fuera del bloque de los 2 búcles, debajo del todo), no fuera del primer búcle.
De todas formas directamente elimina esa modificación del 0, ya que no estás rehutilizando la variable fuera del búcle así que no tienes porque reasignarle el valor 0.

Saludos


Sábado a programar ( bueno creo yo jejej)

si elektro fallos muy tontos pero que para mi son insondables porque antes de poner el código  probé cambiando a integer y casi me explota el PC jejeje por eso lo deje como en principio lo puse,ya que al poner integer la variable me pone que


'Count' no es un miembro de 'Integer'.   
'GetRange' no es un miembro de 'Integer'


Lo que trato es de usar los mismos datos que estan en :

Código (vbnet) [Seleccionar]
Dim Resultss As IEnumerable(Of Integer) =
           (
               From Value As Integer
               In (Result1.Concat(Result2).Concat(Result3).Concat(Result4).Concat(Result5).Concat(Result6)).Distinct
               Where Value <= MAX
           )

       ListBox1.Items.AddRange(Resultss.Cast(Of Object).ToArray)
       ListBox1.Sorted = True



en :

constantValues


luis




Que tu sabiduria no sea motivo de Humillacion para los demas

Eleкtro

#23
Cita de: luis456 en 18 Octubre 2014, 16:30 PM
'Count' no es un miembro de 'Integer'.   
'GetRange' no es un miembro de 'Integer'

Será porque Integer es un DataType, no una Lista / Colección Genérica, por lo tanto no contiene esas extensiones de método...

Sin ánimo de ofender, pero ya es hora de aprender lo básico por tu cuenta para no tener que pedirlo todo hecho siempre, ¿no crees?.

Saludos








luis456

BUAAAA

No me pegues que no es mi culpa por ser tan bruto :) estoy en ello


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

luis456

Yaaaaaaa   ;D ;D ;D ;D ;D ;D ;D ;D


Código (vbnet) [Seleccionar]
constantValues.AddRange(Resultss.ToArray())


me tenia confundido lo de "list"
luis
Que tu sabiduria no sea motivo de Humillacion para los demas

luis456

Formar combinaciones por Subrangos


Bueno ya resuelto un problema :) ahora se me ocurre formar estas combiaciones dentro de subrangos

ya tenemos la variable " constantValues" con x numeros como siempre ocurre con mis ideas locas :)

siempre trabajo con el rango de 00 al 99 estas se subdividirian en :

subrangos

00 al 09
10 al 19
20 al 29
30 al 39
40 al 49
50 al 59
60 al 69
70 al 79
80 al 89
90 al 99

La pregunta como haria que las combinaciones no tomen mas de dos numeros de un mismo subrango ?

ejemplo

02 08 10 15 21 28 50 58... ETC


Codigo funcionando :)


Código (vbnet) [Seleccionar]
constantValues.AddRange(Resultss.ToArray()) <-----variable con numeros con los que formamos las combinaciones


        Dim combinations As New List(Of List(Of Integer))
        Dim length As Integer = 7
        Dim skipStart As Integer = 0


        Do Until skipStart = (constantValues.Count - length)

            Dim values As List(Of Integer) = constantValues.GetRange(skipStart, length)
            Dim count As Integer = 0

            Do Until count = (constantValues.Count - length - skipStart)

                combinations.Add(values.Concat(constantValues.Skip(skipStart + length + count).Take(1)).ToList)

                Debug.WriteLine(String.Join(", ", values.Concat(constantValues.Skip(skipStart + length + count).Take(1)).ToArray))

                count += 1

            Loop ' count = (constantValues.Count - length)

            skipStart += 1


        Loop ' skipStart = (constantValues.Count - length)
        combinations.ForEach(Sub(combination As List(Of Integer))
                                 ListBox2.Items.Add(String.Join(", ", From value As Integer In combination
                                                                      Select If(value.ToString.Length = 1I,
                                                                                value.ToString.Insert(0I, "0"c),
                                                                                value.ToString)))
                             End Sub)

        ListBox2.Sorted = True




Que tu sabiduria no sea motivo de Humillacion para los demas

Eleкtro

#27
Código (vbnet) [Seleccionar]
Namespace LuisLibrary

Friend NotInheritable Class Group

   Protected Friend Property First As Integer = 0I
   Protected Friend Property Second As Integer = 0I

End Class

End Namespace


Dim values As New List(Of Integer) From
   {
       2, 8, 9, 10, 11, 15, 21, 22, 28, 50, 55, 58
   }

Dim groupedValues As List(Of LuisLibrary.Group) =
   (From i As Integer In values
   Group By i.ToString("00").First
   Into items = Group Select New LuisLibrary.Group With {
       .First = items(0),
       .Second = items(1)
   }).ToList

For Each g As LuisLibrary.Group In groupedValues

        Dim str As String = String.Format("{0:00}, {1:00}",
                                          g.First,
                                          g.Second)

   MessageBox.Show(str)

Next g


...O bien:
Código (vbnet) [Seleccionar]
' Type anónimo
Dim groupedValues =
   From i As Integer In values
   Group By i.ToString("00").First
   Into items = Group Select New With {
      Key .First = items(0),
      Key .Second = items(1)
   }


...O también:
Código (vbnet) [Seleccionar]
Dim groupedValues As List(Of List(Of Integer)) =
   (From i As Integer In values
    Group By i.ToString("00").First Into items = Group
    Select New List(Of Integer) From {items(0), items(1)}
    ).ToList


Saludos.








luis456

Cita de: Eleкtro en 22 Octubre 2014, 16:44 PM
Código (vbnet) [Seleccionar]
Namespace LuisLibrary

Friend NotInheritable Class Group

   Protected Friend Property First As Integer = 0I
   Protected Friend Property Second As Integer = 0I

End Class

End Namespace


Dim values As New List(Of Integer) From
   {
       2, 8, 9, 10, 11, 15, 21, 22, 28, 50, 55, 58
   }

Dim groupedValues As List(Of LuisLibrary.Group) =
   (From i As Integer In values
   Group By i.ToString("00").First
   Into items = Group Select New LuisLibrary.Group With {
       .First = items(0),
       .Second = items(1)
   }).ToList

For Each g As LuisLibrary.Group In groupedValues

   Dim str As String = String.Format("{0}, {1}",
                                     g.First.ToString("00"),
                                     g.Second.ToString("00"))

   MessageBox.Show(str)

Next g


...O bien:
Código (vbnet) [Seleccionar]
' Type anónimo
Dim groupedValues =
   From i As Integer In values
   Group By i.ToString("00").First
   Into items = Group Select New With {
      Key .First = items(0),
      Key .Second = items(1)
   }


...O también:
Código (vbnet) [Seleccionar]
Dim groupedValues As List(Of List(Of Integer)) =
   (From i As Integer In values
    Group By i.ToString("00").First Into items = Group
    Select New List(Of Integer) From {items(0), items(1)}
    ).ToList


Saludos.


AAAAA Me tendre que ahorcar para entender esto ( es broma me pongo en ello)


Luis

Que tu sabiduria no sea motivo de Humillacion para los demas

Eleкtro

#29
Te explicaré la query de LINQ del primer ejemplo:

1) Creo grupos de los números según su primer dígito (habiendo añadido temporalmente un "0" a los números del 1 al 9), es decir, grupo de números que empiezan por 0, o por 1, 2, 3, etc.
   Cada grupo contiene todos los números de la colección que empiecen por ese primer dígito de la regla. por ejemplo el grupo del "0" contendrá { 02, 08, 09 } (el cero es imaginario)

2) Asigno los grupos a la variable/propiedad 'items'.

3) Instancio un objeto 'LuisLibrary.Group' por cada grupo, al que le asigno el primer número del grupo (items(0)) a la propiedad 'First', y el segundo número del grupo (items(1)) a la propiedad 'Second'.

4) Devuelvo una Lista de los objetos 'LuisLibrary.Group'.

Saludos