-2

重複の可能性:
3つのアイテム間のじゃんけん関係をどのように説明できますか?

こんにちはみんなじゃんけんゲームのphpタスクをやっています。ルールチェックの部分をやろうとしていて、以下のルビー関数のようなロジックを使いたいと思っています。可能な限り条件文を避けようとしています。

誰かアイデアがありますか?

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

who_wins("rock", "paper") # "paper"
who_wins("scissors", "rock") # "rock"
who_wins("scissors", "scissors") # nil
4

3 に答える 3

1

私が作ったクイック関数:

function who_wins($p1, $p2){
    $win_moves = array("rock" => "paper", "paper" => "scissors", "scissors" => "rock");
    if($p1 === $p2){
        return null;
    }
    return ($win_moves[$p1] === $p2) ? $p2 : $p1;
}
于 2013-01-25T10:49:24.427 に答える
0

このようなことを試してください。唯一の条件は、$p1と$p2が同じ場合です。ロジックは配列関数で処理されます。

function who_wins($p1, $p2) {
    if ($p1 === $p2) {
        return "nil";
    }
    $actions = array("rock", "scissors", "paper");

    $selected_actions = array_merge(array_keys($actions, $p1), array_keys($actions, $p2));
    sort($selected_actions);

   return $actions[$selected_actions[0]];
}
于 2013-01-25T10:53:53.997 に答える
0

元の関数が何をするのか正確にはわかりませんが、これはかなりコンパクトなソリューションです。もっと愛情を込めて、ifステートメントを削除できると確信しています。

<?php
echo who_wins("rock", "paper")."\n";
echo who_wins("scissors", "rock")."\n";
echo who_wins("scissors", "scissors")."\n";

function who_wins($p1,$p2) {
    $comb = array (
    "rock"  => 0,
    "paper" => 1,
    "scissors"  => 2,
    );

    $result = (3+$comb[$p1]-$comb[$p2]) % 3;

    if ($result==1){ return $p1; } elseif($result==2) { return $p2; } 

}
?>
于 2013-01-25T11:01:59.913 に答える