When the Music's Over

音樂の話とゲームの話

Human Resource Machine

外國語を學ぶのが好きだ。 まあ、飽きっぽいのでものにした外國語があったりはしないのだが、 それでも、言語からは話者の物の捉へ方が垣間見えて實に興味深い。

例へば、「おまへには無理だよ」といふ日本語は、英語だと「I don't think you can do it.」とするのが普通である。 否定の位置が違ふのだ。 日本語では「(おまへには)できない」のだが、英語では「(できるとはおれには)思へない」。 これは語順が大きく關係してゐて、日本語は述語が最後に來るので、否定も最後に來るのが自然だが、 英語の場合、動詞は主語の次に出てくる――つまり大事なことはさっさと云ふ言語なので、 否定もさっさとしてしまふ。

これは文章構造にも波及してゐる。 英語の長文讀解で「段落の最初の文章に云ひたいことは書いてある」と習った憶えがあるはずだ。 とにかく、大事なことは先に云はうといふ精神でできあがってゐる言語なのである。

接續法も面白い(英語には假定法しかないが)。 「もし金がたっぷりあったら一生働かないのになあ」は英語だと「If I were rich, I wouldn't work anymore.」になる。 假定法過去といふあれだ。なぜ過去の話ぢゃないのに過去形を使ふのか。

インド・ヨーロッパ語族の他の言語を學ぶとわかるが、 これは接續法と呼ばれるもので、 なんとやつらは「事實」と「想像上のこと」とをかっちり峻別してゐるのだ。 事實なら時制はその儘でよいが、想像上のことを話すときには時制を一つ下げ、それが想像上のことであることを示す。 それが接續法である。英語の假定法は、その一種なのだ。 受驗英語の定番「if 節の中は未來のことでも現在形」も、 「事實ぢゃないから時制が一つ下がってるんだな」とおれは解釈してゐる(まあこの場合、主節は未來形になるけども)。

こんな具合ひで、言語を學ぶといふのは、物事の別の捉へ方を知るといふことにつながる。 だから、おれは言語を學ぶのが好きなのである。

ところで、最近ゲームの記事を書いていなかったのには理由がある。 暑いからだ。 7 月中旬までは涼しかったくせに、急に普段通りの暑さ(まあ 1, 2 ℃ほど低くはあるが)になったため、 机に向かふのが苦痛になってしまひ、しばらくゲームのできない日々を過ごすことになってしまったのである。

ゲームしなくなった理由はもう一つあって、ガンジョン斷ちしたからだ。 mod 入れて、好きなアイテムの組み合はせでプレイできる環境になったので、 やってみたいと思ってゐたことを試しまくってゐたら、 さすがにやることがほぼなくなってしまった。

まあ、イーブルアイの祠とかハイドラガンファイアのアンロックとか殘ってるんだけど、 前者は運が絡みすぎるし、後者はエレベータでさんざん行き來したのに見つからずにめげた。 アモノミコンに載るんならアンロックされるまでがんばっただらうけど。

で、そんな状態になったにも拘らず、ついガンジョンをプレイしてしまってゐたので、 これはいかん、意思を強く持ってガンジョン斷ちするぞ!と決めたら、 もともと未練があったわけではなく惰性でプレイしてゐただけだったので、 けっこうさっぱりやめられてしまったのである。

さうなると、積んである多量のゲームを崩せばいいのだが、 新しいゲームやるのって、氣合ひ要りません?  新しい操作を憶えるぐらゐはまあいいとしても、 いきなり面白さがわかるゲームなんてさうさうないわけで、 序盤はどうしたってだるい。 久々にストラテジやりたいなと思ってはゐたんだけど、 ストラテジなんて序盤がだるいゲームの最たるもの。

そんなわけで、新しいゲームをすることもなく YouTube で古いテレビ見たり(だいたいパペポ)、 落語を聞いたりして過ごしてゐたのだが、 ふと思ひ立って Human Resource Machine をやってみることにした。

Human Resource Machine は、 昨年 7 Billion Humans をリリースした Tomorrow Corporation から出てゐるパズルゲームである。 Tomorrow Corporation の作品としてはこれ以外に暖爐でものを燃やして世界の状況をなんとなく知る Little Inferno があり、 前身となる 2D Boy 時代の作品に、ゴムのやうな生物 Goo をつないでゴールを目指す物理演算パズル World of Goo がある。 どれも丸い頭ででかい目のキャラばかり出てくるから、絵を見れば一發で「ああ、あの會社ね」とわかる。

Human Resource Machine7 Billion Humans はどちらもプログラミングを用いたパズルで、 要は與へられた課題を實現できるプログラムを組んでね、といふものだ。

なるほどプログラミングってかういふものなのかとか、 人間と違ってコンピュータってのはこんな風に命令されないと動けないのねえとか、 あんなに汚かったコードがこんなにスッキリさせられるのか!とか、 さういふところに面白さを感じるゲームである。

