カテゴリー
技術

1978年のチェスアプリSargonを現代に蘇らせるプロジェクト

billforsternz/retro-sargon は、Intel 8080/Zailog Z80 で1978年に書かれた Sargon というチェスプログラムを、x86 に移植するという個人プロジェクトです。

参考までに、こちらは1983年に発売されたCommodore 64版 Sargon 2 の画像。

Z80のエミュレーターで動かすのではなく、Z80ベースのプログラムをx86(32bit)に変換しています。

x86 に移植された Sargon は、Chess GUI にこのエンジンをセットすることで対戦できるということです。作者おすすめのTarrasch Chess GUI を使って対戦してみました。

チェスでは人間が遊んだりコンピューター同士の対戦を表示するためのGUI部分が規格化(UCI)されているのですね。エンジンとGUIを別々にいろいろな人が開発していて、組み合わせて対戦させたり、人間が遊んだりできる。

オリジナルのSargon では探索の深さが最大で6に決められていたそうですが、移植後は最大で20階層に、状況に応じて読みの深さを自動で調整するようにしたとのこと。CPUの速さや使えるメモリ量が、昔のコードそのままでもずっと強いプログラムに変化させたわけです。

作者の @billforsternz 氏は、8080→x86のコンバーターと、8080→Z80→x86のコンバーターの二つを作り、変換結果が等しくなることを確認もしているということ。オリジナルの8080のコードに対する不満点から、Z80 に変換したものを起点としたいようなことも書かれています。当時のCPUの解説の中ではNECのV20などにも言及されています。

Readme に書かれた詳細がとにかく細かく、作者のこだわりが感じられます。Sargon はアセンブラ的にもメモリ利用の点でも変換しやすい作りだということ。他の色々な8080/Z80のプログラムが同様に移行できるわけではないかもしれませんが、愛着のある昔のプログラムがある人は、趣味としてこういう遊び方もあるんですね。

via Hacker News

カテゴリー
ネットの事件

Chess.com のiPhone版が32bitオーバーフローで動かなくなる

オンラインのチェス対局コミュニティChess.comのスマートフォン版が、プログラムのバグによって動かなくなる事件が発生していたそうです。

13日に公式フォーラムでiOS版ユーザーから「動かない」という声が上がりはじめ、開発チームが調査したところ、これまでにchess.com 上でプレイされたゲーム回数が 21億回を超えていたことが判明。正確には 2,147,483,647 回越えで、プログラマーならピンとくると思いますが、2^31, 符号付き32bit整数の最大値です。

サイト全体が動かなくなったのではなく、2013年以前のiPhoneを使っているユーザーだけに不具合が起こっていたので、運営もなかなか気づけなかったということ。運営ではみんなが新しいiPhoneを使っていたんですね。

32bit版のiOSを使う古いiPhone や iPad では、chess.com サーバから送られてきた JSON の解釈が、なぜか元と異なる値になってしまっていた、と。

開発チームは、クライアント側の修正とサーバ側の修正の2案を用意しましたが、テストチームのテストを通した後、ハック的でその場しのぎなサーバ側の修正は反映せず、Appleのアップストア側のアプリを新バージョンに更新することで修正としたそうです。

記念すべきオーバーフローを最初に引き起こした対局がこちら

Hacker News やIT系のニュースで多く取り上げられたことで、「これまでの対局が21億回もある」という点がクロースアップされ、サイト的には良い宣伝にもなったようです。

via Hacker News

カテゴリー
データ可視化

あなたがチェスの駒だったとして、生き残るには何になればいいか?

質問サイト Quora での、「平均的なチェスの対局での、個々のコマの生き残る確率は?」(What are the chances of survival of individual chess pieces in average games?)という質問に対するOlivere Brennanさんの素晴らしい回答。

chess-survival-rate

マスターレベル(レーティング2200以上)の棋譜220万局を集計して作られたのが上の図。チェスの初期配置図のコマのある場所に、そのコマが最後まで生き残る確率が書かれています。

480px-AAA_SVG_Chessboard_and_chess_pieces_03.svg

キングは半分ぐらいの生存率かと思ったら、詰んだ時点で終わりで100%生存という風に見るのですね。

一兵士として死ぬ確率が高いのは、中央あたりのポーンや、ナイトやビショップということです。女王も半分の確率で居なくなってしまいます。

王様の次に生き残りやすいのは、キング側の端の、h列のポーンが70%を超える高い生存率です(なお、今回の確率は、プロモーションした場合も生存、として集計しているそうです)。

王様だと必ず生き残るので、王様になれるなら王様になるのも一つの手ですが、戦後に敗戦の責任を負って生きるのもたいへんでしょう。一兵士(ポーン)になって戦場から離れた端っこの方にいるのも、生き残るための一つの方策と言えるかもしれません。

# あくまでチェスの話ですよ

220万局を集計したC#のコードはGithubで公開されています

将棋だったら誰も死なずに投降して裏切るだけですし、取られた時点で最初にどこにあった駒かわからなくなってしまうので同じような統計は取れなさそうですね。