じゃんけん競争シミュレーター


9

あなたは最高の人を見つけるためにじゃんけん選手権を組織することにしました。勝者を決定するために運を上げたくないので、誰もがコンテストの前に書面で彼または彼女の戦術をあなたに与えなければなりません。また、単純なものが好きなので、(岩石、紙、はさみを示す)競争相手の移動は、前のターン(RvR、RvP、RvS、PvR、PvP、PvS、SvR、SvP、またはSvS)のみに基づく必要があります。最初のターンでは、プレイヤーは固定の標識を示さなければなりません。

チャンピオンシップをシミュレートするプログラム(または関数)を作成することにしました。

コンテストの詳細

  • 少なくとも2人の競技者がいます。
  • すべてのプレーヤーは、他のすべての人と正確に1つの試合を行います。
  • 1試合は7ラウンド続く。
  • すべてのラウンドで、勝者には2ポイントが与えられ、敗者には何も与えられません。引き分けの場合、両方のプレーヤーが1ポイントを獲得します。
  • 試合でのプレーヤーのスコアは、試合のターンにおける彼または彼女のポイントの合計です。
  • チャンピオンシップのプレーヤーの最終スコアは、すべての試合でのポイントの合計です。

入力の詳細:

  • プログラムまたは関数がN10文字の長い文字列を受け取り、それぞれがプレイヤーの戦略に対応している。すべてのキャラクターは(小文字)であるr ps、特定の状況でプレーヤーがじゃんけんやはさみを見せることを意味します。
  • 最初の文字は最初のターンをコードします(その競技者のすべての試合で)。2番目は、最後のラウンドがロック対ロックだった場合にどうなるかを示しています。次のものはRvP、RvS、PvR、PvP、PvS、SvR、SvP、SvSで、最初の文字はプレイヤーのサインで、2番目の文字は対戦相手のサインです。たとえばrrpsrpsrps、プレーヤーがロックから開始し、次に対戦相手の最後の動きをコピーすることを意味します。
  • 文字列のリストは、言語のリスト/配列または同様のデータとして、または1つの文字列として入力できます。後者の場合、ある種の区切り文字は必須です。

出力の詳細:

  • プログラムまたは関数は、入力が提供されたのと同じ順序で各プレーヤーの最終スコアを出力する必要があります。
  • スコアはスペースまたは改行で区切る必要があります。末尾のスペースまたは改行を使用できます。

例:

入力: ['rrpsrpsrps', 'rpppsprrpr']

出力:( 5 9ターンはrvr rvp pvs svp pvr rvp pvs

入力: ['rrpsrpsrps', 'rpppsprrpr', 'ssssssssss']

出力:( 13 17 12一致は5-9(1番目と2番目)、8-6(1番目と3番目)、8-6(2番目と3番目)))

これはコードゴルフなので、最短のエントリが勝ちます。


Numberphileに触発されましたか?;-)
ジャクベ2015年

2番目の例は正しいですか?1 6-8番目はで3番目に対して緩み、2番目はで3番目に対して緩んでいると思います6-8
ジャクベ2015年

@Jakube入力例を修正しました。どうも。
randomra 2015年

回答:


2

Python 2:201 188文字

def f(Q):c=lambda m:'rps'.index(m);l=len(Q);r=[0]*l;i=0;exec'p,q=i/l,i%l;m,n=c(Q[p][0]),c(Q[q][0]);exec"r[p]+=(p!=q)*(m+1-n)%3;m,n=c(Q[p][m*3+n+1]),c(Q[q][n*3+m+1]);"*7;i+=1;'*l*l;return r

プログラムのロジック:私は数に手紙を変換します(r=0p=1s=2)。m最初nの数、2番目の人の数です。ゲームは周期的であるため、(m-n)%3すでに結果が決まります。そしてもちろん、結果を1つシフトできf=(m+1-n)%3ます。今度f=0は、2番目のプレーヤーがq勝利し、f=1同点を意味しf=2、最初のプレーヤーがp勝利します。これは、すでにプレーヤー1のスコアでもあります。したがって(p!=q)*(m+1-n)%3、各プレーヤーのすべての値を追加するだけで済みます。

でテストする print f(['rrpsrpsrps', 'rpppsprrpr', 'ssssssssss'])

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.