[LUG.ro] Josephus, problema de programacion
Federico Wiecko
lugro@lugro.org.ar
Sun, 8 May 2005 00:45:33 -0300
Para la próxima .. este tipo de planteos van a la lista de programación
(programacion-@-lugro.org.ar)
Aquí va una solución a tu problema:
{- Huskell
m: cada cuanto saltea
turno: posición al que le toca morir
xs: lista ordenada de gente viva que queda
Se devuelve el par: (asesino, asesinado)
-}
ejecuta:: Int->Int->[Int]->[(Int,Int)]
ejecuta m turno [] = []
ejecuta m turno xs =
(xs!!z, xs!!k): ejecuta m z ((take k xs)++(drop (k+1) xs))
where z=(turno+m-1) `mod` length(xs)
k=(turno+m) `mod` length(xs)
josephus:: Int->Int->[(Int,Int)]
josephus n m = ejecuta m (-1) [1..n]
------------------------------------------------------------
josephus 9 3
[(2,3),(5,6),(8,9),(2,4),(7,8),(2,5),(1,2),(1,7),(1,1)]
Slds,
Federico .-
P.D: Según la leyenda Josephus invento este juego para salvarse él y a un
amigo porque no quería suicidarse.
P.D2: para probar si funciona podríamos meter al pozo por ejemplo a los
políticos :-)
> _______________________________________________
> Lugro mailing list
> Lugro@lugro.org.ar
> http://www.lugro.org.ar/mailman/listinfo/lugro