arXiv探訪

興味の赴くままに数学するだけ

ざっくり学ぶ可換環論のpdfを作った

{ \mathrm{Lua}\LaTeX }に四苦八苦しながら作りましたよ。ブログの内容をそのまま流し込んだだけですが、一先ず9節まで。で分かったのは索引作るのが凄く難しいということ。項目の選び方ってどう考えるのが妥当なのだろうか。

権利関係は一応クリエイティブ・コモンズ(表示・非営利・継承)です。詳しくないので何か問題があればコメントにでも。

Creative Commons — 表示 - 非営利 - 継承 4.0 国際 — CC BY-NC-SA 4.0

ダウンロードするにはMicrosoftアカウントが必要です。

(追記)改訂しました。

数学をテーマにしたカードゲームを作りたい

シャドウバースが面白い。Steamでリリースされてからやり始めてるが、短い時間で気軽に遊べて何より好みの絵柄なのが良い。全カードに声が付き演出も凝っていて、過去にリリースしたゲームの資産を上手く活用しているなといった印象。ルールが単純でチュートリアルも充実している(ここ大事)ので簡単に楽しめる。メニュー部分は改善の余地があるけど対戦の操作性も良い。あと個人的に敵AIのバランスが良く出来てると思う。とは言えランクが上がると強カード3積みとかされて歯が立たなくなるので無課金勢だと勝てなくなる。そこはソシャゲなので仕方ないけど、ある程度ゲームの展開が固定されてしまうのは宿命か。カードゲームは手持ちで如何に勝つかを考えているときが一番楽しいというのは一理ある。

さて本題に移るとして、昔流行った某カードゲーム熱*1が久しぶりに湧いてきた訳で、自分でも何か作りたくなったという話。*2取りあえずテーマを数学にするなら、数学者が殴り合うという状況はちょっと想像したくない(ゼミは殴り合いに近いが)ので、まあ普通に考えれば数学者の相手は命題だろう。場に出された命題を複数の数学者で研究して証明する感じにしよう。プレイヤーは人の世を見届ける超越的な存在として、数学者を生み出しつつ命題を証明し、文明を発展させることを目的とする。(なんか壮大な話になったな。)

プレイヤーの選択肢としては、1.数学者を場に出す、1.命題を場に出す、3.イベントを発生させる、等がある。シャドウバース(ハースストーン、更にいえばMTGが先駆なのかな)のようにターンで増えるコストを支払ってプレイする。命題の解き方を現実通りに難しくしてもしょうがないので、分野(例えば解析・代数・幾何)毎に証明コストを設定しておき、数学者がそれを研究して、証明能力の合計値が証明コストを超えたら証明できるとする。場に命題がある限り数学者は研究をしなければならないし、また研究している命題を簡単には変えられない。命題を証明したらコスト分の文明点を得る。21世紀にちなんで21点を取ったら勝ち。墓地の代わりとして、数学者は研究が終わるとコーヒーブレイク(休憩)して場からいなくなる。命題が場に無ければ引退(除外)して文明点を得ることもできる。

こんな感じで大雑把に世界観を作るのは簡単だけど、ここから詰めるのが大変なんだよね。上の条件で場が動かなくならないように工夫が必要だし、一方が必勝になってはつまらない。プレイ時間が長くなっても大味だし、逆に初手で一気に形勢が分かってしまうのもいけない。そして何より一番の山場がカードを考えること。単に数学者だと圧倒的に少なくて100人分のネタがあるかも怪しい。だから「捕らえられた若き天才―ガロア―」とか「僕にはもう時間がない―ガロア―」とか一人で複数のバリエーションを考えるべき。命題は腐るほどあるけど選ぶセンスが試される。「リーマン予想」(効果:このカードは証明されない。研究した数学者は3ターン後に休息する)とか。イベントは「十分な余白」(未研究の相手の数学者を選び、研究させる)とか「世界大戦」(全ての研究は中止される。また2ターンの間、数学者は研究できない)とか楽しそう。

せっかくLua覚えたので、ちゃんと考えてゲーム作ろうかな。

*1:私は二度とカード破産はしないと誓ったのでした。

*2:幼い頃は自分で作ったゲーム(ルール)で良く遊んでいた。世界観構築が好きというのは数学に通じる所があるかもしれない。

Luaに触れてみた --> LuaLaTeX

{ \TeX }の環境を一新するにあたり、理由も無く{ \mathrm{Lua}\LaTeX }候補の一つに考えている。{ \TeX }の言語を全く理解しておらず、また学ぶ気にもならなかった過去を反省し、役に立つか分からないけどLuaについて学ぼうと思い立った。

ウェブにある情報を見る限り、感覚的にはJavaScriptに似ているけどJSの方がC/C++に近いかなって印象。言語としては(数学的な意味ではなく)コンパクトに纏まっているのに色々なことができる万能な小人と言える。ビット演算が標準で無かったり、数値の基本が浮動小数だったり数値計算には向かないかもしれない。スクリプトでやる処理ではないかもしれないが。JSと異なるのはコルーチン(協調的マルチタスク)があること。簡単に言えば関数を中断して次に呼んだときに再開できるのだが、これは優れものであり難しいところでもある。再帰を利用すれば呼ぶ度に生成される「数列」をプログラムできるので、数学的には面白いと思う。

例えばこのページのプログラムではエラトステネスの篩を何とも不思議な方法で実装している。呼び出されるたびにフィルターが重ねられていき、素数の倍数が篩に落とされていく。ただしsieve(200)を実行すると自分の環境で197あたりでcoroutine.resumeがfalseを返し始め、"attempt to perform arithmetic on a string value"が表示される。これは予想なのだが、コルーチンは呼び出されるたびにスタックされていくらしく、上限まで積まれて再開できない(false)為にnへnilが代入されてエラーとなるのではないか。調べても良さ気な情報が出てこないので、詳しい人が居たら助言を頂けないだろうか。

Luaは組み込みやゲームとかで使われている印象が強かったが、想定していた以上に強力な言語であることが分かった。上記のことがあるので現状はコルーチンのネストをあまり深くし過ぎないようにプログラムするのが良いかもしれない。C/C++との連携は今の所学ばなくてもいいかな。C/C++を理解しているとは言えないし。それよりも{ \mathrm{Lua}\LaTeX }で何ができるのかが知りたい。文章にオブジェクト指向が取り入れられるのであれば、表示方法も含めかなり扱いやすいものになる期待感はあるのだが。