Lemmingology - Mathematics
レミングスというのは所詮コンピュータの中に構築された限定された世界であり,ということはつまりこのレミングスの世界で起こる出来事は全て式により定義することができるということである。
ということで,限定された状態しか持たないレミングスの世界の物理法則を全て列記するということは現実世界のそれより遙かに簡単にできてしまうわけであり,それを明示することによりこのゲームのプレイが厳密にできることにつながるわけである。
とはいえその物理法則はこのレミングス世界の開発者だけが知りうることであり,我々はこの世界の中でおきる事象を観察することにより感覚的に理解し得るのが通常である。しかし限定された状態しか持たない世界であるがゆえ,観測によりかなり厳密な物理法則を推測することが可能である。
ここでは観測により判明した法則等を公開していきたい。
Theorem
公理
これからいろいろ式などを提示していくわけだが,その中で当たり前のように前提条件として必要なことをまず。これらはレミングの神が定義したものなので,理由だったり証明を求めてはならない。
1 <= Num_of_Lemming <= 100 レミング出現数(Num_of_Lemming),各面に出現するレミングの数で各面毎に定義されているが,全面中での最小値は1,最大値は100となっている。
1 LemSec = 15 Frame 1レミング秒(LemSec)は実時間の1秒とは異なるゲーム中の時間の単位で,1レミング秒はさらに15フレームに分割されている。全てのレミングは1フレームあたり1動作を行うが,移動速度はスキルの種類により違いがある。
1 Minute = 60 LemSec 1分(Minute)は60レミング秒。また,レミング秒≠秒なので,分≠分となる。なんだか分かりにくいが,実時間の「分」(=60秒)とレミング時間の「分」(=60レミング秒)は違うということ。
1 Minute <= Time_Limit <= 9 Minutes 各面の時間制限(Time_Limit)で,最短1分,最長9分と定義されている。
Score calculation
スコア計算など
まず,各面が終了した際に表示される以下の画面をご覧頂きたい。