が、個人的に最も樂しいのは、「かう命令しても行けるんぢゃね?→行けた!!!!」となる瞬間だったり、 「えっ、そんな方法ありなの?!??!」となる瞬間である。 さう、これは「設計思想」といふものを體感できるゲームなのだ。

7 Billion Humans は複雑さが増してゐるやうだが、 Human Resource Machine で使へるコマンドはほんの少しで、以下の 11 個しかない。

  • inbox:入力データ受け取り
  • outbox:データ出力
  • copyfrom:特定マスの値を持つ
  • copyto:持ってゐる値を特定マスへコピー
  • add:持ってゐるものと、特定マスの數値を足す
  • sub:持ってゐるものから、特定マスの數値を引く
  • bump +:特定マスの値を +1 し、それを持つ
  • bump -:特定マスの値を -1 し、それを持つ
  • jump:コード内の特定行へ飛び、次に書かれた命令を實行
  • jump if zero:0 を持ってゐるなら特定行へ飛び、次に書かれた命令を實行
  • jump if negative:負の値を持ってゐるなら特定行へ飛び、次に書かれた命令を實行

で、この 11 個のコマンドを驅使して與へられた課題を實行するプログラムを書くわけだが、 最初のうちはともかく、當然ながら進むにつれて問題がえげつなくなっていく。 今惱んでゐるのは「2 つの單語が流れてくるので、それを辭書式配列の順に出力せよ」といふやつ。

人間なら、そんなのは見てすぐわかる。 でも、機械はさうはいかない。 具體的に書いてしまふと長くなるので割愛するが、 なんたって一つづつしか文字を処理できないので、 「最初の文字は同じだな、ぢゃあ次はどうかな? 次も同じだ…」みたいに差が出るまで蜿蜒と比較を續けなくてはならない上、 そもそも文字數が違ったりもして非常に厄介。 なんで見てすぐわかることができないの? バカなの? 死ぬの?みたいな氣分になる。

まあ、言葉でつらつらと書いても仕方ない。 實際のゲーム畫面を使ってこのゲームの面白さを説明しよう。

次の動畫はステージ 28、「3 つ 1 組の數字が流れてくるから、それを小さい順に出力せよ」といふ問題だ。

最初、おれはこんなふうに組んだ(ちなみに、かういふ複雑な場合分けが必要な問題は、紙に書いて考へてます)。

まづ 3 つの數字を竝べ、最後の數値と最初の數値の差を取る。 小さい方を 8、大きい方を 6 に置く。 次に 2 番目の數値と小さい方を比べる。 これで 2 番目の方が小さければ、2 番の數値が最小とわかるので、 大きい方から順に 6、7、8 のマスに竝べかへ、8、7、6 の順に出力する。 2 番目の方が大きい場合、更に比較する必要があるので、比較して、 やっぱり大きい順から 6、7、8 に竝べ、8、7、6 の順に出力。

まあ、實際にどんな動きをするかはどうだっていい。 このコードの設計思想は「わかったことはその都度メモし大小を確定。大きい順に 6、7、8 のマスに置く」である。

なんで 0、1、2 のやつを直接竝べかへねーの?って思ふよね。 いやねえ、このゲーム、引き算すると持ってた數字は消えて答へを持つ羽目になるんだよね。 つまり、持ってる數字はしょっちゅう變はるから、變はっても平氣なやうに、まづ元のデータを保管することにしたわけ。

a、b、c と 3 つの數字があるとする。 最初に a と b の差を取れば、a、b の大小はわかる。 でも、c についてはさっぱりわからない。 假に a > b だったとして、c > a > b なのか a > c > b なのか a > b > c なのかは全くわからないわけだ。

だから、取り敢へずわかった a >b といふ結果だけでも保存しておかう、 ってのが、6、7、8 のマスを使った理由である。 いちいち大きい順に 6、7、8 に竝べるやうにしたのは、 コードの最終部分を「8、7、6 の順に出力する」に一本化したかったため。

結論から云ふと、このコードはクソである。 最後まで見ればわかるが、行數もステップ數もチャレンジ要件を滿たしてゐない。 手順が多すぎるし、無駄な行動だらけなのだ。

そこで、新たな設計思想に基づいて書かれたのがこれ。

こちらは、「竝べかへなしに a、b、c の大小を判定し、かつ最小値はわかった時點で出力」だ。

このコードのいいところは、竝べかへをなくし、 最小がわかった瞬間に出力することで、ステップ數を大幅に節約できること。 その分、細かい場合分けが必要になるが、 この課題を処理するのに細かい場合分けが不要なコードなんてのはない。 だったら、「最小値がすぐにわかった場合」のステップ數や「大小關係が一發で決まる場合」のステップ數を減らしてしまはう、といふ考へ。

ただ、このコードでは殘念ながら行數のチャレンジ要件を滿たすことができない。 そこで出てくるのが次のコードだ。

これはおれが考へたのではなく、公式フォーラムにあったものをパクってきた。

