Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - yoyo2002

#1
Scripting / Re: Es dificil o imposible?
23 Marzo 2012, 12:11 PM
Muchísimas gracias de nuevo a EleKtro H@cker y Runex, sé que no es facil lo que quiero, pero me habéis ayudado bastante y bien.

Gracias.
#2
Scripting / Re: Es dificil o imposible?
22 Marzo 2012, 12:02 PM
Muchísimas gracias. Aunque no salgan todas, ya el resto de combinaciones las intentaré hacer manualmente, aunque tenga que usar una "Variable comodín".

Cita de: explorer en 22 Marzo 2012, 00:21 AM
Ahora estoy un poco dormido, pero creo que la solución es esta:
Código (perl) [Seleccionar]
my $visto;

for my $a1 (1 .. 20) {
   for my $a2 (1 .. 20) {
       for my $a3 (1 .. 20) {
           for my $a4 (1 .. 20) {

               my @ordenados = sort { $a <=> $b } $a1, $a2, $a3, $a4;

               # salimos si hay coincidencia
               next if $ordenados[0] == $ordenados[1]
                    or $ordenados[0] == $ordenados[2]
                    or $ordenados[0] == $ordenados[3]
                    or $ordenados[1] == $ordenados[2]
                    or $ordenados[1] == $ordenados[3]
                    or $ordenados[2] == $ordenados[3]
               ;

               # salimos si hay coincidencia por pares
               next if $visto{"$ordenados[0]-$ordenados[1]"}
                    or $visto{"$ordenados[0]-$ordenados[2]"}
                    or $visto{"$ordenados[0]-$ordenados[3]"}
                    or $visto{"$ordenados[1]-$ordenados[2]"}
                    or $visto{"$ordenados[1]-$ordenados[3]"}
                    or $visto{"$ordenados[2]-$ordenados[3]"}
               ;

               # recordamos todos los pares nuevos
               $visto{"$ordenados[0]-$ordenados[1]"} =
               $visto{"$ordenados[0]-$ordenados[2]"} =
               $visto{"$ordenados[0]-$ordenados[3]"} =
               $visto{"$ordenados[1]-$ordenados[2]"} =
               $visto{"$ordenados[1]-$ordenados[3]"} =
               $visto{"$ordenados[2]-$ordenados[3]"} = 1;

               # Impresión
               print "[", join('-', @ordenados), "]\n";
           }
       }
   }
}

La salida es algo corta:
[1-2-3-4]
[1-5-6-7]
[1-8-9-10]
[1-11-12-13]
[1-14-15-16]
[1-17-18-19]
[2-5-8-11]
[2-6-9-12]
[2-7-10-13]
[2-14-17-20]
[3-5-9-13]
[3-6-8-14]
[3-7-11-15]
[3-10-12-16]
[4-5-10-14]
[4-6-11-16]
[4-7-8-12]
[4-9-15-17]
[4-13-18-20]
[5-12-15-18]
[5-16-19-20]
[6-10-15-19]
[7-9-14-18]
[8-13-16-17]


Curiosamente, el alumno 1 nunca estará con el número 20. ¿Por qué?
Supongamos que queremos la combinación [1-a-b-20]. ¿Qué valores serían a o b?. Pues cualquiera entre 2 y 19... pero eso no es posible, porque todos los números entre 2 y 19 ya han salido con el 1 antes (mirar las 6 primeras combinaciones). Y se cumpliría la condición de que el 1 ya se ha visto con cualquiera de esos números.

Me temo que esto no es lo que quieres...

Según las condiciones que has puesto, la segunda es la que limita la salida de todas las combinaciones: «tampoco me valdría otra donde volvieran a coincidir dos variables o más...». Como los grupos son de 4, eso quiere decir que habrá alumnos que estarán en más combinaciones (el 1, seis veces), pero otras, menos (el 20, tres veces) por la razón explicada antes.

#3
Scripting / Re: Es dificil o imposible?
21 Marzo 2012, 17:31 PM

Gracias, ahora sí funciona. Pero ¿podría ser que salieran todas las combinaciones de 4 números existentes sin repetición, sin importar el orden en que salga? Es decir, si sale la combinación, 3-5-9-11, esta misma con otro orden no me vale (ej: 5-11-9-5) y tampoco me valdria otra donde volvieran a coincidir dos variables o más... Es decir, ya el 3 no puede volver a coincidir ni con el 5 ni con el 9 ni con el 11, al igual que el resto.

Sé que es dificil....


Cita de: explorer en 20 Marzo 2012, 18:47 PM
Ya que lo vas a ejecutar en Codepad, prueba esta versión:
Código (perl) [Seleccionar]
#!/usr/bin/perl
use strict;
use warnings;

my $alumnos = 20;                    # Número de alumnos
my $grupos  = 4;                     # Tamaño de los 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";
}

#4
Scripting / Re: Es dificil o imposible?
21 Marzo 2012, 11:46 AM
Exacto, eso es, es decir, quiero todas las combinaciones posibles existentes entre los 20 en grupos de 4, sin que ninguno de los 20 vuelva a coincidir con el resto en la combinacion, sea cual sea el orden, pero que no coincidan 2 ni más numeros en una nueva combinación.
#5
Scripting / Re: Es dificil o imposible?
20 Marzo 2012, 17:32 PM
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
#6
Scripting / Re: Es dificil o imposible?
20 Marzo 2012, 17:07 PM
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.
#7
Scripting / Re: Es dificil o imposible?
20 Marzo 2012, 14:20 PM
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.
#8
Scripting / Es dificil o imposible?
20 Marzo 2012, 14:10 PM
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