剪刀石头布。使用数学确定赢/输/平?
Posted
技术标签:
【中文标题】剪刀石头布。使用数学确定赢/输/平?【英文标题】:Rock, Paper, Scissors. Determine win/loss/tie using math? 【发布时间】:2012-07-07 19:01:45 【问题描述】:所以我在写这个函数的时候正在写一个石头剪刀布游戏:
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++;
我的问题是:这个函数最优雅的写法是什么?
编辑:我正在寻找单线。
【问题讨论】:
寻找可读的正确代码比寻找单行代码要好得多。 看看我对类似问题的回答:***.com/a/9553712/1207152 【参考方案1】:if (a == b) ties++;
else if ((a - b) % 3 == 1) wins++;
else losses++;
我需要确切知道您使用的是哪种语言才能将其变成严格的单行...
对于 javascript(或其他具有奇怪模数的语言)使用:
if (a == b) ties++;
else if ((a - b + 3) % 3 == 1) wins++;
else losses++;
【讨论】:
石头 vs 剪刀不行:(0 - 2 % 3) = -2
。使用javascript
看起来它缺少一对括号:((a-b) % 3 == 1)。在 C 运算符中,取模的运算顺序高于减法。【参考方案2】:
我想 3x3 矩阵会“更优雅”。
char result = "TWLLTWWLT".charAt(a * 3 + b);
(已编辑:忘记了 a
和 b
已经是零原点了。)
【讨论】:
【参考方案3】:我想你可以像这样使用三元运算符 -
if (b==0) a==1? wins++ : loss++;
if (b==1) a==1? loss++ : wins++;
if (b==2) a==1? loss++ : wins++;
【讨论】:
【参考方案4】:你可以用一个简单的数学公式来得到结果,然后像这样与if
进行比较:
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;
;
jsFiddle Demo
一行processMove
函数不返回:
var processMove = function (a, b)
((3 + b - a) % 3) ? 1 == ((3 + b - a) % 3) ? ++result.losses : ++result.wins : ++result.ties;
;
【讨论】:
【参考方案5】:你是如何在java中做到这一点的?
结果 = (comp - x ) % 3 ;
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");
【讨论】:
以上是关于剪刀石头布。使用数学确定赢/输/平?的主要内容,如果未能解决你的问题,请参考以下文章