[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