HW impossibility?: "Create a rock paper scissors program in ruby WITHOUT using conditionals" HW impossibility?: "Create a rock paper scissors program in ruby WITHOUT using conditionals" ruby ruby

HW impossibility?: "Create a rock paper scissors program in ruby WITHOUT using conditionals"


Here's one only using hashes:

RULES = {  :rock     => {:rock => :draw, :paper => :paper, :scissors => :rock},  :paper    => {:rock => :paper, :paper => :draw, :scissors => :scissors},  :scissors => {:rock => :rock, :paper => :scissors, :scissors => :draw}}def play(p1, p2)  RULES[p1][p2]endputs play(:rock, :paper)        # :paperputs play(:scissors, :rock)     # :rockputs play(:scissors, :scissors) # :draw


def winner(p1, p2)  wins = {rock: :scissors, scissors: :paper, paper: :rock}  {true => p1, false => p2}[wins[p1] == p2]end

winner(:rock, :rock) # => :rock d'oh! – tokland

Per @sarnold, leaving this as an exercise for the student :).


I very much doubt you've seen array/set intersections, so just for fun:

def who_wins(p1, p2)  win_moves = {"rock" => "paper", "paper" => "scissors", "scissors" => "rock"}  ([p1, p2] & win_moves.values_at(p1, p2)).firstendwho_wins("rock", "paper") # "paper"who_wins("scissors", "rock") # "rock"who_wins("scissors", "scissors") # nil