fork download
  1. (def winner {#{:goo :choki} :goo #{:choki :par} :choki #{:par :goo} :par})
  2.  
  3. (defn n-janken [hands]
  4. (let [variety (distinct (vals hands))
  5. win-hand (winner (set variety))]
  6. (if (#{1, 3} (count variety))
  7. :even (keys (filter (fn [[k v]] (= v win-hand)) hands)))))
  8.  
  9. (def hands1 {:alice :goo, :tom :choki, :wendy :par, :smith :goo})
  10. (def hands2 {:alice :goo, :tom :choki, :wendy :goo, :smith :goo})
  11. (def hands3 {:alice :par, :tom :par, :wendy :par, :smith :par})
  12.  
  13. (println hands1)
  14. (println (n-janken hands1))
  15. (println hands2)
  16. (println (n-janken hands2))
  17. (println hands3)
  18. (println (n-janken hands3))
  19.  
  20. (defn create-players
  21. ([] (create-players nil))
  22. ([n]
  23. (let [num-players (or n (+ 1 (rand-int 10)))
  24. typeofnames [:alice :john :tom :paul :alisa :emilia :fred :criss :smith :malia]
  25. typeofhands [:goo :choki :par]
  26. hands (repeatedly num-players #(rand-nth typeofhands))
  27. names (shuffle typeofnames)]
  28. (apply hash-map (interleave names hands)))
  29. ))
  30.  
  31. (let [pls (create-players 1)]
  32. (println pls)
  33. (println (n-janken pls)))
  34.  
  35. (let [pls (create-players 2)]
  36. (println pls)
  37. (println (n-janken pls)))
  38.  
  39. (let [pls (create-players)]
  40. (println pls)
  41. (println (n-janken pls)))
Success #stdin #stdout 1.21s 4386816KB
stdin
Standard input is empty
stdout
{:alice :goo, :tom :choki, :wendy :par, :smith :goo}
:even
{:alice :goo, :tom :choki, :wendy :goo, :smith :goo}
(:alice :wendy :smith)
{:alice :par, :tom :par, :wendy :par, :smith :par}
:even
{:fred :par}
:even
{:criss :choki, :paul :par}
(:criss)
{:fred :par, :alice :goo, :tom :choki, :emilia :choki, :criss :choki, :alisa :choki, :smith :choki, :paul :choki, :malia :choki, :john :par}
:even