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


 


Tema destacado: Personaliza-Escoge el diseño del foro que más te guste.


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (Moderadores: Novlucker, seba123neo, kub0x)
| | | |-+  Mis malas combinaciones :(
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] 3 4 5 6 Ir Abajo Respuesta Imprimir
Autor Tema: Mis malas combinaciones :(  (Leído 11,748 veces)
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.667



Ver Perfil
Re: Mis malas combinaciones :(
« Respuesta #10 en: 19 Agosto 2014, 02:28 »

Citar
asumo que el programa lee que son números desde el 01 al 30 correlativamente ?

Tu input, del 1 al 30:
input
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

Mi input, del 1 al 30:
Citar
Código
  1. Enumerable.Range(1I, 30I).ToArray ' 1 to 30

Recuerda que el código que te he ofrecido solo es un algoritmo que mimica los pasos que has explicado en tu ejemplo, es decir: 30 combinaciones del 1 al 30, dando saltos de 3 posiciones, los combos de 10 numeros de longitud cada combo, y con numeros aleatorios dentro de un rango específico en los espacios libres a rellenar.



Citar
no es la idea
¿Que te impide modificar manualmente el array?:

Código
  1. ReadOnly FixedValues As Integer() = {1, 5, 19, 22, 34, 55, 66, 88, 99, etc...}

El código actuará (o debería actuar) de la misma manera.



Citar
donde muestro los resultados  estoy poniendo esto pero solo me sale  " colección "

Es que le estás intentando pasar una colección que tiene más colecciones dentro, es decir, una Lista de Listas (List(Of List(Of Integer))), debes pasarle solo las colecciones del interior, las sub-listas de la lista (List(Of Integer)) y tienes que pasarselas como String.

Puedes hacerlo por ejemplo de una de estas dos maneras:

1.
Código
  1.        Combos.ForEach(Sub(comb As List(Of Integer))
  2.                           ListBox1.Items.Add(String.Join(", ", comb))
  3.                       End Sub)
  4.  

2.
Código
  1.        ListBox1.Items.AddRange(
  2.            (From comb As List(Of Integer) In Combos
  3.             Select String.Join(", ", comb)).ToArray
  4.         )
  5.  



De todas formas habia un fallo con la colección Combos (al utilizar el método Combo.Clear se limpiaba también la referencia del Combo que habia dentro de Combos, por ende al final Combos resultaba ser una colección de listas vacías) así que te dejo esta nueva versión corregida y con el ejemplo del Listbox:

Código
  1. Public Class LuisClass_v2
  2.  
  3.    ReadOnly Randomizer As New Random
  4.  
  5.    ReadOnly FixedValues As Integer() =
  6.        Enumerable.Range(1I, 30I).ToArray ' 1 to 30
  7.  
  8.    ReadOnly RandomValues As Integer() =
  9.        Enumerable.Range(FixedValues.First, FixedValues.Last).ToArray ' 1 to 30
  10.  
  11.    Dim Combo As List(Of Integer) = Nothing
  12.    Dim Combos As New List(Of List(Of Integer))
  13.  
  14.    Private Sub Test() Handles MyBase.Shown
  15.  
  16.        Dim IndexCounter As Integer = FixedValues.First ' 1
  17.        Dim LenCounter As Integer = 0I
  18.  
  19.        Const NumStep As Integer = 3I
  20.        Const NumLen As Integer = 10I
  21.  
  22.        Do Until IndexCounter > FixedValues.Last ' IndexCounter > 30
  23.  
  24.            Combo = New List(Of Integer)
  25.  
  26.            For Num As Integer = IndexCounter To (FixedValues.Count) Step NumStep ' 1 to 30 Step 3
  27.  
  28.                Combo.Add(Num)
  29.                LenCounter += 1I
  30.  
  31.                If LenCounter >= NumLen Then
  32.                    Exit For
  33.                End If
  34.  
  35.            Next ' Num
  36.  
  37.            If LenCounter < NumLen Then ' If LenCounter < 10
  38.  
  39.                For RandomNum As Integer = 1I To (NumLen - LenCounter)
  40.  
  41.                    Dim n As Integer = Randomizer.Next(RandomValues.First, RandomValues.Last)
  42.  
  43.                    Do Until Not Combo.Contains(n)
  44.                        n = Randomizer.Next(RandomValues.First, RandomValues.Last)
  45.                    Loop
  46.  
  47.                    Combo.Add(n)
  48.  
  49.                Next ' RandomNum
  50.  
  51.            End If ' LenCounter < NumLen
  52.  
  53. #If DEBUG Then ' #Debug
  54.            Debug.WriteLine(String.Join(", ", Combo))
  55.            ' Stop
  56. #End If
  57.  
  58.            Combos.Add(Combo)
  59.            IndexCounter += 1I
  60.            LenCounter = 0I
  61.  
  62.        Loop ' IndexCounter >= FixedValues.Last
  63.  
  64.        ' ********
  65.        ' Listbox:
  66.        ' ********
  67.        Combos.ForEach(Sub(comb As List(Of Integer))
  68.  
  69.                           ' Convierto la Lista a 'String', le añado los ceros, y añado el string formateado al Listbox.
  70.                           ListBox1.Items.Add(String.Join(", ",
  71.                                                          From value As String In comb
  72.                                                          Select If(value.Length = 1I,
  73.                                                                    value.Insert(0I, "0"c),
  74.                                                                    value)))
  75.  
  76.                       End Sub)
  77.  
  78.    End Sub ' Test
  79.  
  80. End Class


« Última modificación: 19 Agosto 2014, 02:39 por Eleкtro » En línea


luis456


Desconectado Desconectado

Mensajes: 486



Ver Perfil
Re: Mis malas combinaciones :(
« Respuesta #11 en: 19 Agosto 2014, 13:31 »

Mil gracias de nuevo ahora si pude hacerlo funcionar :)

Bien aca donde me pones esto , es lo debería de cambiar por mi variable " result " que es la que tiene los números después de efectuada la operación que hago en mi programa ? ya que mi idea es implementarlo a mi programa

Código
  1. ReadOnly FixedValues As Integer() = {1, 5, 19, 22, 34, 55, 66, 88, 99, etc...}

por lo demas funciona como queria lo de ordenar de menor a mayor ya me ocupo :)


gracias muchas gracias  :) :)

