Math 石头、布、剪刀。使用数学确定赢/输/平?

Math 石头、布、剪刀。使用数学确定赢/输/平?,math,logic,puzzle,Math,Logic,Puzzle,当我开始写这个函数时,我正在写一个石头剪刀游戏: a是玩家一的移动,b是玩家二的移动。我需要弄清楚的是一号选手是赢了,还是输了,还是平手 //rock=0, paper=1, scissors=2 processMove(a, b) { if(a == b) ties++; else { if(a==0 && b==2) wins++; else if(a==0 && b==1) losses++;

当我开始写这个函数时,我正在写一个石头剪刀游戏:

a
是玩家一的移动,
b
是玩家二的移动。我需要弄清楚的是一号选手是赢了,还是输了,还是平手

//rock=0, paper=1, scissors=2
processMove(a, b) {
    if(a == b) ties++;
    else {
             if(a==0 && b==2) wins++;
        else if(a==0 && b==1) losses++;
        else if(a==1 && b==2) losses++;
        else if(a==1 && b==0) wins++;
        else if(a==2 && b==1) wins++;
        else if(a==2 && b==0) losses++;
    }
}
我的问题是:这个函数最优雅的编写方式是什么

编辑:我正在寻找一个单行程序。

我想3x3矩阵会“更优雅”

char result = "TWLLTWWLT".charAt(a * 3 + b);

(编辑:忘记了
a
b
已经是零原点。)

我想你可以像这样使用terniary操作符-

if (b==0) a==1? wins++ : loss++;

if (b==1) a==1? loss++ : wins++;

if (b==2) a==1? loss++ : wins++;
我需要确切地知道你用哪种语言把它变成一个严格的一行

对于JavaScript(或具有奇怪模数的其他语言),请使用:


您可以使用一个简单的数学公式得出结果,然后与
进行比较,如果
,如下所示:

var moves = {
  'rock': 0, 
  'paper': 1,
  'scissors': 2
};
var result = {
  'wins': 0,
  'losses': 0,
  'ties': 0
};
var processMove = function (a, b) {
  var processResult = (3 + b - a) % 3;
  if (!processResult) {
    ++result['ties'];
  } else if(1 == processResult) {
    ++result['losses'];
  } else {
    ++result['wins'];
  }
  return result;
};


单行
processMove
函数,不返回:

var processMove = function (a, b) {
  ((3 + b - a) % 3) ? 1 == ((3 + b - a) % 3) ? ++result.losses : ++result.wins : ++result.ties;
};

用java怎么做

结果=(comp-x)%3


寻找可读的正确代码比寻找一行程序要好得多。看看我对一个类似问题的回答:石头对剪刀不起作用:
(0-2%3)=-2
。使用
javascript
看起来缺少一对括号:((a-b)%3==1)。在C运算符中,模在运算顺序上高于减法。
var moves = {
  'rock': 0, 
  'paper': 1,
  'scissors': 2
};
var result = {
  'wins': 0,
  'losses': 0,
  'ties': 0
};
var processMove = function (a, b) {
  var processResult = (3 + b - a) % 3;
  if (!processResult) {
    ++result['ties'];
  } else if(1 == processResult) {
    ++result['losses'];
  } else {
    ++result['wins'];
  }
  return result;
};
var processMove = function (a, b) {
  ((3 + b - a) % 3) ? 1 == ((3 + b - a) % 3) ? ++result.losses : ++result.wins : ++result.ties;
};
System.out.println (result);
 if (result == 0 )// if the game is tie
 {
     System.out.println ("A Tie!") ;
 }

 else if (result == 1 || result == 2 )
 {
    //System.out.println (user + " " +   "beats" + " " + computer_choice + " you win" );
     System.out.println ("comp win");
 }

 else
 {
     System.out.println ("you win");
    //System.out.println (computer_choice  + " " +  "beats" + " " + user + "you lose");
 }