Autor
|
Tema: Es dificil o imposible? (Leído 7,920 veces)
|
yoyo2002
Desconectado
Mensajes: 8
|
Hola, quisiera pediros ayuda. Necesito generar todas las combinaciones posibles de cuatro cifras a escoger entre los numeros 1 y 20 inclusives, pero de forma que no se repitan ninguno aunque cambien de orden. Es decir, si tengo 1,2,3,4 aunque cambie el orden, ya el 1 no puede volver a coincidir ni con el 2 ni con el 3 ni con el cuatro en ninguna otra combinación, al igual que el 2 no puede volver a coincidir con el 1 ni con el 3 ni con el 4, y así para todas las combinaciones. Es decir, 2,1,3,4 ya no me valdría, porque coinciden aunque cambie el orden 1,5,6,2, ya no me valdria poque 1 y 2 ya han estado juntos ¿Es esto posible? Por favor, necesito ayuda para un proyecto, y estaré muy agracecida si me la dais. Gracias a todos, YOLY
|
|
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.878
|
Si que es posible, Pero especifica en que lenguaje necesitas hacerlo porfavor
Batch?
|
|
|
En línea
|
|
|
|
yoyo2002
Desconectado
Mensajes: 8
|
El lenguaje en mi caso no importa, yo no estudio programación, es para un proyecto particular para hacer un ranking en una escuela y hacer competir a los 20 alumnos entre todos ellos en partidos de 4. Acudo a ustedes porque me han aconsejado este foro para lograr una solución como la que necesito. Si se genera en C, o Visual Basic, o cualquier otro... ya buscaré donde ejecutarlo. Muchas gracias.
|
|
|
En línea
|
|
|
|
Runex
Desconectado
Mensajes: 192
http://tutogramacion.blogspot.com
|
En python sería algo así: import random y = 0 while y<4: x = random.randint(0,20) print x, y +=1 Con esto te servirá, en ocasiones se repetirá el número pero puedes ir ejecutándolo hasta que salgan los 4 diferentes. No he tenido tiempo a más, porque me tengo que ir al instituto xd, si no te sirve, esta tarde te escribo el otro o si tienes prisa que te ayude mi compañero EleKtro H@cker Un saludo
|
|
« Última modificación: 20 Marzo 2012, 14:39 pm por Runex »
|
En línea
|
"No renunciaría al bambú. Nunca renuciaría a ti. No te compares con otros" "El me dijo: El bambú tenía un propósito diferente al del helecho, sin embargo eran necesarios y hacían del bosque un lugar hermoso".
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.878
|
Aqui tienes yo te lo he hecho en batch por si lo prefieres Te sirve para otra ocasion, Solo tienes que configurar el número de alumnos y el de los grupos, EDITO: Aunque en el de code que te dió runex también se puedes facilmente claro. PD: No repite números Salu2. EDITO: Perdón tube un fallo, Me faltó averiguar los alumnos por grupo , Ahora si te sirve para otra ocasión: @Echo OFF Setlocal enabledelayedexpansion
:: Configuración :: Set Alumnos=20 Set Grupos=4 :: :: :: :: :: :: :: :: ::
FOR /L %%G IN (1,1,!Alumnos!) DO (Echo !Random!!Random!!Random!!Random!!Random! %%G >> Ranking.tmp)
Set Num=0 Set GrupoNUM=1 Set /A Alumnosporgrupo=%Alumnos%/%Grupos%
For /F "Tokens=2 Delims= " %%a in ('Type "Ranking.tmp" ^| Sort') Do ( Set /A num+=1 Echo Grupo !GrupoNUM!: %%a Echo Grupo !GrupoNUM!: %%a >> Ranking.txt IF !NUM! EQU !Alumnosporgrupo! (Echo+& Set /A GrupoNUM+=1& Set NUM=0) )
Del /Q Ranking.tmp pause Exit
|
|
« Última modificación: 20 Marzo 2012, 15:32 pm por EleKtro H@cker »
|
En línea
|
|
|
|
explorer
Desconectado
Mensajes: 102
Analista/Programador Perl
|
Esta es mi versión: #!/usr/bin/perl use strict; use warnings; print "Número de alumnos: "; my $alumnos = <>; print "Tamaño de los grupos: "; my $grupos = <>; my @alumnos = 1 .. $alumnos; my $n_grupo = 1; while (@alumnos >= $grupos) { # Creamos un @nuevo_grupo compuesto de tantos alumnos como de grande # sean los $grupos, elegidos al azar de los @alumnos restantes my @nuevo_grupo = map { splice @alumnos, rand(@alumnos), 1 } 1 .. $grupos; print "Grupo $n_grupo: [@nuevo_grupo]\n"; $n_grupo++; } # Resto que ha quedado sin asignar if (@alumnos) { print "Grupo $n_grupo: [@alumnos]\n"; } __END__ Número de alumnos: 23 Tamaño de los grupos: 4 Grupo 1: [23 1 3 7] Grupo 2: [14 20 13 22] Grupo 3: [15 8 10 6] Grupo 4: [4 12 18 11] Grupo 5: [21 17 5 2] Grupo 6: [9 16 19]
|
|
« Última modificación: 20 Marzo 2012, 17:44 pm por explorer »
|
En línea
|
|
|
|
yoyo2002
Desconectado
Mensajes: 8
|
Gracias, pero lo he ejecutado en la página de Codepad, ya que no me dedico a la programación, y la versión que coge es la v5.8.0, y no pasa dela linea 2. Una lástima, creo que me hubiese servido a la perfección. Sabes si hay algun sitio online donde pueda ejecutar tu versión? Muchas gracias.
Para Runex:
Muchas gracias, tu código en python funciona, solo que da una sola combinación al azar, y yo necesitaria saber todas las combinaciones posibles. ¿Podria ser? Muchísimas gracias.
|
|
« Última modificación: 20 Marzo 2012, 17:11 pm por Aprendiz-Oscuro »
|
En línea
|
|
|
|
yoyo2002
Desconectado
Mensajes: 8
|
Para EleKtro H@cker.
Muchas gracias. me he buscado un compilador de batch, y me funciona como a tí, pero sería posible que diese todas las combinacione posibles sin repetir y sin importar el orden? Sé que estoy pidiendo mucho, pero de veras a todos os agradezco muchísimo el esfuerzo que estais haciendo.
Gracias
|
|
|
En línea
|
|
|
|
explorer
Desconectado
Mensajes: 102
Analista/Programador Perl
|
Ya está cambiado para los Perl antiguos.
|
|
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.878
|
Para EleKtro H@cker.
sería posible que diese todas las combinacione posibles sin repetir y sin importar el orden?
Si no entiendo mal lo que quieres son 20 combinaciones (una por alumno) aleatorias pero distintas, de 4 grupos, Y que no se repita el orden de ningún número de ningún grupo al comparar las plantillas? Por ejemplo: plantilla 1 > Grupo 1: 6,10,2,18 plantilla 2 > Grupo 1: DISTINTOS NÚMEROS plantilla 3 > Grupo 1: DISTINTOS NÚMEROS DE PLANTILLA 1 Y PLANTILLA 2 Etc...? Lo pones dificil, Veré lo que puedo hacer si no se me adelanta alguien. Salu2
|
|
|
En línea
|
|
|
|
|
|