誰がロック、ペーパー、ハサミ、トカゲ、スポックゲームに勝つのですか?

There are
several questions regarding this game
, even a contest here. But I
think all those challenges and contests need a way to automatically
determine the winner of a game. So:

チャレンジ

プレーヤー1とプレーヤー2の選択を表す ["rock"、 "paper"、 "scissors"、
"lizard"、 "spock"]
の範囲に2つの入力がある場合、 。

ルール

[Winner] [action]    [loser]
-----------------------------
scissors cut         paper
paper    covers      rock
rock     crushes     lizard
lizard   poisons     spock
spock    smashes     scissors
scissors decapitates lizard
lizard   eats        paper
paper    disproves   spock
spock    vaporizes   rock
rock     crushes     scissors

制限

  • Input will be a pair of strings in the given range (no other
    strings can be used). You can use arrays of chars if you want, as
    long as they represent any of the mentioned values.
  • You can choose whether to use lowercase, uppercase
    ("ROCK") or camel case ("Rock") for the
    input strings, as long as the chosen case is the same for all
    inputs.
  • Output will be a trio of values that determine the winner,
    which can be anything you want as long as the answers are
    consistent. Example: 1 if the first input wins,
    2 if the second input wins, 0 if there is
    a tie. Or maybe A if the first input wins,
    B if the second input wins, if there is a tie.

目標

This is ,
so may the shortest program/method/function/lambda for each
language win!

テスト

[Input 1] [Input 2] [Output: 1/2/0]
-----------------------------------
 rock      paper     2
 rock      scissors  1
 lizard    spock     1
 spock     rock      1
 spock     paper     2
 rock      rock      0
ベストアンサー

Python
3
, 68 50 48 bytes

編集:Neilの3トリック、Mr. Xcoderのおかげで

各入力文字列には4番目の文字がありますので、それらを区別するために使用しています。要素をサイクル(はさみ、紙、岩、トカゲ、スポック)に配置すると、各要素は要素の直後に、要素3は右に周期的に拍動します。そこで、サイクル中の入力の位置を減算します。その数値が0の場合、それは同値です。それが1または3であれば、最初の選手にとっては勝利です。私の元の解決策では、サイクルの違いは、ゲームの結果を区別するために文字列
“210100”にインデックスを付けます。
Neilはどうにかして、7を足してモジュラスを3にすることで、インデックスを作成することなく達成できます。編集:最初は文字列を識別するために2番目の文字を使用しましたが、4番目を使用してサイクルを逆にすると、そして、私たちはすべてもっとケーキを使うことができました。

lambda x,y,z="cake".find:(7+z(y[3])-z(x[3]))%5%3

<=
“https://tio.run/##[email protected]/p7WyXw/DKm/qMk4KdH/[email protected]K/[email protected]/EvlA9pEEVoQBDYXTYTkoHxhNCrFX0pYLJEiUOQLk2W7sPwF”
のrel = “noreferrer” タイトル= HREF “Pythonの3 – オンラインそれを試してみてください”
>オンラインで試してみてください!

古いバージョン:

lambda x,y,z="caoip".index:(7+z(y[1])-z(x[1]))%5%3

オンラインで試してみてください!

元のバージョン:

b="caoip"
def r(x,y):return"210100"[(b.index(y[1])-b.index(x[1]))%5]

3、試してみてください!

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です