7章 一握りの例外。

何事にも例外があるもので、ここまでで紹介したアルゴリズムにも例外があります

例外1
┌─────────────┐
│×××××××××××××│
│#×××××♀×××××員│
│■■■■■#■■■■■■■│
│×××××××××××××│
└─────────────┘
┌─────────────┐
│×××××××××××××│
│#××××−♀×××××員│
│■■■■■#■■■■■■■│
│×××××××××××××│
└─────────────┘
ここに2つの場面があります。まず上を適当にエディットしてください。
開始後、はしごを降ります。その状態でのロボットの行ける場所は
左のはしごの上とランナーのはるか下の床だけです。
ロボットはランナーの高さに行けないので、当然左の登りはしごを目指します
 ぎゃー、なんで来るのー
しかし、ランナーの上に来た時、はしごを降りて(落ちて?)ランナーを殺しに来ます。

メモリの話で言うと、はしご(=3)を、ランナー(=9)で上書きしてしまうため
足場がないことになってしまうようです。
なので、はしご無敵を使えばランナーの地点が9でなくなるのでこの例外は起きません。
これは今までのアルゴリズムでは説明がつかないので、例外(バグ?)として扱います。

 セーフ。当然ね。
バーがあるとアルゴリズムに準じた動き。



今度は下をエディットしてみてください。バーが1つ増えただけです。
さっきと同様にはしごを降ります。またロボットの行ける場所を考えるますが、さっきと同じ地点以外ありません。
ロボットはランナーの高さに行けないので、左のはしごを目指します。
ランナーの上を通って左のはしごに行きます。殺しにきません。


例外2
┌──────────────┐
│××××××××××××××│
│−−−−×員員員×−−−−−│
│××××■■■■■×××××│
│×××××■♀■×××××▲│
│××××××■×××××××│
│××■×××××××■×××│
│××××××××××××××│
│■■■■■■■■■■■■■■│
│××××××××××××××│
│××××××××××××××│
│××××××××××××××│
│××××××××××××××│
│××××××××××××××│
└──────────────┘
これをエディットしてみてください。
ちなみにこっから下は文を読むよりやってみて結論だけ読んだほうがよいです。

こうなるはずです(カッコ内はロボットの移動距離)
3体とも右に行く(2マス)
左2体が左に、右のロボットはそのまま右へ(3マス)
真ん中のロボットが右へ(1マス)
左のロボットがバーから手を離し、真ん中のロボットは左へ(1マス)
右のロボットがバーから手を離し、真ん中のロボットは右へ(2マス)
右のロボットが金塊を取り、真ん中のロボットは左へ。

地下帝国説のはなしも書いてあるのですが、メモリ上ではエディットでAボタンを押した順にオブジェクトに番号が振られていて、そこではコンクリ=2、バー=4、ロボット=8として計算しています。
メモリViewer一部をみてみると、
sikai22.PNG
これの赤枠の中身を元に戻すと、

−−−−×員員員×−−−−−■■■■■■■■■■■■■■
××××■■■■■×××××

もともとロードランナーはヨコ28マスなので、こうなります。エディットでは14マスしか使いませんが、使わない部分はコンクリで埋められているんですね。
ロボットが右に2マス歩くとどう変化するかというと。

sikai23.PNG

元に戻すと、

−−−−×員×員×員−−−−■■■■■■■■■■■■■■
××××■■■■■×××××

ロボット(08)でバー(04)が上書きされています。
この状態でほかのロボットがメモリのデータを参照すると、横視界を作る時にこんなんなります。
sikai24.PNGsikai25.PNG
左が左2体にとっての横視界と行ける場所/右が右のロボにとっての行ける場所。
ランナーと同じ高さの金塊に行きたがります。
さらに歩くと、
sikai26.PNG

 −−−員×員×××−−員−−■■■■■■■■■■■■■■
 ××××■■■■■×××××

sikai27.PNG
青のかこみが真ん中ロボットの横視界。バーがロボで隠れている。

この、「バー(もしくははしご)が別のロボットで隠れたためブランクと勘違いする現象」は、
ロボットが横視界を確認する段階でのみ起こります。

横視界を作る時はメモリの000200から、
縦視界を作る時はメモリの別のところ(000400から)を読んでいるからだとおもいます。


6章へ まとめのまとめ

地下帝国説へ行く
トップに戻る