「じゃんけんゲーム」のロジックに対する意見の相違で兄弟げんか 246
ストーリー by nagazou
こうしていくさが始まる 部門より
こうしていくさが始まる 部門より
はてなに子供二人がプログラムの方針で対立したという話が掲載され話題になってるらしい(はてな匿名ダイアリー、[B! 増田] )。原因は「じゃんけんゲーム」の実装方針であるらしい。ゲーム内容は、画面でグー・チョキ・パーのいずれかを選びボタンを押すと、相手となるCPU側の手と勝敗が表示されるシンプルなもの。喧嘩の原因となった方針の違いを元記事を引用すると、
次男はまずCPUの「手」を乱数で決定し、画面に入力された「手」と比較して勝敗(と引き分け)を決める、素直な処理だった
長男はそれに飽きたのか、まずは乱数で「勝ち」「負け」「引き分け」を乱数で最初に決めてしまい、その後で結果に応じたCPUの「手」を決定するというロジックだった
そうだ。次男は長男の設定したロジックに納得がいかなかったらしく、「兄ちゃんのはじゃんけんで勝負してない」「勝ち負けを最初に決めてしまうなら意味がない」と批判、対して長男は「結果は同じなんだからこれで問題ない」と突っぱね、収拾が付かなくなったようだ。どちらが正しいかの議論は元ネタ自体のコメント欄にも飛び火している模様。
ゲーム性の違い (スコア:5, 興味深い)
長男はシミュレーションでないゲーム向け。一定期間勝率2倍アイテムとかが実現しやすい。
Re:ゲーム性の違い (スコア:5, すばらしい洞察)
そもそも、長男の方は「後出しじゃんけん」という「じゃんけん」とは違う種類のゲームなんですが。
Re:ゲーム性の違い (スコア:1)
>ゲームと偽った詐欺かな
たとえばの話だけど、
・コンピュータと対戦して5連勝したら景品がもらえます。
・コンピュータと人間との勝率は「平均50%」です。
・奥の人間が挑戦したけれど、5連勝した人は一人もいませんでした。
という可能性もあるよね。
#無限回「あいこ」の話は、本質でないのでここでは除外する。
賭けポーカーなんかの違法賭博だと、実際にそういう話があるとは書いてたな。
あきらかに確率的におかしいんだと。
話は変わるけど、こういう話もあったよね。
「スロットマシンでの約4200万ドルの大当たり、バグによるものとして認められず」 https://it.srad.jp/story/15/04/28/0432257/ [it.srad.jp]
こういうのは、場合によっては裁判沙汰にも鳴りかねない問題。
ゲーマビリティでは長男 (スコア:4, 興味深い)
最初は乱数でも、人間側の手のパターンや反応速度、勝ち負けパターンを解析して
人間が楽しめるようにすれば、いいゲームになる
「引き分け」を連続すると人間は熱くなるだろうし
最初、勝たせておいて、後から締め上げて焦せらせるとか
楽しめる作り方はあると思う
Re:ゲーマビリティでは長男 (スコア:1)
射幸心を煽るのに最適?
そりゃ何を作りたかったか、だろ (スコア:2)
兄貴の方が融通は効きそう
弟を説得できないのは説得力がないのか、
あるいは弟が若すぎるのか
ジャンケンを作るのが目的なら弟だろうし
ゲームを作るのが目的なら兄の方なら
「強いボス」とかも作りやすいから良さそうなもんだ
いずれにせよ兄弟がこんなことで喧嘩できるって言うのは良いことな気がするわ
Re:そりゃ何を作りたかったか、だろ (スコア:2)
兄の方ならログも取らず回帰分析もせずあっという間に勝率上げれますからね
Re:そりゃ何を作りたかったか、だろ (スコア:1)
どっちが良い悪いじゃないけど、
・結果をいじれるが、途中をいじれない長男方式。
・途中をいじれるが、結果をいじれない次男方式。
どっちが融通が効くかはケースバイケース。
Re:そりゃ何を作りたかったか、だろ (スコア:1)
するなら4回目で絶対逃げられないようにするんじゃないかな
// きっと「低減/軽減」だ
Re:そりゃ何を作りたかったか、だろ (スコア:2)
いやあそりゃ単に他のコード書きたかったからでしょ
対戦でもマルチでもやりたくなればまた喜んで書くんじゃないかな
仲直りするには (スコア:2)
もうジャンケンで決めるしかないな
Re:仲直りするには (スコア:1)
拡張性なら次男 (スコア:1)
1対1だけでなく3人対決にしたり拡張するなら、次男の実装方法が良さそう
Re: (スコア:0)
まさにこれだと思う。
仕様を意味も無く限定して、拡張性を考えないなら長男方式でも良いと思う。
実務でも、客は喜ばないが、自分が面倒な事にならない様に、あえてそういう事やる人がたまに居ますよね。
Re: (スコア:0)
次男方式では難易度調整ができないので、ゲームとしての拡張性はないよ。
長男方式なら手毎の勝率などを設定して敵の強さ調整と性格付けができる。次男方式では出す手の傾向しか調整できない。
ただし、じゃんけんという手続きを正しく表現しているのは次男方式。
べき論が強い次男はSIerには向いてない。(偏見)
Re: (スコア:0)
早すぎる最適化は諸悪の根源って奴やね
ワイも1秒間に何万回もじゃんけんしてそこがボトルネックになってるんでもなけりゃ次男派やな
実装方針じゃなくて設計方針の違いでは? (スコア:1)
これ作り話ですよね?
要は
- 次男のプログラムは,CPUが出す手をランダムに選んでいる(プレーヤの勝率は考慮してない)
- 長男のプログラムは,プレーヤーの勝ち負けをランダムに選んでいる(CPUが出すグーチョキパーの割合は考慮してない)
という事だと思いますが,これは実装の違いじゃなくて設計(仕様)の違いだと思います
そして設計(仕様)の話なのでどちらも正解,優劣は付けられません.
(もしかすると頻度論とベイズ論に発展させたいのかもしれませんが)プログラムの実装なり設計として優劣をつけるなら,なんらかの追加情報(前提条件)が必須です.
例えば,これが課金ゲームで課金しないとじゃんけん出来ない,より課金されるように乱数調整したい,そういう要求がある場合は長男の方が有利かと思います
なぜなら長男方式なら,プレーヤの勝ち負けを決定する乱数を調整して,ABテストなどで課金額が多くなる乱数のパターンを探す,という方針で簡潔に実装できるからです.
次男方式だとベイズの式(要は条件付き確率)を使って計算しないと,CPUが出す手の乱数のパターンを制御できません.ややこしい数式と実装が必要になり,実装コストが嵩みます.
Re:実装方針じゃなくて設計方針の違いでは? (スコア:1, おもしろおかしい)
なぜ作り話と思ったのかはちょっと興味深いな
それ以降の話は、通り一遍すぎてどうでもいいわ
Re:実装方針じゃなくて設計方針の違いでは? (スコア:1)
> これ作り話ですよね?
皆わかってるけど大人だから言わないだけだよ
嘘だろうが本当だろうが話題として面白ければどっちでもいい
Re:実装方針じゃなくて設計方針の違いでは? (スコア:1)
汚れた大人…
じゃんけんはクジ引きの演出ではない (スコア:1)
相手の傾向を読んで、勝率を高めることが可能なスキルゲーム。
現在の実装では、単なるランダムでしかないようだけれども、相手の分析の機能を組み込んで、真の意味で強いじゃんけんマシーンを作るなら、長男方式は無理があるし、他のじゃんけんマシーンと対戦させることもできない。
統計のウソ (スコア:1)
『統計はこうしてウソをつく』ジョエル・ベスト
今コレ読んでる途中なんで、読み終わったらコメントするから!すごい奴を!
飽きて変なの作っただけじゃないの? (スコア:1)
という点から、次男と同じものを作っても面白くないから、違うモノを作ってみたよ、というだけではないかと思う。
もしくは、すでに次男と同じものは作成済みで、そのあとに作ったか。
(元ネタからはこの辺りがはっきりと読み取れない。)
であれば、そもそも「正しいかどうか」とかどうでもよくないか?
「こんなこともできる・こんなやり方もある」的な「変な実装」だったんじゃないの?
にゃー。
長男の実装では「ゲーム」にならない。 (スコア:1)
攻略の楽しみがあってこそゲームだ。
なのでジャンケンをちゃんとしたゲームにするには,癖のあるキャラクターを出して,その癖を読み取って10回やって8割勝たないと次に進めない,とかやる必要がある。「最初は必ずグーをだして,同じ手は絶対続けて出さない」とか「グー:チョキ:パーを8:4:1の割合で出す」とかいう相手だ。
次男の実装なら,手を決める乱数の部分を変えるだけで,そういうゲームに変えることができる。長男の実装では,戦略性のあるゲームにすることは絶対できない。
ゲームとしては長男じゃん? (スコア:0)
じゃんけんの判定をするものだったら次男方式だけど
ゲームとして見るとプレイヤーを楽しませるために長男方式の実装を選んでもいいのでは?
本当のランダムと、ユーザが体感するランダムの差、という問題もあるしさ
Re:ゲームとしては長男じゃん? (スコア:3)
「じゃんけん」ゲームは次男方式。
長男方式はあくまでくじ引きであり、その演出として「じゃんけん」を利用しているだけ。
コンセンサスがとれてないというか、言葉が通じてないレベル。
Re: (スコア:0)
ラスベガスと日本、って感じだな。
日本のパチスロはスロット回転開始時には結果が確定済みだそうだから。
…ラスベガスも乱数じゃないんだっけか?
Re: (スコア:0)
長男は合理化やチューンナップを求めるエンジニアのセンスがあると思う。
ソースを読むなら次男のコードの方が理解が容易だろう。
Re:ゲームとしては長男じゃん? (スコア:1)
ゲームとは勝敗をつける行為らしいので、事前に勝敗がついていようとゲームですね。
人間の操作が介在しなくてもゲームと呼ぶのかというと、止める行為がある為に選択肢はあります。
問題はジャンケンと定義できるかどうか。
Re:ゲームとしては長男じゃん? (スコア:1)
異論なしだけど、ジャンケンが「相手の出す技を読んでこちらが出す技を決める」ゲーム性を暗に期待されている事に気付かされる。
この問題はジャンケン以外のゲームにも展開できる。アクションゲームであろうとボードゲームであろうと、
コンピューターが最初に勝敗を決めて本戦をコントロールするゲームデザインは可能ではある。
しかしその内情を知ってしまった時、そのゲームへの興味を失うプレイヤーも多いだろう。
ベイズ統計 (スコア:0)
相手がグーの後、グーを自分が出して勝つ確率:P(グー|グー)、
前は問わず、グーを自分が出して勝つ確率:P(グー)、
ベイズではP(グー|グー)≠P(グー)
だけど長男のコーディングではP(グー|グー)=P(グー)になっている(はずだ)。
なので長男と次男では統計に違いがでるはず…本当?
#ベイズ統計の説明は聞くたびに「なるほどぉ!」と思うけど
#思い返すと「あれなんでだっけ」になる、ア○AC
Re:ベイズ統計 (スコア:3, おもしろおかしい)
> 違いがでるはず…本当?
兄弟のプログラムを何度も対戦させて最後に勝ち越した方が方がお兄さん
楽天チェック (スコア:0)
楽天チェックも同じロジックだと思われます。
最後に4枚のカードが全部開くと50ポイントのカードがあるので、1/4の確率で50ポイントが当たりそうですが
いまだかつてあたった試しがありません
Re:楽天チェック (スコア:1)
ペプシの「本田とじゃんけん」キャンペーンもこの方式で、本田の勝率が凄いことになってたな
Re: (スコア:0)
本当に4分の1の確率で配ったら損してしまうから、当たる確率が高いように見えて裏で低めの当選確率が設定されているパターンでしょう。
そうじゃないと本田じゃんけん強すぎ。
Re:楽天チェック (スコア:2, すばらしい洞察)
ああいうオンライン抽選(インスタントウィン)は予め勝率が決まってるし、何だったら時間で勝率調整するんだよ。
例:
開始直後→勝率を高くして客寄せ
中盤→予定賞品数がなくならないように低くして調整
終盤→予定賞品数で着地するように調整(出が悪いなら高くしてPR、出がいいなら低くする)、無くなったら0%で終了
Re: (スコア:0)
どこかに「1等50ptの取得確率は均等(1/4)ではありません」って注意書き入ってないとまずそうだけど。
実質無償でpt配ってるのサービスだから良いのか…?
参考)『ドラクエモンスターズ スーパーライト』で上級品の金の地図の出現率が高いように誤認?させた例(2014)
https://news.yahoo.co.jp/byline/shinoharashuji/20140206-00032403/ [yahoo.co.jp]
兄弟の適正 (スコア:0)
次男:やや融通の利かない標準範囲のプログラマ
長男:ソシャゲガチャ作成に適正大ありだが生まれるのが遅すぎた
# どっちもがんかれ
ジャンケン ポン! ズコー (スコア:0)
あのメダルゲームの正式名称が「ジャンケンマン」だということを知った。
https://ja.wikipedia.org/wiki/%E3%82%B8%E3%83%A3%E3%83%B3%E3%82%B1%E3%... [wikipedia.org]
https://dic.nicovideo.jp/a/%E3%82%B8%E3%83%A3%E3%83%B3%E3%82%B1%E3%83%... [nicovideo.jp]
Re:ジャンケン ポン! ズコー (スコア:2, おもしろおかしい)
ジャンケンパーソンにすべき、とか?
Re:美学的な違い (スコア:2, すばらしい洞察)
この二つは論理的に、同等ってレベルじゃなくて、メッセージリソースの差し替えだけで、弟のほうも兄のほうも完全に同一のコードで実装できるってレベルで同じことなんだよな。
Re:美学的な違い (スコア:1)
論理的に同等ではないだろう。
乱数の種を起動時の time() で与えるというようなよくある実装の場合、理論上は乱数をすべて予想することができる。
あるいはサイドチャネル攻撃で、現在の乱数生成器の状態を知ることも理論上不可能ではない。
そのとき、次男方式ではプレイヤーが常勝できるが、長男方式では 1/3 しか勝てない。
Re:美学的な違い (スコア:1)
いえ、割と現実的な前提ですよ。
悪名高いCのrand()関数どころか、メルセンヌツイスター辺りのすばらしい乱数でも、
「暗号・セキュリティ用途には使うな」とマニュアルに明記されているんですよ。
「乱数の列から次の値やシードを推測する」ような逆計算への耐性は考慮して設計されていないから、と。
ということは、サイドチャネル攻撃まで仕掛けなくても、プレイしているうちにシードを絞り込めて、
ある程度のプレイ回数より後は勝ち続けられる可能性があります。
カジノで朝から晩までずーっと眺めていた数学者が夕方以降、店が閉まるまで連勝し続けるとか、
そういう危険性があるので、カジノのオーナーとしては兄バージョンを採用した方が気が楽でしょうね。
ちなみに、ちらっと調べたところだとメルセンヌツイスターのシードは19936ビット。
グー著キーパーの1/3で絞り込んでいくと、確定に必要な期待値はlog2/log3倍して、12578回ぐらい。
…サイドチャネル攻撃の方が現実的かも。
Re:美学的な違い (スコア:1)
ID投稿じゃないからでしょうw
Re:じゃんけんのルール (スコア:2, おもしろおかしい)
兄の実装は常にCPU側の「後出し」になるので、
じゃんけんのルールで考えたら、
CPUの失格で常に人間(入力した側)の勝ちになると思う。
Re:じゃんけんのルール (スコア:1, すばらしい洞察)
演算の挙動全てをじゃんけんというのなら仰るとおりだと思うけど、見る人が確認できる出力内容だけで判断して良いのなら、長男の実装もまぎれもなくじゃんけんではないだろうか?
Re:じゃんけんのルール (スコア:2)
中国人の部屋とかと同じでしょ
ジャンケンチューリングテストを通るならそれはジャンケンだと思うかどうかで意見が分かれるんかも
Re:じゃんけんのルール (スコア:1)
では、この2つの実装を実際にプレイしてどちらがどちらかを言い当ててみてください。
冗談抜きで、量子力学とかそういうノリなので、柔軟に構えないとあるところより先に理解を進めることが出来なくなるよ。
「我々が、モノとして考えるそういう何か実体が沢山集まって相互作用している」というイメージだと解釈不可能な現象が多々発見されたので、
「よし、実体が何かは考えるのはとりあえず諦めよう。結果としてこういう数式に従う現象が観測出来るから、その数式で考えていこう」とか。
Re:長男のはイカサマ (スコア:1)
>別に兄方式でも勝てる乱数を引けば連勝できるのでは?
”永遠に”勝てる乱数ってのが兄方式では存在しません。
長男方式で永遠に勝てる場合、それはすでに乱数ではない(勝ちになる数字しか永遠に出ないって事だから)。
またはそもそも設定に「勝ちしかない」って実装になるので、「最初に勝ち、あいこ、負け」を決めるって仕様から外れます。
>10連
だからそれは試行回数が限定されてるでしょ。
次男方式は”永遠に”勝てる可能性ってのは0%にはならないんです。(試行回数が増えれば0%に近づくが0に収束はしない)
長男方式では、永遠に試行すれば、いつか必ず負けの乱数が出るので、”永遠の連勝”ってのは必ず0%なんです。
Re:長男のはイカサマ (スコア:1)