このコードの特徴は、上の 2 つでは使はなかった add を使ふことで竝べかへの手間を大幅に削減してゐることだ。

「a、b、c の大小を判定し、小さい順に出力せよ」と云はれれば、やるのは當然引き算である。 が、ここで厄介なのは、引き算を行ふと、自分の手元にはその答へしか殘らないといふことだ。 具體的に説明しよう。

5 と 7 と -4 の大小を比較せよと云はれた場合、 プレイヤーはまづ 5 を取ってきて床に置く。 その後、7 を取ってきて引き算するわけだが、 引き算をしてしまふと、手元に殘るのは 2 といふ答へだけで、7 は消滅してしまふ。 2 つの數値ならそれでもいいが、まだ -4 が殘ってゐて、 7 と -4 の大小だって判定する必要がある。

それを簡單に解決してくれるのは、5 も 7 も -4 も取り敢へず床に置いて、それから 3 つの大小を比べるといふ方法だ (その結果できあがったのが最初の動畫にしたあれだ)。

でも、このコードはその方法を採用してゐない。 7 - 5 をして 2 になってしまっても、また 5 を足して 7 に戻してから床に置けばいいぢゃん!と足し算を使って解決するのだ。

實際、引いた數値を足し直すことで數値を元に戻すといふのはこれより後のステージでちょくちょく使ふテクニックである。 といふか、おれもそれは自分で思ひついて使ってゐたのに、この問題でそのテクニックを使ふことには思ひ至らなかった。 このコードを實行したときは目から鱗が落ちたよ。あれをかう使へばこんなことができるのか、と。すごい。

このゲームのいいところは、 解答を文字だけで出力できることだ (まあ、pastebin 使へば樣々なデータが文字だけでやりとりできちゃふ時代ですけど)。 フォーラムにある他人のコードをまるっとパクってきて動かすのも自由自在――もちろん、 パクってその儘動かすより、 ちょっと動かして設計思想を理解したら 自分で組み直してみるともっと樂しめる。

そしてそれは、手輕に他人の腦味噌の中を覗ける樂しみだ。 自分の腦味噌から出てくるものといふのは、やっぱり限られたものだ。 でも、このゲームは他人の發想に簡單に触れられる。 自分の腦味噌が新たな發想を繰り出してくるのも興奮するが、 他人の、思ひもよらない考へに腦味噌を刺戟されるのもたまらないものがある。

ゲームの多くは、自分の腦味噌だけでやるもので、それは大抵のパズルゲームでも同樣だ。 でもこのゲームは他人の答へに驚かされる喜びがある。 おれの大好きな Zachtronics のパズルもさういふ喜びに溢れてゐるけれど、 Human Resource Machine のいいところは、 コピペで、いやもっと云へば文字を見るだけで簡單に他人の答へを味はへることだ。 この樂しみは、最初に書いた外國語を學ぶ樂しみに似たやうなものだと思ふ。

調べたところ、このゲームはけっこういろんな媒体でリリースされてゐる。 どんどんやって、おれには想像もつかない解答をばんばか出力してほしい。 おれが喜ぶので。

(2019/08/18 追記)

全ステージをクリアした。最後の方きつすぎ!  「素因數分解せよ」とかチャレンジ要件 28 行なのに 145 行も使っちゃったよ!(でも 399 以下のステップが目標のところをたった 84 ステップでクリアできるコードなのだ)  辭書のやつ閃いたあとはスムーズといへばスムーズだったのだが、チャレンジ要件がきつい。 ステップ數の削減はコツが摑めたんだけど(場合分けを細かくすればいい)、 行數はなかなか削れない。 似たやうな作業は可能な限りまとめるってことなんだらうけど、 そんな簡單にまとめられたら苦勞しねえんだよ!

つうか、やってて思ったんですけど、 このゲームあれぢゃん、アルゴリズムぢゃん。 うちの父親の專門分野だよ…。 どれだけ鮮やかに解いてくれるのか、やらせてみたい。

しかし始めた日には「明日には終はりさうだな」とか思ってたけど、全然無理。 結局、辭書のやつは閃くまで丸一日かかってるし、實績もあと一つを殘すのみとはいへ、 それを取るためにはどっさり殘ってる最適化の課題をこなす必要があり、獨力だとどんだけかかるかわからない。 まあいいんだけどね。他人のを見るのが樂しい!って書いたわけだし。 思ったより長く樂しめさうでラッキー。

(2018/08/22 追記)

ググったら日本語の攻略情報は答えしか書いてないやうなのばっかりだったんで、 ヒントだけ書いて、答へはクリックしないと見えない形式のガイドを書いた。

パズルゲームで答へだけ教へられるの、クッソつまんなくないですか?  まづ知りたいのはヒントでせう。 ヒントもらって、それでも解けなかったら答へ訊くけどさ。

Human Resource Machine

Human Resource Machine

  • Experimental Gameplay Group
  • ゲーム
  • ¥610