アセンブラパズル

 歪んだ絵をさっさと直して仕上げるとか色々やるべきことはあるんですが。
 まぁようやく節目に辿り着いて放心状態からの障害対応みたいなところで結局心の安まる時がなかなか見出せておりません。
 強いて言うなれば、「やっぱり人は信用しちゃいけねえな」という語弊のありまくる表現を言い換えれば、「如何に担当者のポカをきちんと洗い出せるか」が今後の課題ということになりますか。
 ただ、大掛かりなプロジェクト管理体制を作る余裕があるのならまだしも、こちとら1から100まで面倒見てる余裕なんてないし、そこまで面倒見なきゃならんのならバイトで十分なんだよと言いたい本音はありつつも。
 まぁ一番害も少ないところで言えば、ド素人並みのゴリ押しロジックコードにブチ切れ金剛、ってなところでしょうか。

 そんな訳で本日のお題。

 我が敬愛するSpaceChemのZachtronics製作の新作が出たというので見てみました。
 > TIS-100

 こ、これは、、、、。
 手っ取り早く言えばアセンブラ。というかそのまんま。
 前作から「プログラマの思考が求められる」等と言われてはいましたが、よもや「プログラミングそのもの」を出してこようとは。
 無論、ただのアセンブラなら既存のCPUでコーディングすればいい訳で、架空の機械を仕立ててちょっと特殊ルールのアセンブラを構築してみたので、それで色々な処理のロジックを考えてみましょうねと言ったところ。うん、プログラミングそのものですね(笑)。(昔の機械をフリーマーケットで入手したとかいう設定だったと思う。こういう設定には心くすぐられる。)

 特徴としては、非常に単機能な演算ノードを幾つも組み合わせて並列処理を行う構造。
 レジスタはACC一個と保存専用のBAKしかなく、各ノードの命令数(プログラムの長さ)はたった15。
 入力値の条件分岐も、数値の加減算も、ループのカウントを行うのも、何をするにもACCしかない。なので単純な繰り返し処理を組むところから自分でコーディングのセオリーを考えて行かないといけない。加えて長々と処理を記述している余裕もないので、効率を求めるなり可能であれば分散するなど考えていく必要がある。
 単にアセンブラ知ってりゃ書けてしまう、というのでは意味がないからね。「こうすりゃいいのにどうすんのよ」という、パズルゲームとしての基本的な悩ませ方は押さえていると思う。

 とはいえ、本当に「ただのプログラミング」なので(大笑)、ぶっちゃけこれを人に勧めたらパーフェクトに基地外扱いされる自信はあります。友人の言葉を借りれば、「数学者がフーリエ変換おもしろいよと言うようなもの」。


 以下、具体例として、
img
(もちろん、取り敢えずクリアしたレベルのまだ煮詰めてない物ですが)
 入力された数字列を、0区切りで、それまでの個数と合計値を計算して出力する、という例題。
 単に0が出るまで加算してカウントするだけなんですが、そこは先のACC1個+BAKのみの問題がありまして。入力値、合計値、カウント、の3つを保持する事ができないので、手っ取り早く加算とカウントでそれぞれを並列処理。
 後はここにZachtronics社お馴染み?としてCycles=処理時間や、Nodes=ノード数、Instructions=命令数、の各評価項目で、高速化したり、効率を犠牲にしてノード数を削ってみたりの突き詰め遊び。今回はちゃんと複数セーブできるよ!(笑)

 そんな訳で、今回本当に分かり易いまでのそのまんまプログラミングパズルなので、ある意味プログラミングのロジックの鍛錬にはいいんじゃないかな、とかふと思ったりするんですけどね。いっそ技術系大学生の教材にしてみては如何でしょうか(ぉ)。

 いやほんと最初の話に戻りますが、ぶっちゃけ「これを最低限解ける人と仕事したい(仕事振りたい)」とちょっと思いましたとさ。やるやらないから出来る出来ないまで、そもそも真面目に取り組まないと解けないくらいの制限はあるので。
 ま、言うほど自分も得意でも何でもないぶっちゃけ凡族の一人なんですが。これくらいは出来る技術者でありたいよね、と思いたく。