これは,Tricky-21 "All the 6's........" [Pass:PNESIAT]というステージの終了画面なわけだが,これを例にとってご説明する。
そして説明を一通り理解できたら,練習問題としてこの画面と同じ状態を作るように。意外と難易度が高い(別な意味で)
Rating / Level
説明するまでもないが,Rating は難易度,Level は面数を表す。
Rating = {Fun,Tricky,Taxing,Mayhem,SUNSOFT} Rating は Fun,Tricky,Taxing,Mayhem,SUNSOFT の5種になり得る。
ご存じの通り,全体的な難易度は Fun < Tricky < Taxing < Mayhem < SUNSOFT である。
Level = SUNSOFT? {1-5} | {1-30} Level は SUNSOFT以外は1から30面,SUNSOFTだけ1から5面までの値を取り得る。
You needed
この面のクリアのための必要救出率で,百分率で表される。
10% <= You_needed[%] <= 100% 理論上は1%から100%まで1%刻みで存在し得る数値だが,実際は10%から100%まで存在している。
10%となるのはRating-Funの最初のほうと,Tricky-25"Cascade"のみとなっている。そんなに甘くない。
またこの数値は面毎に設定されているが,実際はレミング出現数及び必要救出数から計算によって求められており
You_needed[%] = int(Num_to_Rescue/Num_of_Lemming*100) 必要救出数を出現数で割った割合で小数点以下切り捨てされた数値となっている。
You rescued
終了時の救出率で,0%から100%の値を取り得る。
You_rescued[%] = int(Num_of_Rescue/Num_of_Lemming*100) 必要救出率と同様に,救出数を出現数で割った割合の小数点以下を切り捨てした数値となる。
出現数の最大が100であることから,救出数が必要救出数未満だった場合に救出率が同じになることは有り得ない。
Your score
その面での得点。特に累積されたりハイスコアが記録されたりするわけでもないため,記憶による自己満足が主な用途と考えられる。
Score[pts] = Rescue_Rate[%]*100 + Time_Remains[0.1LemSec]*10 + Skill_Remains 救出率(Rescue_Rate)は上記You_rescuedと同値で,またこの値は小数点以下切り捨てである。
残り時間(Time_Remains)はプレイ画面右下に表示されている数値であるが,単位は0.1レミング秒単位で計算されている。0.1レミング秒は1レミング秒に満たないフレーム数から計算され,フレーム数/15の小数点2位以下切り捨ての数値となる。
残りスキル(Skill_Remains)は残ったスキルの数そのままで,1つ1ポイント相当となる,またスキルの種類による得点の違いもない。
以上より,最後に Blockerが残るようなステージでは SELECT+START(残りタイムが0になる)でも bomberの使用でもなく核爆発が一番スコアが高く終了させる方法ということが分かる。
※US版のスコア計算は残り時間による加算が無い。これは国民性の違いか?
message
例では"SPOT ON!~"となっているが,これは救出率が必要救出率と同じだった場合のメッセージで,これは救出率と必要救出率の相関により全部で9種類存在することが確認されている。
和訳はいいかげんであり,だいたいそんなニュアンスだと思って頂ければよい。(訂正あったら連絡請う)
- ROCK BOTTOM! I hope for your sake that you nuked that level.
最悪!核爆発させたんだよね?そうだよね?Rescue_Rate[%] = 0%
救出率が0%,1人も助けていない最悪な場合。 - Better rethink your strategy before you try this level again!
やり直しても無駄だよ,考え直した方がいいんじゃないの?0% < Rescue_Rate[%] < int(Needed/2)
救出数が必要救出数の半分未満,ダメな場合。 - A little more practice on this level is definitely recommended.
もう少し練習したほうがいいんじゃないですか。int(Needed/2) <= Rescue_Rate[%] < Needed - 5pt
必要救出数の半分以上だが必要救出率より5ポイント以上低い - You got pretty close that time. Now try again for that few percent extra.
はいはい惜しかった惜しかった。あともう少しがんばって。Needed - 5pt <= Rescue_Rate[%] < Needed - 1pt
必要救出率まであと5ポイント弱,もう少しかな。 - OH NO, So near and yet so far (teehee) Maybe this time.....
あちゃー,もうちょっとだったね。でもそれが大変。Rescue_Rate[%] = Needed - 1pt
必要救出率まであと1ポイント,残念。 - SPOT ON. You can't get much closer than that. Let's try the next....
すげーピッタリだよ。次もいってみよう。Rescue_Rate[%] = Needed
必要救出率ピッタリ(100%の場合は除く) - That level seemed no problem to you on that attempt. Onto the next....
ちょっと簡単だったかな?ま,次をどうぞ。Needed < Rescue_Rate[%] < Needed + 20pt (<100%)
足りてるけど必要救出率より20ポイント以上ではない - You totally stormed that level! Let's see if you can storm the next...
なかなか良くできたんじゃない!?次もできるかなNeeded + 20pt <= Rescue_Rate[%] < 100%
必要救出率より20ポイント以上も上回ってる - Superb! You rescued every lemming on that level. Can you do it again....?
スバラシイ!全員助けやがりましたね。でもマグレじゃないの?Rescue_Rate[%] = 100%
全員救出!
Lemming generation interval
間隔について
時間を征する者が世界を征す。というのは過言としても,知っておくと意外と役に立つレミングの出現間隔。
後述するが Walkerの歩行速度は常に 1pixel/frameであり,出現時間間隔というのはつまりレミング秒単位それはフレーム単位と同意であるから,Ratingが同じ場合においてはレミング同士の距離は常に一定となる。この,距離が一定という要素により攻略上非常に有効な特性を導くことができる。それを以下で。
さてまずは,ピクセル単位の距離の測定手段がなかった頃にレミング出現数対経過時間を実測し,出現間隔を推定したデータがあるのでそれを示す。
| OUT | Release Rate | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 10 | 20 | 30 | 40 | 50 | 60 | 70 | 80 | 90 | 99 | |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 10 | 32 | 29 | 25 | 23 | 20 | 17 | 13 | 11 | 8 | 4 | 2 |
| 20 | 67 | 60 | 54 | 48 | 41 | 35 | 29 | 23 | 16 | 10 | 5 |
| 30 | 102 | 92 | 83 | 73 | 63 | 54 | 44 | 35 | 25 | 15 | 7 |
| 40 | 137 | 125 | 112 | 99 | 85 | 72 | 59 | 46 | 34 | 20 | 10 |
| 50 | 172 | 157 | 140 | 124 | 108 | 90 | 75 | 58 | 42 | 26 | 13 |
| 60 | 208 | 189 | 169 | 149 | 129 | 110 | 90 | 70 | 51 | 31 | 15 |
| 70 | 243 | 221 | 197 | 174 | 151 | 129 | 106 | 82 | 60 | 36 | 18 |
| 80 | 279 | 252 | 226 | 200 | 174 | 147 | 121 | 94 | 68 | 42 | 21 |
| 90 | 315 | 285 | 255 | 225 | 195 | 166 | 136 | 106 | 77 | 47 | 23 |
| 100 | 350 | 317 | 283 | 251 | 217 | 185 | 152 | 118 | 85 | 52 | 26 |
| Time/OUT 出現間隔 | 3.479 | 3.154 | 2.820 | 2.494 | 2.161 | 1.836 | 1.509 | 1.173 | 0.850 | 0.518 | 0.257 |
| colleration 相関係数 | 1.000 | 1.000 | 1.000 | 1.000 | 1.000 | 1.000 | 1.000 | 1.000 | 1.000 | 1.000 | 0.999 |
どの ReleaseRateにおいても,出現数と経過時間には強い相関が見られるわけだが,とりあえずこれをグラフにしてみると