Luis



En línea

Que tu sabiduria no sea motivo de Humillacion para los demas
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.667



Ver Perfil
Re: Mis malas combinaciones :(
« Respuesta #12 en: 19 Agosto 2014, 13:49 »

Mil gracias de nuevo ahora si pude hacerlo funcionar :)

Bien aca donde me pones esto , es lo debería de cambiar por mi variable " result " que es la que tiene los números después de efectuada la operación que hago en mi programa ?

Código
  1. ReadOnly FixedValues As Integer() = {1, 5, 19, 22, 34, 55, 66, 88, 99, etc...}

¿A cual de las miles de variables que bautizaste con el nombre de "Result" te refieres? :P

Supongo que si, en la variable FixedValues debes especificarle los numeros que se tomarán para hacer las combinaciones, en tu ejemplo pusiste del 1 al 30, no se si harás eso con la variable "result" que mencionas, pero creo que ya te hiciste una idea de lo que debe ir en esa variable FixedValues (valores fijos).

por lo demas funciona como queria

Me alegro de oir eso

PD: Por si acaso te recuerdo que para ordenar de mayor a menor lo tienes facil usando una LINQ-query:
Código
  1. dim values as integer() = (from n as integer in TUSNUMEROS order by n ascending).toarray

o el método Sort, en una lista.

Saludos!
En línea


luis456


Desconectado Desconectado

Mensajes: 486



