def add_asymmetric_result?(result)
      return false if result.rateable

      plr = @player[result.player]
      opp = @player[result.opponent]
      return false unless plr && opp

      plr_result = plr.find_result(result.round)
      opp_result = opp.find_result(result.round)
      return false unless plr_result && opp_result
      return false if plr_result.rateable || opp_result.rateable
      
      reversed = plr_result.reverse
      return false unless reversed && reversed.eql?(opp_result, :except => :score)

      plr_result.score = result.score
      true
    end
def add_asymmetric_result?(result)
      return false if result.rateable

      plr = @player[result.player]
      opp = @player[result.opponent]
      return false unless plr && opp

      plr_result = plr.find_result(result.round)
      opp_result = opp.find_result(result.round)
      return false unless plr_result && opp_result
      return false if plr_result.rateable || opp_result.rateable
      
      reversed = plr_result.reverse
      return false unless reversed && reversed.eql?(opp_result, :except => :score)

      plr_result.score = result.score
      true
    end
Detect when an asymmetric result is about to be added, make the appropriate adjustment and return true.
 The conditions for an asymric result are: the player's result already exists, the opponent's result
 already exists, both results are unrateable and the reverse of one result is equal to the other, apart
 from score. In this case all we do update score of the player's result, thus allowing two results whose
 total score does not add to 1.