0votos

Juego del disparejo en Haskell

por josejuan hace 4 años

Generalización del juego, permitiendo múltiples caras (no sólo sol y águila) y múltiples jugadores (aquellos que tienen cara diferente a los demás).

Tres personas lanzan (cada uno) una moneda, si caen las tres monedas en ÁGUILA O SOL nadie gana. Gana quien tenga la moneda diferente de las otras dos.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
-- Generalización del juego 
disparejo xs = [ i | (x,i) <- zip xs [0..], null $ tail $ filter (==x) xs ] 
 
-- (ya está) 
 
 
 
-- Un helper para evaluar la jugada y nos indique el/los ganador/es 
disparejoWinners xs = map (fst.(xs!!)) $ disparejo $ map snd xs 
 
-- (ya está) 
 
 
 
 
-- Por ejemplo, el disparejo del enunciado podria ser: 
 
test1 = 
 
   disparejoWinners [("Hugo", "Sol"), ("Paco", "Sol"), ("Luis", "Águila")] 
 
-- (que da Luis) 
 
 
-- También podemos jugar con más jugadores y con las "fichas" del "Piedra, papel o tijera": 
 
test2 = 
 
   disparejoWinners [ ("Fernando", "Piedra") 
                    , ("Mónica", "Tijeras") 
                    , ("Sandra", "Papel") 
                    , ("Lucas", "Tijeras") 
 
-- (donde los ganadores son Fernando y Sandra 
 
 
-- Pero no tienen porqué ser cadenas, puede ser cualquier cosa, por ejemplo, quiero el código 
-- de acceso (ej. un número) del Booleano que no se repita 
 
test3 = 
 
   disparejoWinners [ ( 3456, True ) 
                    , (  127, False ) 
                    , ( 1295, True ) 
                    , (   98, True ) 
                     
-- (que da 127) 
 
 
 
 
 
-- las firmas 
disparejo :: Eq a => [a] -> [Int] 
disparejoWinners :: Eq a => [(b, a)] -> [b] 
1 comentario

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.