Powered by AppSignal & Oban Pro
Would you like to see your link here? Contact us

闘魂Elixir ── Rock Paper Scissors

notebooks/toukonex/janken.livemd

闘魂Elixir ── Rock Paper Scissors

# Mix.install([{:benchee, "~> 1.1"}])

About

Answers

input = """
A Y
B X
C Z
"""
hands = %{
  ?A => :rock,
  ?B => :paper,
  ?C => :scissors,
  ?X => :rock,
  ?Y => :paper,
  ?Z => :scissors
}

scores = %{
  win: 6,
  draw: 3,
  lose: 0,
  rock: 1,
  paper: 2,
  scissors: 3
}

judge = %{
  # {opponent, me} => win + hand
  {:rock, :scissors} => scores.win + scores.scissors,
  {:rock, :rock} => scores.draw + scores.rock,
  {:rock, :paper} => scores.lose + scores.paper,
  {:paper, :rock} => scores.win + scores.rock,
  {:paper, :paper} => scores.draw + scores.paper,
  {:paper, :scissors} => scores.lose + scores.scissors,
  {:scissors, :paper} => scores.win + scores.paper,
  {:scissors, :scissors} => scores.draw + scores.scissors,
  {:scissors, :rock} => scores.lose + scores.rock
}

for <>, reduce: 0 do
  acc ->
    {player1, player2}
    {hands[player1], hands[player2]}
    acc + judge[{hands[player1], hands[player2]}]
end