Es dificil o imposible?

Iniciado por yoyo2002, 20 Marzo 2012, 14:10 PM

0 Miembros y 1 Visitante están viendo este tema.

yoyo2002

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

Eleкtro

Si que es posible, Pero especifica en que lenguaje necesitas hacerlo porfavor

Batch?








yoyo2002

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.

Runex

#3
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 :)
"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

#4
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 :P, 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










explorer

#5
Esta es mi versión:

Código (perl) [Seleccionar]
#!/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]

yoyo2002

#6
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.

yoyo2002

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

explorer

Ya está cambiado para los Perl antiguos.

Eleкtro

Cita de: yoyo2002 en 20 Marzo 2012, 17:32 PM
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