Ver Perfil
Re: Mis malas combinaciones :(
« Respuesta #13 en: 20 Agosto 2014, 13:56 »

Hola porque no me salen los números que he puesto para combinar ? he echo algunos arreglos para combinar con cinco ya que según la cantidad de números en la variable si me paso se queda en un loop esto lo detecta,pero los números que pongo en ella no ?

Código
  1. Public Class LuisClass_v2
  2.  
  3.    ReadOnly Randomizer As New Random
  4.  
  5.    ReadOnly FixedValues As Integer() = {1, 5, 19, 22, 34, 55, 66, 88, 9, 20, 25}
  6.  
  7.    ReadOnly RandomValues As Integer() =
  8.        Enumerable.Range(FixedValues.First, FixedValues.Last).ToArray ' 1 to 30
  9.  
  10.    Dim Combo As List(Of Integer) = Nothing
  11.    Dim Combos As New List(Of List(Of Integer))
  12.  
  13.    Private Sub Test() Handles MyBase.Shown
  14.  
  15.        Dim IndexCounter As Integer = FixedValues.First ' 1
  16.        Dim LenCounter As Integer = 0I
  17.  
  18.        Const NumStep As Integer = 3I
  19.        Const NumLen As Integer = 5I
  20.  
  21.        Do Until IndexCounter > FixedValues.Last ' IndexCounter > 30
  22.  
  23.            Combo = New List(Of Integer)
  24.  
  25.            For Num As Integer = IndexCounter To (FixedValues.Count) Step NumStep ' 1 to 30 Step 3
  26.  
  27.                Combo.Add(Num)
  28.                LenCounter += 1I
  29.  
  30.                If LenCounter >= NumLen Then
  31.                    Exit For
  32.                End If
  33.  
  34.            Next ' Num
  35.  
  36.            If LenCounter < NumLen Then ' If LenCounter < 10
  37.  
  38.                For RandomNum As Integer = 1I To (NumLen - LenCounter)
  39.  
  40.                    Dim n As Integer = Randomizer.Next(RandomValues.First, RandomValues.Last)
  41.  
  42.                    Do Until Not Combo.Contains(n)
  43.                        n = Randomizer.Next(RandomValues.First, RandomValues.Last)
  44.                    Loop
  45.  
  46.                    Combo.Add(n)
  47.  
  48.                Next ' RandomNum
  49.  
  50.            End If ' LenCounter < NumLen
  51.  
  52. #If DEBUG Then ' #Debug
  53.            Debug.WriteLine(String.Join(", ", Combo))
  54.            ' Stop
  55. #End If
  56.  
  57.            Combos.Add(Combo)
  58.            IndexCounter += 1I
  59.            LenCounter = 0I
  60.  
  61.        Loop ' IndexCounter >= FixedValues.Last
  62.  
  63.        ' ********
  64.        ' Listbox:
  65.        ' ********
  66.        Combos.ForEach(Sub(comb As List(Of Integer))
  67.  
  68.                           ' Convierto la Lista a 'String', le añado los ceros, y añado el string formateado al Listbox.
  69.                           ListBox1.Items.Add(String.Join(", ",
  70.                                                          From value As String In comb
  71.                                                          Select If(value.Length = 1I,
  72.                                                                    value.Insert(0I, "0"c),
  73.                                                                    value)))
  74.  
  75.                       End Sub)
  76.  
  77.    End Sub ' Test
  78.  
  79. End Class
En línea

Que tu sabiduria no sea motivo de Humillacion para los demas
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.667



Ver Perfil
Re: Mis malas combinaciones :(
« Respuesta #14 en: 21 Agosto 2014, 10:22 »

porque no me salen los números que he puesto para combinar ?

Por esto:
Citar
Código
  1. For Num As Integer = IndexCounter To (FixedValues.Count) Step NumStep ' 1 to 30 Step 3
  2.  
  3.               Combo.Add(Num)
  4.               ...

Estás tomando el número de la variable num en lugar de tomar un item de la colección FixedValues, se puede decir que esto ha sido un fallo mio porque como ya sabes en ese ejemplo usé una secuencia ordenada del 1 al 30, así que se me pasó por alto ese detalle al desordenar la secuencia xD.

Prueba a ver si este es el resultado que quieres obtener:
Combo.Add(FixedValues(NumStep * LenCounter))
Edito: o lo que viene a ser lo mismo:

Código
  1. Combo.Add(FixedValues(Num - 1))

Explico:
Para generar la primera combinación con los números que has mostrado, daría saltos de '3' para tomar estas posiciones:
Código:
{ 1, , , 22, , , 66, , , 20, }
+ un número aleatorio aleatorio del rango que especificaste EDITO: del rango de 'RandomValues', para dejarlo claro.

Saludos
« Última modificación: 25 Agosto 2014, 20:09 por Eleкtro » En línea


luis456


Desconectado Desconectado

Mensajes: 486



Ver Perfil
Re: Mis malas combinaciones :(
« Respuesta #15 en: 25 Agosto 2014, 19:58 »

Hola

Bueno tengo algunos dias tratando de hacer lo que me pusiste elektro pero no me sale

o me da combianciones raras o me da el error de variable fuera de rango te pongo el codigo a ver donde me estoy pelando


Código
  1. Public Class LuisClass_v2
  2.  
  3.    ReadOnly Randomizer As New Random
  4.  
  5.    ' Num ReadOnly FixedValues As Integer() =
  6.    ' Num   Enumerable.Range(1I, 49I).ToArray ' 1 to 30
  7.  
  8.    ReadOnly FixedValues As Integer() = {1, 5, 19, 22, 34, 55, 66, 88, 9, 20, 25}
  9.  
  10.    ReadOnly RandomValues As Integer() =
  11.        Enumerable.Range(FixedValues.First, FixedValues.Last).ToArray ' 1 to 30
  12.  
  13.    Dim Combo As List(Of Integer) = Nothing
  14.    Dim Combos As New List(Of List(Of Integer))
  15.  
  16.    Private Sub Test() Handles MyBase.Shown
  17.  
  18.        Dim IndexCounter As Integer = FixedValues.First ' 1
  19.        Dim LenCounter As Integer = 0I
  20.  
  21.        Const NumStep As Integer = 3I
  22.        Const NumLen As Integer = 6I
  23.  
  24.        Do Until IndexCounter > FixedValues.Last ' IndexCounter > 30
  25.  
  26.            Combo = New List(Of Integer)
  27.  
  28.            For Num As Integer = IndexCounter To (FixedValues.Count) Step NumStep ' 1 to 30 Step 3
  29.  
  30.                '  Combo.Add(Num)
  31.                '  LenCounter += 1I
  32.  
  33.                Combo.Add(FixedValues(NumStep * LenCounter))
  34.  
  35.                If LenCounter >= NumLen Then
  36.                    Exit For
  37.                End If
  38.  
  39.            Next ' Num
  40.  
  41.            If LenCounter < NumLen Then ' If LenCounter < 10
  42.  
  43.                For RandomNum As Integer = 1I To (NumLen - LenCounter)
  44.  
  45.                    Dim n As Integer = Randomizer.Next(RandomValues.First, RandomValues.Last)
  46.  
  47.                    Do Until Not Combo.Contains(n)
  48.                        n = Randomizer.Next(RandomValues.First, RandomValues.Last)
  49.                    Loop
  50.  
  51.                    Combo.Add(n)
  52.  
  53.                Next ' RandomNum
  54.  
  55.            End If ' LenCounter < NumLen
  56.  
  57. #If DEBUG Then ' #Debug
  58.            Debug.WriteLine(String.Join(", ", Combo))
  59.            ' Stop
  60. #End If
  61.  
  62.            Combos.Add(Combo)
  63.            IndexCounter += 1I
  64.            LenCounter = 0I
  65.  
  66.        Loop ' IndexCounter >= FixedValues.Last
  67.  
  68.        ' ********
  69.        ' Listbox:
  70.        ' ********
  71.        Combos.ForEach(Sub(comb As List(Of Integer))
  72.  
  73.                           ' Convierto la Lista a 'String', le añado los ceros, y añado el string formateado al Listbox.
  74.                           ListBox1.Items.Add(String.Join(", ",
  75.                                                          From value As String In comb
  76.                                                          Select If(value.Length = 1I,
  77.                                                                    value.Insert(0I, "0"c),
  78.                                                                    value)))
  79.  
  80.                       End Sub)
  81.  
  82.    End Sub ' Test
  83.  
  84. End Class
En línea

Que tu sabiduria no sea motivo de Humillacion para los demas
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.667



Ver Perfil
Re: Mis malas combinaciones :(
« Respuesta #16 en: 25 Agosto 2014, 20:11 »

Código
  1.            For Num As Integer = IndexCounter To (FixedValues.Count) Step NumStep
  2.  
  3.                LenCounter += 1I
  4.                Combo.Add(FixedValues(Num - 1I))
  5.  
  6.                If LenCounter >= NumLen Then
  7.                    Exit For
  8.                End If
  9.  
  10.            Next Num

PD: no se si ese será el resultado que quieres obtener, pero esa es la correción para que funcione el código.

saludos!
En línea


luis456


Desconectado Desconectado

Mensajes: 486



Ver Perfil
Re: Mis malas combinaciones :(
« Respuesta #17 en: 26 Agosto 2014, 06:52 »

Ahora si :) ya me toma los numeros y los combina

ya estoy con lo del ordenamiento de menor a mayor pero me da este error que un valor de sistems no se puede convertir a string

Código
  1. ' ******** ordenamiento-------------
  2.        Dim values As Integer() = (From n As Integer In Combos Order By n Ascending).ToArray
  3.  
  4.        ' ********
  5.        ' Listbox:
  6.        ' ********
  7.        Combos.ForEach(Sub(comb As List(Of Integer))
  8.  
  9.                           ' Convierto la Lista a 'String', le añado los ceros, y añado el string formateado al Listbox.
  10.                           ListBox1.Items.Add(String.Join(", ",
  11.                                                          From value As String In comb
  12.                                                          Select If(value.Length = 1I,
  13.                                                                    value.Insert(0I, "0"c),
  14.                                                                    value)))
  15.  
  16.                       End Sub)
  17.  
  18.    End Sub ' Test
  19.  



saludos
Luis
En línea

Que tu sabiduria no sea motivo de Humillacion para los demas
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.667



Ver Perfil
Re: Mis malas combinaciones :(
« Respuesta #18 en: 26 Agosto 2014, 10:34 »

¿Que habiamos hablado sobre dar detalles específicos del error?.

De decir esto:
me da este error que un valor de sistems no se puede convertir a string

A esto:
Código:
Value of type 'System.Collections.Generic.List(Of Integer)' cannot be converted to 'String'.

...hay todo un trecho. y ya si indicases que instrucción es la que te da error, mejor aún.



Si has modificado la declaración de Combos entonces muestrala (Dim Combos As...)

El código me funciona, ¿quizás tengas activado Option Strict On?

Prueba así:

Código
  1.    ListBox1.Items.Add(String.Join(", ",
  2.                                   From value As Integer In comb
  3.                                   Select If(CStr(value).Length = 1I,
  4.                                             CStr(value).Insert(0I, "0"),
  5.                                             CStr(value))))

Saludos!
« Última modificación: 26 Agosto 2014, 10:38 por Eleкtro » En línea


luis456


Desconectado Desconectado

Mensajes: 486



Ver Perfil
Re: Mis malas combinaciones :(
« Respuesta #19 en: 26 Agosto 2014, 19:38 »

Hola

Bien sigo probando no he modificado nada del codigo solo añadi la rutina que me pusiste arriba y esta es la que me da  " Error 1 Un valor de tipo 'System.Collections.Generic.List(Of Integer)' no se puede convertir en 'Integer'. "

Código
  1. Dim values As Integer() = (From n As Integer In Combos Order By n Ascending).ToArray

lo que busco es ordenar las combinaciones que se muestran en el listbox ordenados de menor a mayor


luis
En línea

Que tu sabiduria no sea motivo de Humillacion para los demas
Páginas: 1 [2] 3 4 5 6 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Por las buenas o malas « 1 2 3 »
Seguridad
rac_2010 22 6,908 Último mensaje 22 Junio 2008, 04:28
por rac_2010
Tan malas son las Zydas, o yo soy muy burro?
Wireless en Linux
LORDKROULD 9 3,265 Último mensaje 21 Agosto 2009, 17:29
por Seabert
Malas expectativas para Blu-ray en PC
Noticias
wolfbcn 0 580 Último mensaje 26 Agosto 2009, 14:45
por wolfbcn
Instrucciones malas :P
Ingeniería Inversa
x64core 3 1,727 Último mensaje 7 Diciembre 2011, 16:45
por Flamer
Usuarios de Yelp bombardean pizzería antigay con malas reseñas « 1 2 3 4 5 »
Noticias
wolfbcn 47 5,077 Último mensaje 5 Abril 2015, 03:10
por MinusFour
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines