2010-05-10[n年前へ]
■初心者向け「Mathematicaで書かれた数独ソルバ」
「Rubyで数独ソルバを書いてみる」では、Mathematicaで書かれた数独ソルバを前に、そのコードをRubyで写経してみました。
MathematicaのコードをRubyに翻訳しようとするときに、一番最初は、Mathematicaでよく使われる「短い書き方」からでは、(私の単純で小さなあたまでは)動作の手順を見通しづらかったので、まずはじめにしたことはMathematicaのコードを冗長な記法で打ち直すことでした。私が写経がてら打ち直した、(自分向けの)冗長なMathematicaのコードが下のようになります。
"deepen"関数は上記の"冗長"コードではずいぶんと長くなっていますが、オリジナルのコードでは下記のように実に簡潔です。
deepen[x_] := With[{pos = First@Position[x, 0]}, Or @@ Map[search, (ReplacePart[x, pos -> #] & /@ candidates[x, pos])]]このオリジナル版のコードは、というよりMathematicaで書く効率的な高度は、Mathematicaに慣れている人であれば、とても単純明快なコードですが、私のようなMathematica脳をまだ持ち合わせていない人にとっては、少しとっつきにくいところがあります。
一体、どういう記述の仕方であれば、自分にとって「わかりやすく・書きやすい」のだろうか?と、少し、頭を捻っているところです。