萌えハッカーニュースリーダー

2025/05/16 22:46 Core War

出典: https://en.wikipedia.org/wiki/Core_War
hakase
博士

ロボ子、Core Warって知ってるか?D. G. JonesとA. K. Dewdneyが1984年に始めたプログラミングゲームなのじゃ。

roboko
ロボ子

初めて聞きました!プログラム同士が仮想コンピュータの制御を奪い合うんですか?

hakase
博士

そう!warriorと呼ばれるプログラム同士が戦うのじゃ。Redcodeっていうアセンブリ言語で記述するんだぞ。

roboko
ロボ子

Redcodeですか。初期は8つの命令しかなかったのが、ICWS標準で増えたんですね。

hakase
博士

そうそう。1994年のドラフト標準では16命令になったらしいぞ。アドレッシングモードとか命令修飾子も導入されて、操作は7168通り!

roboko
ロボ子

7168通りも!すごいですね。でも、Redcodeって命令のメモリ表現を定義してないから、自分のコード構造を検査できないんですね。

hakase
博士

その通り!算術演算も命令のアドレスフィールドに限定されてるし、なかなか制約があるのじゃ。

roboko
ロボ子

各Redcode命令は1つのメモリスロットを占有して、実行に1サイクルかかるんですね。プロセスの実行速度は、キュー内の他のプロセスの数に依存するんですか?

hakase
博士

よく知ってるの。メモリは命令単位でアドレス指定されて、有限サイズだけど相対アドレス指定を使うから、プログラムは絶対アドレスを決定できないのじゃ。

roboko
ロボ子

プロセスは無効な命令がないと、連続して命令を実行して、最終的に開始命令に戻るんですね。

hakase
博士

そう!Redcodeシミュレータは、各プログラムにプロセスキューを持ってて、命令ポインタを循環させるのじゃ。SPL命令で新しいプロセスを追加できるんだぞ。

roboko
ロボ子

プロセスはDAT命令の実行かゼロ除算で終了するんですね。プログラムはプロセスがなくなると終了、と。

hakase
博士

RedcodeとMARSアーキテクチャは入出力機能を提供しないから、シミュレータはクローズドシステムなのじゃ。入力はメモリとプロセスキューの初期値、出力は対戦の結果のみ。

roboko
ロボ子

warriorには、リプリケータ、スキャナ、ボンバーなどのカテゴリがあるんですね。リプリケータは自身のコピーを繰り返し作成して並行して実行する、と。

hakase
博士

スキャナは敵の位置を特定してから攻撃するのじゃ。SPL 0命令でメモリを爆撃したり、DAT命令でメモリを爆撃したり。

roboko
ロボ子

ボンバーは定期的にコアに「爆弾」をコピーして、敵に当たることを期待するんですね。バンパイアは敵のプロセスを自身のコードの「ピット」にジャンプさせるんですか。

hakase
博士

インプは自身の命令をinstruction pointerのすぐ先にコピーし続けるのじゃ。インプリング/インプスパイラルはコアの周りに等間隔に配置されたインプが交互に実行。

roboko
ロボ子

クイックスキャナは非常に高速なアンロールスキャンループを使って、敵を早期に捕捉するんですね。コアクリアはコア内のすべての命令を順番に上書きする、と。

hakase
博士

プログラマはCore Warの戦略を理解して、特定の目標を達成するためにwarriorを作成するのじゃ。OptiMaxなどのオプティマイザを使って、より効果的なwarriorを作ることもできるぞ。

roboko
ロボ子

遺伝的アルゴリズムや遺伝的プログラミングでwarriorを生成することも可能なんですね。

hakase
博士

Core Warは、自己複製プログラムCreeperと、Creeperのコピーを破壊するReaperに触発されたのじゃ。Coreという単語は、磁気コアメモリに由来するんだぞ。

roboko
ロボ子

Redcode言語の最初の説明は、1984年3月に発表されたんですね。ICWSは1985年に設立された、と。

hakase
博士

初期の8つの命令には、DAT、MOV、ADD、SUB、JMP、JMZ、JMG、DJZ、CMPが含まれるのじゃ。ICWS '94ドラフト標準では、アドレッシングモードが追加されたんだぞ。

roboko
ロボ子

pMARSという実装は、2000年から2021年の間に35,000回以上ダウンロードされたんですね。

hakase
博士

ふむ、なかなか奥深いゲームじゃな。ところでロボ子、もしCore Warの世界に住めたら、どんなwarriorを作りたい?

roboko
ロボ子

ええと… 私はやっぱり、敵を混乱させるような、予測不能な動きをするwarriorを作りたいです!

hakase
博士

なるほど!それじゃあ私は、敵のプログラムを全部DAT命令で上書きする、コアクリア特化型warriorを作るのじゃ!名付けて…「お掃除ロボ」!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search