CasNumの翻訳は「CasNum」となります。これは特定の用語や製品名であるため、そのまま表記します。
45日前原文(github.com)
概要
CasNumは、コンパスと定規による作図で任意精度演算を実現するPythonライブラリ。
Game BoyエミュレータのALUを幾何学的手法のみで再現した点が特徴。
RSA暗号やエミュレータ統合など、ユニークな用途にも対応。
パフォーマンス最適化やキャッシュ活用にも工夫あり。
MITライセンスおよび一部LGPL/zlibライセンス素材を利用。
CasNum(Compass and straightedge Number)概要
- CasNumは、コンパスと定規による作図のみで任意精度演算を実装したPythonライブラリ
- Game BoyエミュレータのALU(算術論理演算装置)で、全ての演算を幾何学的構成で再現
- RSA暗号やPokémon Red実行など、実用例も収録
- 最適化やキャッシュによるパフォーマンス向上策を実装
- MITライセンスで公開、一部LGPL・zlibライセンス素材を含む
コンパスと定規による作図入門
- CasNumのコアは、ディレクトリcas/配下の作図エンジン
- 原点と単位点の2点から始め、以下の基本作図をサポート
- 2点を通る直線の作図
- 1点を中心・別の点を通る円の作図
- 2直線の交点の作図
- 直線と円の交点(最大2点)の作図
- 2円の交点(最大2点)の作図
- 特に2円の交点は4次方程式となり、circle.pyに詳細な数式を実装
- これら5つの作図が、コンパスと定規作図の基本命令(ISA)
CasNumクラスと数値表現
- CasNumクラスでは、数値xを**平面上の点(x,0)**として表現
- 加算は2点の中点を求めて2倍する作図で実装
- 乗算・除算は三角形の相似性を利用して構成
- **論理演算(AND, OR, XOR)**も幾何学的な手法で実装(やや複雑だが動作)
- 最適化例
- 2倍演算は汎用の乗算アルゴリズムより高速に作図可能
- 剰余演算(mod)は、最大の2のべき乗×法を除去することで効率化
主な用途例
- RSA暗号プログラムの実装
- Game BoyエミュレータのALUへ統合
- その他独創的な応用例の可能性
- 上記2例は**examples/**ディレクトリに実装済み
- 円積問題は不可能だが、Pokémon Redは動作可能というユーモア
Game Boyエミュレータとの統合
- PyBoyのコードにCasNumを統合
- 編集箇所はopcodes_gen.pyのみ、最小限の改変
- Pokémon Red等のROMを実際に幾何学演算で起動可能
実行方法・サンプル
- リポジトリのクローンと依存関係のインストール
git clone --recursive git@github.com:0x0mer/CasNum.gitcd CasNumpip install -r requirements.txt
- サンプル実行
python3 -m examples.basicpython3 -m examples.rsa
- 作図ビューア(casnum/cas/viewer.py)で自動ズーム機能付き
- rsa例では手動ズーム推奨
- PyBoyでROM起動例
- 2048.gb(zlibライセンス)を同梱
cd examples/PyBoypip install -r requirements.txtPYTHONPATH=../.. python- Python対話環境で以下を実行
from pyboy import PyBoyfrom casnum import viewerviewer.start()pyboy = PyBoy('2048.gb')while pyboy.tick(): passpyboy.stop()
- 初回起動は15分程度かかるが、2回目以降はキャッシュで0.5~1FPS程度
開発哲学
- 現代の開発者はa+bで満足しがち
- CasNumは「4次方程式を解いてループカウンタをインクリメントする」体験を提供
- 作図の本質的な美しさと手間を楽しむ開発者向け
パフォーマンス・依存関係
- lru_cacheによる計算結果の徹底キャッシュ
- メモリ消費増大のリスクあり、自己責任で利用
- 時間計算量・空間計算量ともに「Yes」とユーモラスに表現
- 主な依存パッケージ
sympypyglet(作図表示用、推奨)pytest-lazy-fixtures(テスト用)pycryptodome(RSA例用)- Euclid Postulate V(オプション)
F.A.Q(よくある質問)
- Q: DOOMは動く?
- A: 数値ライブラリなので「動かない」
- Q: 速い?
- A: ユークリッド手書きよりは「劇的に速い」
- Q: なぜ作った?
- A: 任意精度演算が欲しかったし、「何かを感じたかった」から
ライセンス・サードパーティ素材
- MITライセンス(リポジトリ直下のコード)
- サードパーティ素材
- PyBoy(改変版):
./examples/PyBoy/、LGPL v3.0、CasNum対応のため改変- オリジナル:https://github.com/Baekalfen/PyBoy
- ライセンス全文:
./examples/PyBoy/License.md
- 2048.gb:zlibライセンスのGame Boy ROM
- PyBoy(改変版):
- 免責事項:本ソフトウェアは「現状のまま」提供、いかなる損害も作者は責任を負わない