Adaptive Minesweeper開発日記
14 Minesweeper Variants, Bombe, Minesweeper spoiled by AI
14 Minesweeper Variants やら、Bombe やら、Minesweeper spoiled by AI やらをプレイ中、運要素が存在しないマインスイーパーというより、運要素が存在するがなるべく低確率でミスになるようなところを踏む ことに焦点を当てたマインスイーパーを作ってみたら面白そうというアイデアが降り注ぐ。
その時偶然近くで使われてた単語、adaptiveがピッタリ当てはまったので、 Adaptive Minesweeperというタイトルに。
番煎じ?
既出かどうかは調べてない。調べる気がでないし、もしダブってるのを知ったらモチベーションが無くなるだけなので。
開発環境
御存知の通り、マインスイーパーは 充足可能性問題 なので(多分)、NP完全である(多分)。 Web上で公開するにはJavascriptは少々非力である。そこでRustを使って、Webassemblyで組む。
https://github.com/Nishinoyama/adaptive-minesweeper
フロントエンドも公開しようと思ったが、なんか npm の create-app をしたら、もとプロジェクトで使われてたgitファイルが含まれていて、これpushしていいのか?になってわからなくなり、ほったらかしに。
第一段階、バニラマインスイーパー
とりあえず、non-adaptiveなマインスイーパーを作って遊ぼうになるのがサガ。 こんなもん、イェローコーダーにかかれば楽ちんよ。なおメンテナンス性。
あまりにもトリビアルだったので、スクショはない。
なお、コーディングにおいて、GitHub Copilot君はとてもお世話になった。面倒だけプログラミングとかを全てやってくれた。
第二段階、適応的化
適応的化、英語で adaptivization????
ここから実装が爆発し始める(早すぎ) マインスイーパーのプレイヤーがあるマスをクリックして開けるのときの処理をイメージし、次のフローで組んだ。
- すべてのマスは「非確定」とする
- あるマスを数字とともに、「確定-空」として確定させる。(確定させることが論理的に不可能の場合、処理は終了する)
- 確定した「非確定」マスの周りを「ヒントマス」として管理する。
- ヒントマスを「空」か「爆弾」かで総当りし、一意に定まる場合、そのマスを確定させる。
なお、2.で決定する数字はフロントに委ね、そのフロントエンドはランダムな数を選んでいる。(バックで副作用持たせたくないよ~)
性格が悪いので、数字はたまに 「?」と表記され、ノーヒントになったりする。最悪。
また、その数字が正しいか正しくないかの判定は総当たりで行われており、非確定マスが増えると指数関数的に計算時間量が増える。最悪。
あれ?
なんか数年前にこの記事書いていたらしい(下書きに眠ってた)。軽く加筆/修正したのでポイしよう(?)
SPÉCIESLE開発日記
Wordle, Worldle, ポケモンWordle
Wordle やら ポケモンWordle やら Worldle やらをプレイ中、 Worldle は世界各国を位置を元に球面上空間に落とし込んでいるWordleがあるならば、 ポケモンをそれら種族値を元に6次元ユークリッド空間に落とし込んだ Wor(l)dle を作ってみたら面白そうというアイデアが降り注ぐ。
ポケモン(pokémon)の種(species)族と接尾辞leの命名規則に従ってSpéciesleというタイトルに。*1
番煎じ?
既出かどうかは調べてない。調べる気がでないし、もしダブってるのを知ったらモチベーションが無くなるだけなので。
ゲーム性が確立(?)するまで
初期段階 8/8
本家 Worldle と同じ回答と答えの(ユークリッド)距離を教える形にしていた。
Worldle では国のシルエットがわかるように、答えのポケモンは種族値だけ表示していた。

初期2 8/9
距離と各種族値の近さのインジケーターを表示させた。誤差10以内なら黄色、ピッタリで緑、そうでなければ灰色。これでWordleっぽさが出た。

最終 8/10
回答したポケモンの種族値を表示させた。また、ヒントとして答えの種族値の総和を表示させる形にし、難易度のしるしを見えるようにした。


既知のバグ
同一種族値
いや、想定してました。最終的な扱いは、同一種族値ならどのポケモンでも正解にするにして回避した。

同種の別種族値
想定外でした…(なんで?) 冒頭で述べたとおり、種族値というネーミングから種族だけでそれが唯一に決まる思ってたらそうではない。 未解決。最悪…
世代ごとで更新される種族値
想定内だが、これで例外を打つのは不可能なので最新世代に基づくという注釈をかけることで解決する予定。
異常難易度
🙃🙃🙃🙃🙃🙃
遊ぼう
そんな Spéciesle はここからプレイ可能である。プレイするたびに答えとなるポケモンは変わる。是非。
終わり。
【閲覧注意】6日目の記事の3章の無制限版
!!!閲覧注意!!!
何も考えず書いた結果、奈😁あ/良,🙄.高/か🤗専 A.d/vさ,😛e/n.t/ Ca/l.eた,😇,n/d.a,,r から切り離すべきと判断しました(検索避け)
はてな匿名ダイアリーに書いているようなレベル。マジで痛いので心してから読んで下さい。キツいと感じたらすぐブラウザバックを。
⏬⏬⏬⏬⏬⏬⏬⏬⏬⏬⏬⏬⏬⏬⏬⏬
続きを読むこいつついにセグ木を自力で使ってACしやがった
通った瞬間の記憶がない(大嘘)
こいつついにセグ木を自力で使ってACしやがった
問題の問題(PCK2018Pre11)https://onlinejudge.u-aizu.ac.jp/challenges/sources/PCK/Prelim/0390?year=2018
問題を見た瞬間、結合律が頭をよぎる。結合律→セグ木の発想。あとは実装するだけ。
ライブラリのセグ木バグってて草
バグ治療に1時間以上かかっとるやんけ!こんなんACちゃうわボケ
お前に足りないのは解くスピードだ
早解き出来ないと門前払いですよ!
今回のコンテストhttps://atcoder.jp/contests/jsc2019-qualで自分に足りないものがはっきりわかったんだね、早解き力、これだ。
続きを読む