hirax.net::inside out::2010年05月10日

最新記事(inside out)へ  |   年と月を指定して記事を読む(クリック!)

2010年4月 を読む << 2010年5月 を読む >> 2010年6月 を読む

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脳をまだ持ち合わせていない人にとっては、少しとっつきにくいところがあります。

 一体、どういう記述の仕方であれば、自分にとって「わかりやすく・書きやすい」のだろうか?と、少し、頭を捻っているところです。

初心者向け「Mathematicaで書かれた数独ソルバ」