COREWAR

/
Step 20: Dwarfの簡単な変更(爆弾の間隔を変える)
🎯0005番地にDAT爆弾を着弾させる(0/1)

ミッション一覧 (全30ステップ)

第1章:画面とメモリの基本 (1-6)
BASIC★☆☆
Step 1: 時間を進める「STEP」ボタン
🔒
BASIC★☆☆
Step 2: プロセスの停止と「RESET」での復旧
🔒
BASIC★☆☆
Step 3: 「編集できる状態」と「実行中の状態」EDIT
🔒
BASIC★☆☆
Step 4: メモリの箱の3つの部屋(右の部屋 B を変える)EDIT
🔒
BASIC★☆☆
Step 5: 左の部屋(A)と右の部屋(B)を書き換えるEDIT
🔒
BASIC★☆☆
Step 6: 「数値(#)」と「番地($)」の記号の違いEDIT
第2章:代表的な命令とループ (7-13)
🔒
ARITHMETIC★☆☆
Step 7: 足し算の命令「ADD」の観察
🔒
ARITHMETIC★☆☆
Step 8: 足す「数値(A)」を変えてみようEDIT
🔒
ARITHMETIC★☆☆
Step 9: 足す「相手の場所(B)」を変えてみようEDIT
🔒
ARITHMETIC★☆☆
Step 10: 引き算の命令「SUB」を使ってみようEDIT
🔒
BASIC★☆☆
Step 11: 箱を丸ごとコピーする命令「MOV」EDIT
🔒
CONTROL★☆☆
Step 12: 時間を巻き戻すジャンプ命令「JMP」EDIT
🔒
CONTROL★☆☆
Step 13: 簡単なプログラムを作ろう(自動カウンター)EDIT
第3章:ノイマン型とデジタル生命 (14-18)
🔒
BASIC★☆☆
Step 14: なぜ「DAT」が爆弾になるのか?EDIT
🔒
BASIC★☆☆
Step 15: 自分自身の命令をコピーする(コード=データ)EDIT
🔒
BASIC★☆☆
Step 16: お手本観察:最古の生命体「Imp」をSTEP実行する
🔒
BASIC★☆☆
Step 17: Impの簡単な変更(コピー先の観察と実験)EDIT
🔒
ARITHMETIC★★☆
Step 18: 間接参照(@ポインタ)の仕組みを知るEDIT
第4章:伝統的アルゴリズム (19-24)
🔒
STRATEGY★★☆
Step 19: お手本観察:爆撃機「Dwarf」をSTEP実行で解剖する
🔒
STRATEGY★★☆
Step 20: Dwarfの簡単な変更(爆弾の間隔を変える)EDIT
🔒
STRATEGY★★☆
Step 21: 実戦デビュー:爆弾の間隔を調整して標的を破壊せよEDIT
🔒
CONTROL★★☆
Step 22: お手本観察:分裂命令「SPL」と増殖の仕組み
🔒
CONTROL★★☆
Step 23: お手本観察:条件比較命令「SEQ / CMP」で敵を探すEDIT
🔒
STRATEGY★★☆
Step 24: お手本観察と変更:防衛罠「Imp-Gate」でImpを止めろEDIT
第5章:実戦改造と総合演習 (25-30)
🔒
STRATEGY★★☆
Step 25: 【Stone(石)】高速爆撃機の観察とステップ幅の改造EDIT
🔒
STRATEGY★★☆
Step 26: 【Paper(紙)】自己複製スウォーム「Mice」を観察する
🔒
STRATEGY★★★
Step 27: 【Paperの改造】クローン投下距離を変更して増殖せよEDIT
🔒
STRATEGY★★☆
Step 28: 【Scissors(鋏)】索敵スキャナーの観察とスキャン間隔の改造EDIT
🔒
STRATEGY★★★
Step 29: 【Trap(罠)】敵の魂を誘拐する「Vampire」の観察と改造EDIT
🔒
STRATEGY★★★
Step 30: 卒業試験:愛機のチューニングと総合バトルEDIT
🟢 編集モード(セルをクリックして変更できます)
[番地][命令 (Opcode)][A (左の値)][B (右の値)]
📦 データ領域 / 爆弾 (DAT)
0000
▼MOV
#
$
👈 ここを変更
0001
▼MOV
<
<
0002
↺JMN
$
$
0003
❖SPL
@
#
0004
+ADD
#
$
0005
↺JMP
$
$
0006
■DAT
$0
$0
++ 命令を追加
0007
■DAT
$0
$0
0008
■DAT
$0
$0
0009
■DAT
$0
$0
0010
■DAT
$0
$0
0011
■DAT
$0
$0
0012
■DAT
$0
$0
0013
■DAT
$0
$0
0014
■DAT
$0
$0
0015
■DAT
$0
$0
0016
■DAT
$0
$0
0017
■DAT
$0
$0
0018
■DAT
$0
$0
0019
■DAT
$0
$0
0020
■DAT
$0
$0
0021
■DAT
$0
$0
0022
■DAT
$0
$0
0023
■DAT
$0
$0
0024
■DAT
$0
$0
0025
■DAT
$0
$0
0026
■DAT
$0
$0
0027
■DAT
$0
$0
🏟️ARENA (20 ROWS)SCOPE: 0000 - 0019
[メモリ空間 800番地 (20行 × 40列)]左のエディタと1対1で同期
TASKS: 0
CYC: 0
📖 講義ノート // STEP 20 OF 30第4章:戦闘用Warriorの解剖と並列・知覚制御⏱ 読了目安:約5分
📖 講義ノート:この実験で起きているコンピュータ科学と人工生命の原理

剰余環(Modulo Arithmetic)と最大公約数(GCD)——ステップ幅が支配する探索理論

爆撃間隔(Step Size)を #4 から #2 に変えると、攻撃密度とメモリ巡回速度はどう変化するのか?

#Modulo Arithmetic#Greatest Common Divisor (GCD)#Step Size (Stride)#Coverage Density vs Speed#Mod-N Bombing
🔬Step 20: Dwarfの簡単な変更(爆弾の間隔を変える)

Dwarfが「何マスおきに爆弾を落とすか」は、1行目(0000 番地)の ADD.AB #4, $3 の #4 で決まっています。 最初は #4 なので、0003 番地から4マス先の 0007 番地、次は 0011 番地へと爆弾が落ち、その間にある 0005 番地 は飛び越されてしまいます。

🎯 やってみよう 1行目(0000 番地)の A(左の数値) を #4 から #2 に変更して [PLAY] を押し、2マスおきの高密度爆撃(0005 番地と 0007 番地の両方への着弾)を実現しましょう!

1. 攻撃の「網の目の細かさ(密度)」と「巡回スピード」のトレードオフ

Step 20では、Dwarfの1行目(0000番地)にある加算ステップ幅を『#4』から『#2』に変更し、4マスおきではなく2マスおき(0005番地、0007番地、0009番地...)に高密度な爆弾を投下する実験を行いました。

爆撃機(Stone / Bomber)を設計するとき、プログラマが最も頭を悩ませるパラメータがこの「ステップ幅(Step Size:1回に何マス進めるか)」です。ここには明確なトレードオフ(二律背反)が存在します。 ・ステップ幅を小さくする(例:#2):網の目が非常に細かくなり、わずか2行しかない小さな敵であっても逃さず確実に仕留められます(高密度)。しかし、800マスのメモリを一周するのに『800 ÷ 2 = 400発(1,200サイクル)』もかかってしまい、遠くにいる敵に届くまでに時間がかかります。 ・ステップ幅を大きくする(例:#8 や #16):メモリ全体を猛スピードで一周できます(高速巡回)。しかし、網の目が粗くなるため、その隙間(ポケット)に小さな敵がすっぽり入って生き延びてしまう危険が高まります。

Stride #4 (Mod-4): [0003] ──► . . . 💥(0007) . . . 💥(0011)  (3-cell safe gap between bombs)
Stride #2 (Mod-2): [0003] ──► . 💥(0005) . 💥(0007) . 💥(0009) (Only 1-cell gap! Dense carpet)

2. 円環空間の数学:最大公約数 GCD(CoreSize, Step) の法則

ここで、数論(整数論)の非常に美しい定理を紹介しましょう。 サイズが $N$ マス(Academyでは $N=800$、Laboratoryでは $N=8000$)の円環メモリにおいて、ステップ幅 $S$ で足し算を繰り返したとき、爆弾が落ちるマスの総数と「何マスおきの網目になるか」は、$N$ と $S$ の『最大公約数(GCD: Greatest Common Divisor)』によって完全に決定されます!

・$S = 4$ のとき:$\text{GCD}(800, 4) = 4$ です。したがって、爆弾はちょうど「4マスおき」の200箇所にだけ落ち、200発目で元の 0003 番地に戻ってきます(Mod-4 爆撃)。 ・$S = 2$ のとき:$\text{GCD}(800, 2) = 2$ です。したがって、爆弾は「2マスおき」の400箇所に落ちます(Mod-2 爆撃)。

では、もし $800$ と互いに素な数(最大公約数が 1 になる数)、たとえば『$S = 3$』や『$S = 7$』や『$S = 303$』をステップ幅に選んだらどうなるでしょうか? $\text{GCD}(800, 3) = 1$ となるため、なんと1周目では3マスおきに飛びながら、2周目、3周目と回るうちに1周目の隙間をすべて埋め尽くし、800発でメモリの全800マス(100%の番地)に爆弾を落とすことができるのです!(ただしその場合、800発の中で自分自身の命令 0000〜0002 番地にも必ず爆弾が落ちてしまうため、自爆を避ける高度な終了条件が必要になります)。

3. 現代のトーナメント戦における「最適ステップ幅(Optima Numbers)」

実際のCoreWarの世界大会では、単に『#2』や『#4』のように隣り合う順番で爆弾を落とすのではなく、『#2365』や『#3039』のように、1発ごとにメモリ空間のあちこちへ大きくジャンプしながら、結果的に4マスおき(Mod-4)や5マスおき(Mod-5)の網目を均一に埋めていく「最適ステップ数(Optima Numbers)」という数学的定数が研究し尽くされています。

なぜなら、端から順番に『#2』や『#4』で爆撃すると、すぐ近くにいた敵には一瞬で当たるものの、反対側にいた敵には何百サイクルも届かないからです。たった1つの加算数値(Aフィールド)の裏側に、これほど奥深い整数論と探索アルゴリズムの世界が広がっているのです。

🔒

🔒 MISSION CLEAR で講義ノートの全編が解放されます

上段の実験シミュレーターでミッションを達成すると自動的に全編がアンロックされます。(下のボタンから今すぐ全文を先に読むことも可能です)