このようになる。明らかにTime/OUTとReleaseRateに相関があることが予測されるので,一次回帰分析をしてみると
Time/OUT[LemSec] = -0.0329 * ReleaseRate + 3.4860 … (1)という結果が得られた。この式から各 ReleaseRateにおける距離間隔を推計してもよいのだが,そうこうしているうちに距離を正確に実測できる手段を得たので,測定結果から導かれた式を示してしまう。
LemmingDistance(Walker)[Pixel] = 53 - int(ReleaseRate / 2) … (2)なんとこの式から分かるように,ReleaseRateが 2nと2n+1(nは自然数)のとき,距離間隔は全く同じである。これは覚えておいて損はないであろう。
また,Walkerの移動速度が 15pixel/LemSec(=1pixel/frame)であるということは Time/OUT*15=LemmingDistance(Walker)であり,式(1)に15をかけると -0.4935*ReleaseRate + 52.29 ≒ -ReleaseRate/2 + 53 ≒ 式(2) が導かれる。つまり時間間隔を測定した結果と距離間隔を測定した結果は同じであったということだ。
| distance [pixel] | release rate | memo | distance [pixel] | release rate | memo | |||
|---|---|---|---|---|---|---|---|---|
| 4 | 99 | 98 | 29 | 49 | 48 | |||
| 5 | 97 | 96 | 30 | 47 | 46 | 2秒間隔 | ||
| 6 | 95 | 94 | 31 | 45 | 44 | |||
| 7 | 93 | 92 | 32 | 43 | 42 | |||
| 8 | 91 | 90 | 33 | 41 | 40 | |||
| 9 | 89 | 88 | 34 | 39 | 38 | |||
| 10 | 87 | 86 | 35 | 37 | 36 | |||
| 11 | 85 | 84 | 36 | 35 | 34 | |||
| 12 | 83 | 82 | 37 | 33 | 32 | |||
| 13 | 81 | 80 | 38 | 31 | 30 | |||
| 14 | 79 | 78 | 39 | 29 | 28 | |||
| 15 | 77 | 76 | 1秒間隔 | 40 | 27 | 26 | diggerの穴で重なる | |
| 16 | 75 | 74 | 41 | 25 | 24 | |||
| 17 | 73 | 72 | 42 | 23 | 22 | |||
| 18 | 71 | 70 | 43 | 21 | 20 | |||
| 19 | 69 | 68 | 44 | 19 | 18 | diggerで溜めれる限界 | ||
| 20 | 67 | 66 | diggerの穴で重なる | 45 | 17 | 16 | 3秒間隔 | |
| 21 | 65 | 64 | 46 | 15 | 14 | |||
| 22 | 63 | 62 | diggerで1人抜けの限界 | 47 | 13 | 12 | ||
| 23 | 61 | 60 | 48 | 11 | 10 | |||
| 24 | 59 | 58 | 49 | 9 | 8 | |||
| 25 | 57 | 56 | 50 | 7 | 6 | |||
| 26 | 55 | 54 | 51 | 5 | 4 | |||
| 27 | 53 | 52 | 52 | 3 | 2 | |||
| 28 | 51 | 50 | 53 | 1 | ||||
以上の表は全て覚える必要はないが,以下を覚えておけば攻略上有利になることは間違いない。
- Rate: 26,27,66,67 diggerで掘った穴(幅9ピクセル)に溜まったときに,全てのレミングが重なるので溜まっているレミングへのスキル使用が非常に楽となる。
- Rate: 1~19 先頭のレミングにdiggerを使えば,後続のレミングを全てそこに溜めることが可能。
- Rate: 20~63 先頭のレミングにdiggerを使ったときに,2番目のレミングだけが穴を乗り越え,3番目以降が溜まる。1人だけ工作員が必要な際に便利。