7

この関数を書き始めたとき、私はじゃんけんゲームを書いていました。

aはプレイヤー 1 の手、bプレイヤー 2 の手です。把握する必要があるのは、プレイヤー 1 が勝ったか、負けたか、引き分けかだけです。

//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++;
    }
}

私の質問は次のとおりです。この関数を書くことができる最もエレガントな方法は何ですか?

編集:ワンライナーを探しています。

4

5 に答える 5

18
if (a == b) ties++;
else if ((a - b) % 3 == 1) wins++;
else losses++;

厳密にワンライナーにするために使用している言語を正確に知る必要があります...

JavaScript (または奇妙な Modulus を持つ他の言語) の場合:

if (a == b) ties++;
else if ((a - b + 3) % 3 == 1) wins++;
else losses++;
于 2012-07-07T17:50:58.427 に答える
8

3x3 マトリックスは「よりエレガント」になると思います。

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

(編集済み:それを忘れてabすでにゼロオリジンでした。)

于 2012-07-07T17:29:28.327 に答える
2

簡単な数式で結果を取得し、次の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 デモ


リターンなしの1行processMove関数:

var processMove = function (a, b) {
  ((3 + b - a) % 3) ? 1 == ((3 + b - a) % 3) ? ++result.losses : ++result.wins : ++result.ties;
};
于 2012-07-07T18:13:27.317 に答える
2

このような三項演算子を使用できると思います-

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

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

if (b==2) a==1? loss++ : wins++;
于 2012-07-07T17:32:06.503 に答える
1

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");
 }
于 2014-10-18T16:51:44.497 に答える