Foro de debate

Problema programación

Problema programación

by ruben mesa -
Number of replies: 1

Me gustaría que alguien me ayudara en resolver el problema que tengo con sample en R.

noms <- matrix(nrow = 14, ncol = 5, rep(0,5*14))
noms <- as.data.frame(noms)
names(noms) <- c("Enrique","Marcos","Pablo","Juan","Miguel")
rownames(noms) <- c("Ronda1","Ronda2","Ronda3","Ronda4","Ronda5","Ronda6","Ronda7","Ronda8","Ronda9","Ronda10","Ronda11","Ronda12","Ronda13","Ronda14")
x <- c(1:14)
noms[ ,1] <- sample(x,14, replace = F)
for(i in 1:14){
for(j in 2:5){
    if(j == 2){
        noms[i,j] <- sample(x[x != noms[i,j-1]],1)
    } else if(j == 3){
        noms[i,j] <- sample(x[(x != noms[i,j-1]) && (x != noms[i,j-2])],1)
    } else if(j == 4){
        noms[i,j] <- sample(x[(x != noms[i,j-1]) && (x != noms[i,j-2]) && (x != noms[i,j-3])],1)
    } else if(j == 5){
        noms[i,j] <- sample(x[(x != noms[i,j-1]) && (x != noms[i,j-2]) && (x != noms[i,j-3]) &&  (x != noms[i,j-4])],1)
    }
}}

O añadir esta función :

f <- function(x, z) {
t <- sample(x[x != z],1)
return(t)}

De tal forma que en cada fila no se repita ningun numero y que cada columna contenga del 1:14. Todo aleatorio. También deseo añadir : Si en una fila, por ejemplo, contiene el 1 no puede aparecer el 2. Es decir, si tenemos un numero impar no puede aparecer el numero impar+1.

Muchas gracias de antemano.


In reply to ruben mesa

Re: Problema programación

by Manuel Muñoz Márquez -

Buenas Rubén:

Lo habitual es partir de una tabla rellena con números pues el problema de generarlos no es nada trivial. En la entrada Sistema_de_todos_contra_todos de Wikipedia tienes algoritmos para generar la tabla.

Después se sortea el número que le corresponde a cada jugador.

Un saludo.