数学ゴルフ 15両

この前のやつから。問題はhttp://www.jmuk.org/diary/2007/09/10/2に載ってます。答えは続きを読むでどうぞ。

0z xb y(xz 0a b(ab +a yz))

で、書くためのコストが13両、変数のコストが2両で合計15両。
適当に説明すると

  • 0a b(ab +a) でデクリメント(b = b - 1)。ただし b = 0 ならそのまま
  • xb y(0a b(ab +a)) で引き算(b = x - y)。ただし x < y なら b = 0
  • x < y なら最後の y によるループのときに b = 0 なので、代入を埋め込んで xb y(xz 0a b(ab +a yz))
  • y = 0 のときに上手くいかないので 0z を加えて完成

でもhttp://d.hatena.ne.jp/shinichiro_h/20070911#1189441524の18両は気づかなかったなぁ。