数学セミナーの code golf 問題
前に書いてたやつね。竹内郁雄先生が『数学セミナー』誌上の「エレガントな解答をもとむ」で出題した問題。どうでもいいけど解答は提出しわすれてしまった。B5の紙に印刷しなきゃいかん、という時点で相当に萎えてしまった。
さて、この問題ではa-zという26種類の変数があり、各変数には初期でそれぞれ非負整数が入っている。また以下のような命令が用意されていて、変数の値を操作できる。
問題は「xとyのうち小さい方の値をzにコピーする」プログラムを書くことであるが、問題にはまだ続きがある。プログラムにはコストが設定されているのだ。上の3つは1両、下の2つは3両というコストがかかる。これはプログラムのコストなので、実行回数とは関係ない。 yz x(+z) のコストはコピーが1回、インクリメントが1回、繰り返しが1回出現しているからトータルコストは5両になる。
加えて、プログラムの実行終了後に目的となる z 以外に値の変化している変数が1つあるごとに1両、コストが増える。また、 x と y の値はもとの値のままでなければならない。
さあどうしますか、という問題である。
ちなみにわたしの解答は xvyw0zxcc[0cvawba[b[+c+z0b]0a]0a0bv(b[0b+a]+b)av0a0bw(b[0b+a]+b)aw]で、これは49両のコスト。