k-takahashi's blog

個人雑記用

セブンビリオンヒューマンズ

 

セブン・ビリオン・ヒューマンズ|オンラインコード版

セブン・ビリオン・ヒューマンズ|オンラインコード版

 

 ちまちまプレイしてきて、一応クリアーまで到達。

前作はマシン語(極めてプアなマシン語)でのコーディングをパズル化していたが、本作はSIMDライクでカオス度がアップしている。一種類のコードで複数の社員を制御しないといけないのだが、ワークスペースは共有されており、しかも初期状態が異なるのですよ。

パズルが必ず解かなくてはならないものと、オプショナル(当然難易度が高い)の2種類に分かれており、達成度も単なる達成に加えて、プログラムサイズ制限、実行時間制限の2つの追加課題がある。2つほどウェブで回答探したものがあり、それ以外はなんとか達成しました。

 

今作では、マルチプロセス化したところと命令が強化されたところがウリで、それは面白いからいいのだけれど、その分分かりにくくなった部分がある。マルチプロセス化したときどのタイミングで同期されるのか(別プロセスで、アイテムを置くのとアイテムの有無を判定するのとがあったとき、どのタイミングで判定が起こるのか?など)や、複雑化した命令と単純な命令とで実行時間が異なる(で、それがどのくらい異なるのかが分からない)とか。あと一番困ったのがIF文拡張。AND/ORが使えるのだが、これを混ぜたときにどうも思ったように動かない(優先順位の決め方にちょっとクセがある)。

 

課題について

実行時間のパズルを解いているときに、計算方法がよく分からなくて困った。ステップを入れ替えると早くなったりするのだが、何を計算しているのだろう?

あと、後半の高速化は、結局細かい分岐指定になっていくので面倒だった。
サイズ制限の方はパズルとしては面白かった。ランダム性を使って「うまくいくこともある」プログラムで課題をクリアーするというのは、コーディングとしてはダメだけれどそれはそういうパズルだということで。

 

実は、2問ほど自力で解けずにググったのがあった。

一つは、問題の意味が分からなかった。「スキマなく詰めて2」。

スキマなく詰めて配置してください。

整理した後にパネルとパネルの前後関係に変化がないように整理してください。
ココでいう「前後関係」ですが、下の行より上の行を「前」とし、行がおなじである場合は、より左側の方を「前」とします。

 意味が分からず、正解コードを読んで仕様を理解しました、はい。(あとで思い立って英語版を見てみたら、こっちは理解出来た。これ訳がよろしくない)

 

自力で解けなかったのが「スペース不足」の最小サイズ版。どうにも縮まらなくてこれも回答を見てしまったのだが、呆れたというか感心した解法が書かれていた。これを自分で思いつくにはだいぶ時間がかかったろうな。