Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
© Alp, Inc. 2022/12/15 Alp 忘年会 LT 5分でわかる Combinatris by Kory
Slide 2
Slide 2 text
© Alp, Inc. 皆さん テトリスは ご存じですね?
Slide 3
Slide 3 text
© Alp, Inc. ● テトリミノ (四つの正方形が繋がった もの; 全7種) が降ってくるので、 フィールドに積み上げていく ● テトリミノで埋まっているラインがで きると、すぐにそのラインが消えてス コアが入る ● フィールドよりも上にテトリミノが溢 れてしまったらゲームオーバー 5分でわかる Combinatris テトリス Typical Tetris Game.svg From Wikimedia Commons, the free media repository
Slide 4
Slide 4 text
© Alp, Inc. でも僕、 テトリスはあんまり やったことないんです…
Slide 5
Slide 5 text
© Alp, Inc. LT で話せるほどの テトリスの知識は無い…
Slide 6
Slide 6 text
© Alp, Inc. なので(?)今日は、 テトリスではなく Combinatris について話していきます
Slide 7
Slide 7 text
© Alp, Inc. © Alp, Inc. ?
Slide 8
Slide 8 text
© Alp, Inc. ブラウザで遊べるゲームです https://dirk.rave.org/combinatris/
Slide 9
Slide 9 text
© Alp, Inc. 5分でわかる Combinatris Combinatris の基本ルール ● 5 × 30 のマス目があるフィールド。一マスには空白か文字か括弧が入る ● 左端中央から文字と中身が空の括弧が降ってくるので、右側に積み上げる ● 括弧が全部埋まった時、特定のルール (後述)で行の文字列が変形されていく ● 文字列の変形回数 (×10) がそのままスコアになる。目指せ 3000 点! ● 左側に文字や括弧があふれるか、変形が無限ループするとゲームオーバー ● 各行は独立していて、行と行の間が干渉することはない
Slide 10
Slide 10 text
© Alp, Inc. 5分でわかる Combinatris Combinatris の基本ルール ● 5 × 30 のマス目があるフィールド。一マスには空白か文字か括弧が入る ● 左端中央から文字と中身が空の括弧が降ってくるので、右側に積み上げる ● 括弧が全部埋まった時、特定のルール (後述)で行の文字列が変形されていく ● 文字列の変形回数 (×10) がそのままスコアになる。目指せ 3000 点! ● 左側に文字や括弧があふれるか、変形が無限ループするとゲームオーバー ● 各行は独立していて、行と行の間が干渉することはない
Slide 11
Slide 11 text
© Alp, Inc. 5分でわかる Combinatris Combinatris の基本ルール ● 5 × 30 のマス目があるフィールド。一マスには空白か文字か括弧が入る ● 左端中央から文字と中身が空の括弧が降ってくるので、右側に積み上げる ● 括弧が全部埋まった時、特定のルール (後述)で行の文字列が変形されていく ● 文字列の変形回数 (×10) がそのままスコアになる。目指せ 3000 点! ● 左側に文字や括弧があふれるか、変形が無限ループするとゲームオーバー ● 各行は独立していて、行と行の間が干渉することはない Ix → x (x) → x Kxy → x Sxyz → xz(yz) Yx → x(Yx) 変形ルール一覧 Combinatris では左端の文字によって適用するルールが決まる
Slide 12
Slide 12 text
© Alp, Inc. © Alp, Inc. Combinatris での変形例
Slide 13
Slide 13 text
© Alp, Inc. 5分でわかる Combinatris Combinatris での変形例 Ix → x (x) → x Kxy → x Sxyz → xz(yz) Yx → x(Yx) 簡単な変形例
Slide 14
Slide 14 text
© Alp, Inc. 5分でわかる Combinatris Combinatris での変形例 Ix → x (x) → x Kxy → x Sxyz → xz(yz) Yx → x(Yx) 簡単な変形例 ...................S →.................KS →................IKS ↝.................KS →................KKS ↝..................K +K +I β +K β
Slide 15
Slide 15 text
© Alp, Inc. 5分でわかる Combinatris Combinatris での変形例 Ix → x (x) → x Kxy → x Sxyz → xz(yz) Yx → x(Yx) どんどん大きくなる変形例
Slide 16
Slide 16 text
© Alp, Inc. 5分でわかる Combinatris Combinatris での変形例 Ix → x (x) → x Kxy → x Sxyz → xz(yz) Yx → x(Yx) どんどん大きくなる変形例 .................SSS →...............SSSS ↝.............SS(SS) →............SSS(SS) ↝.......S(SS)(S(SS)) →......SS(SS)(S(SS)) +S β +S β +S ↝..S(S(SS))((SS)(S(SS))) β ここにもう一回 S を積むと 30 文字を超えてゲームオーバー
Slide 17
Slide 17 text
© Alp, Inc. 5分でわかる Combinatris Combinatris での変形例 Ix → x (x) → x Kxy → x Sxyz → xz(yz) Yx → x(Yx) 爆発する変形例 .................SSS →...............YSSS ↝............S(YS)SS ↝..........(YS)S(SS) ↝............YSS(SS) ↝.........S(YS)S(SS) ↝......(YS)(SS)S(SS) +Y β β このまま大爆発してゲームオーバーになります β β
Slide 18
Slide 18 text
© Alp, Inc. 5分でわかる Combinatris Combinatris での変形例 Ix → x (x) → x Kxy → x Sxyz → xz(yz) Yx → x(Yx) 無限ループ典型 (YI) ...................I →.................YI ↝..............I(YI) ↝...............(YI) ↝.................YI +Y β β 2行目と5行目が等しい! 変形がループしてしまうので ゲームオーバー
Slide 19
Slide 19 text
© Alp, Inc. © Alp, Inc. ところでなぜ S, K, I, Y なのか?
Slide 20
Slide 20 text
© Alp, Inc. 5分でわかる Combinatris ところでなぜ S, K, I, Y なのか? ● S, K, I, Y の変形規則は普通のコンピューター上で実行できる ● 驚きの事実として、逆に、どのようなコンピュータープログラム が与えられても、そのプログラムと同じ計算をする S, K (と括弧) の羅列が書き下せることが知られている 「S, K の文字列変形だけ」でも、我々が触れている コンピュータ程度の計算能力がある!
Slide 21
Slide 21 text
© Alp, Inc. 5分でわかる Combinatris ところでなぜ S, K, I, Y なのか? Entscheidungsproblem (「停止性問題」) ● 「一般のコンピュータプログラムが与えられた入力で停止 するかどうかは、無限のメモリを用いても有限の時間で 判定することができない」 (Church 1935, Turing 1936) つまり、 S, K, I, Y の組み合わせが 「爆発しない」ことは本質的に判定不可能 →我々は (一般ケースでは) 解けないものを解かされている!!
Slide 22
Slide 22 text
© Alp, Inc. © Alp, Inc. Combinatris の 複雑性
Slide 23
Slide 23 text
© Alp, Inc. 5分でわかる Combinatris Combinatris の複雑性 ● Combinatris では、テトリスと同じように、スコアが高くなるほど 文字が落ちてくる速度が速くなってくる ● しかも、テトリスと違って「次に落ちてくる文字」を見せてく れない! ● 2000 点を超えた瞬間にものすごい速度で降ってきてほとんど即 ゲームオーバーになる 2000 点になる直前に、「一文字積むだけで数千点入るコンボ」 を実行することでハイスコアが狙える!
Slide 24
Slide 24 text
© Alp, Inc. でも思い出してほしい
Slide 25
Slide 25 text
© Alp, Inc. 4枚前のスライド ↓
Slide 26
Slide 26 text
© Alp, Inc. コンボって言ったって、 どう積めばいいか わからなさすぎる
Slide 27
Slide 27 text
© Alp, Inc. でも僕は プログラムの書き方は わかる
Slide 28
Slide 28 text
© Alp, Inc. ソルバ書けばよくね? 非有界な Combinatris は Turing 完全性より決定不能だが、 今回我々が遊んでいるやつは有界なので プログラムで探索できる
Slide 29
Slide 29 text
© Alp, Inc. 5分でわかる Combinatris Combinatris の複雑性 というわけで、 Scala でゲーム自体を再実装 し… 型を考えるのに 5 時間 くらい使い、実装に3時 間くらい使った… https://github.com/kory33/ combinatris-solver
Slide 30
Slide 30 text
© Alp, Inc. 5分でわかる Combinatris Combinatris の複雑性 深さ優先探索を してみた https://github.com/kory33/ combinatris-solver
Slide 31
Slide 31 text
© Alp, Inc. 結果…
Slide 32
Slide 32 text
© Alp, Inc. 5分でわかる Combinatris Combinatris の複雑性 93コンボを起こす 積み方があった ((Y((SSS)IS)I)KS)SSS
Slide 33
Slide 33 text
© Alp, Inc. なんもわからんね
Slide 34
Slide 34 text
© Alp, Inc. 5分でわかる Combinatris Combinatris の複雑性 今後の課題 ● この深さ優先探索はだいぶ雑で、ゲームの全状態を網羅的に探索 できているわけではない ● 幅優先探索もやってみたが、「探索予定のゲーム状態」のキュー がすぐに膨らんで OutOfMemoryError になってしまう ● いい感じに枝刈りをしつつ、全状態を探索し、最もスコアの高い コンボを特定したい ● 「二回文字を落とす」ような二段階コンボも気になる
Slide 35
Slide 35 text
© Alp, Inc. 良い Combinatris ライフを!