|
112
|
Programación / .NET (C#, VB.NET, ASP) / Re: Modificar código de combinaciones de números
|
en: 22 Marzo 2016, 17:05 pm
|
Me he dado cuenta que la función actual que tengo para realizar permutaciones no sirve para tu propósito, puesto que es para caracteres (me refiero, a strings de 1 caracter), y tu quieres hacer permutaciones de los elementos de un array (números de más de 1 dígito), así que ahora mismo no puedo enseñarte nada, por que me llevará su tiempo idear el nuevo algoritmo, lo siento, pero me pondré a ello, por que sería una función muy útil para tenerla siempre a mano. De todas formas aquí te la dejo para que le heches un vistazo si quieres: https://github.com/ElektroStudios/ElektroKit/blob/master/Solution/v1.2/Elektro.Cryptography/Tools/CryptoUtil_Permutations.vbSaludos Lo acabo de ver lo voy a probar ,pero permutaciones no es igual a combinaciones ,el codigo de arriba que puse si hace combinaciones, y estoy parado en Where (value2 <> value1)
lo que me gustaría saber es como mostrar en ves de value1 y value 2, poner dentro de la misma rutina un tercer valor value3 o sea mostrar " value1 , value2 y value3 " tambien pense en ir duplicando el codigo modificando variables y al final unirlos en un array y irles haciendo un take() pero no se me suena a escribir mucho jajjajaj y miles de fallas seguro Luis
|
|
|
114
|
Programación / .NET (C#, VB.NET, ASP) / Modificar código de combinaciones de números
|
en: 22 Marzo 2016, 15:32 pm
|
Hola ya de nuevo por acá con mis números raros para combinar, esto también le puede servir a quien le guste sacar o crear claves de logins y cosas por el estilo Bien aunque he logrado modificar algunas cosas de este código me gustaría saber como funciona, ahora combina una cadena de números de dos en dos y ahora busco combinar la cantidad que sea o de tres o de cuatro o mas combinaciones bajo el mismo concepto que tiene ahora Dim intCol As IEnumerable(Of Integer) = {1, 3, 4, 5, 8, 13, 24, 35, 44, 49 ,55 ,77 ,88} Dim pairsCol As IEnumerable(Of String) = From value1 As Integer In intCol Select String.Join(Environment.NewLine, ( From value2 As Integer In intCol Where (value2 <> value1) Select String.Format("{0:00}, {1:00}", value1, value2))) For Each pairs As String In pairsCol Console.WriteLine(pairs) Console.WriteLine("------") MessageBox.Show(pairs) Next End Sub
Luis
|
|
|
115
|
Programación / .NET (C#, VB.NET, ASP) / Re: Combis :(
|
en: 20 Marzo 2016, 16:17 pm
|
hola de nuevo... Bueno, creo que la pregunta está mas que respondida, pero tras revisar los comentarios me di cuenta que la secuencia de mi código, aunque lógica no era la que demandabas, así que pongo la rectificación y fiel a mi estilo ya que hay códigos que se entienden mejor que otros. Dim NumElementos As IEnumerable(Of Integer) = {1, 3, 84, 99, 868}, Secuencia As String = Nothing Dim nu As Integer = 0 For Each N As Integer In NumElementos : nu += 1 For I As Integer = nu To NumElementos.Count - 1 If N <> NumElementos(I) Then _ Secuencia += String.Format("{0:00}, {1:00}{2}", N, NumElementos(I), Environment.NewLine) Next Next MessageBox.Show(Secuencia)
Devuelve 01, 03 01, 84 01, 99 03, 84 03, 99 84, 99 ( he reducido la secuencia pero puedes poner tantos números como quieras) O bien: Dim NumElementos As IEnumerable(Of Integer) = {1, 3, 84, 99}, Secuencia As String = Nothing For Each N As Integer In NumElementos For I As Integer = 0 To NumElementos.Count - 1 If N <> NumElementos(I) Then _ Secuencia += String.Format("{0:00}, {1:00}{2}", N, NumElementos(I), Environment.NewLine) Next Next MessageBox.Show(Secuencia)
Devuelve: 01, 03 01, 84 01, 99 03, 01 03, 84 03, 99 84, 01 84, 03 84, 99 99, 01 99, 03 99, 84 S2s Perfecto y gracias por tu ayuda, ya que sin querer me ayudaste con el primer código que me pusiste con otra duda que tenia diferente a la planteada, super agradecido a ti ya a elektro por tan valiosa colaboración aunque siempre con elektro da miedo preguntar jejejje es muy regañón (el sabe que es con aprecio jejej ) Dare por solucionado este post y espero que le valga a otros muchos estos códigos ya que realmente son combinatorias y suelen ser útiles sobre todo para los que trabajan con Claves Saludos Luis
|
|
|
116
|
Programación / .NET (C#, VB.NET, ASP) / Re: Combis :(
|
en: 20 Marzo 2016, 14:28 pm
|
Hola Jaja, ahora queda más claro, gracias Dim NumElementos As IEnumerable(Of Integer) = {1, 3, 84, 99}, Secuencia As String = Nothing For Each N As Integer In NumElementos For I = 0 To NumElementos.Count - 1 Secuencia += String.Format("{0:00}, {1:00}{2}", N, NumElementos(I), Environment.NewLine) Next Next MessageBox.Show(Secuencia)
S2s
Explicación para añadir ceros delante de un número: String.Format("{0}", 5) ---> devuelve "5" String.Format("{0} {1}", 5, 25) ---> devuelve "5 25" String.Format("{0}, {1}", 5, 25) ---> devuelve "5, 25" String.Format("{0:00}", 5) ---> devuelve "05" String.Format("{0:00}", 25) ---> devuelve "25" String.Format("{0:00} {1:00}", 5, 25) ---> devuelve "05 25" String.Format("{0:00} {1:00} {2:00}" , 5, 25, 8) ---> devuelve "05 25 08" String.Format("{0:00}, {1:00}, {2:00}" , 5, 25, 8) ---> devuelve "05, 25, 08" Mientras escribia hacias lo mismo lo pruebo gracias Luis
|
|
|
117
|
Programación / .NET (C#, VB.NET, ASP) / Re: Combis :(
|
en: 20 Marzo 2016, 14:23 pm
|
PD: ¿Algún "pero" esta vez? . Jejejje luche hasta el final para que no hubiera " PERO " Probando el codigo de elektro ahora me muestra esto (el codigo que me mostro Lekim le consegui otro uso me vino de perlas ) coleccion de numeros ( 1, 3, 4, 5, 8, 13, 34, 55, 84, 99 ) 01 03 04 05 08 13 34 55 84 99 Pero jejje Yo nesecito me nuestre 01, 03 01, 04 01, 05 01, 08 01, 13 01, 34 01, 55 01, 84 despues se toma el seiguiente numero en este caso el tres y se combina haci hasta acabar con todos los numeros 03,04 03,05 03,08 03,13 Dim intCol As IEnumerable(Of Integer) = {1, 3, 4, 5, 8, 13, 34, 55, 84, 99} Dim sb As New StringBuilder(capacity:=100) For x As Integer = 0 To (intCol.Count - 1) Step 2 If (x < (intCol.Count - 1)) Then sb.Append(String.Format("{0:00}, {1:00}", intCol(x), intCol(x + 1))) Else sb.Append(String.Format("{0:00}", intCol(x))) End If sb.AppendLine() Next MessageBox.Show(sb.ToString)
Luis
|
|
|
118
|
Programación / .NET (C#, VB.NET, ASP) / Re: Combis :(
|
en: 19 Marzo 2016, 15:06 pm
|
Hola Podrías especificar un poco más. ¿Qué quieres hacer exactamente? ¿Combinar números de dos en dos aleatoriamente o de forma consecutiva a partir de un grupo de números? En cualquier caso tu código tiene un montón de fallos, además no especificas tampoco cual es error que te marca (que hay muchos) para empezar la declaración For/Next croe que debería ser: For k = 0 To NumElementos.Count -1 Next k
por otro lado ¿Esto así? Dim NumElementos As IEnumerable(Of Integer) = {0, 3, 4, 5, 8} {01, 13, 34, 55, 84} ¿No será que lo quieres así?: Dim NumElementos As IEnumerable(Of Integer) = {0, 3, 4, 5, 8, 1, 13, 34, 55, 84} En fin, explícate un poco Podría ser algo así? Public Class Form1 Dim NumElementos As New ArrayList({0, 3, 4, 5, 8, 1, 13, 34, 55, 84}) Sub Combinaciones() Dim N As New Random Dim num As String = Nothing For k As Integer = 1 To (NumElementos.Count / 2) num = "" For j As Integer = 0 To 1 Dim NumAlt As Integer = NumElementos(N.Next(NumElementos.Count)) NumElementos.Remove(NumAlt) num += NumAlt.ToString Next MessageBox.Show(num) Next End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Combinaciones() End Sub End Class
O podría ser esto... Esto combina los números de NumElementos con los de NumElementos2, de dos en dos y de forma aleatoria. Public Class Form1 Dim NumElementos As New ArrayList({0, 3, 4, 5, 8}) Dim NumElementos2 As New ArrayList({1, 13, 34, 55, 84}) Sub Combinaciones() Dim N As New Random Dim num As String = Nothing For k As Integer = 1 To 5 num = "" Dim NumAlt As Integer = NumElementos(N.Next(NumElementos.Count)) Dim NumAlt2 As Integer = NumElementos2(N.Next(NumElementos2.Count)) NumElementos.Remove(NumAlt) NumElementos2.Remove(NumAlt2) num = NumAlt.ToString & "-" & NumAlt2.ToString MessageBox.Show(num) Next End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Combinaciones() End Sub End Class
Gracias por tu atención y disculpa que haya tardado en responder LO que estoy tratando de hacer es que de una serie de números contenidos en la variable se combinen de dos en dos y perdón que no puse que son de esta manera son números de dos dígitos entrada 01. 03, 04, 05, 08, 13, 34, 55, 84 salida 01, 03 01, 04 01, 05 01, 08 01, 13 01, 34 01, 55 01, 84 03,04 03,05 03,08 03,13 ............................... asi con todos hasta acabar la secuencia Y de nuevo gracias Luis
|
|
|
119
|
Programación / .NET (C#, VB.NET, ASP) / Combis :(
|
en: 18 Marzo 2016, 19:22 pm
|
Hola estoy creando este codigo para combinar numeros de dos en dos pero me sale un error que no habia visto antes " No se puede inferir el tipo de 'k' porque los límites del bucle y la cláusula step no se convierten en el mismo tipo " Public Class Form1 Dim NumElementos As IEnumerable(Of Integer) = {0, 3, 4, 5, 8} {01, 13, 34, 55, 84} Sub Combinaciones() For k = 2 To NumElementos i = i + 1 For j = k To NumElementos Next j Next k End Sub End Class
Luis
|
|
|
|
|
|
|