>「数独の解の組合せは、6670903752021072936960通り」(『トリビアの泉』のアレの口調でお読みください) from
>http://www.shef.ac.uk/~pm1afj/sudoku/
>
>
>数値がデカすぎて桁がさっぱりわかりませんが、おおよそ66垓7千京通りくらいだとお考えください。これがどれくらいかというと、1秒間に100題ずつ(むろん重複なく)コンスタントに列挙したとしても、列挙しきるまで2兆年以上かかる見通しです。多すぎ。
>
>ただ、本質的に異なる解の数は(つまり回転して同じだったり鏡像対象で同じだったり、数値を入れ替えたら同じになっちゃうようなのを省くと)、たったの5472730538≒54億7千2百万通りくらいしかないらしい from
>http://www.shef.ac.uk/~pm1afj/sudoku/sudgroup.html
>。この場合は、同じ計算で列挙しきるのに1年ちょっとくらいしかかからない。
>
>さて、どういうアルゴリズムなのか、 PDF を読んでみますかね。
>
>いろんなところで通りすがりさんがかなり質の高い発言をしていたりするのをこのところ目にするのだが、実は同一人物だったりするんじゃないだろうか。
>
>当然、歴とした謂れのある単語なのだろうなあとおもってちと検索すると、 ANSI Common Lisp に言及があるらしい。てことは和訳があるだろう。日本語版は……手元にはないなあ。
>
>いずれにせよ、 Lisp とかで言及があるわけか。
>
>ふと HaskellDB ではどうやって SQL を生成しているかということを調べてみた。
>
>その詳細は面倒だから省くが(コードを見ると書いてあるし)、
>前に純粋関数型言語雑記帳で言及していた
> 「開始位置を選べない」問題を解決してみようと試みて、 OFFSET を指定できるようにした。→
>パッチ
>
>
>しかし、パッチでちょっと試してみたところ syntax error に遭遇したので、たぶんまだ修正箇所がある筈だけど、今日はもう試す気が起きないのでとりあえず公開しておく。
>
>不思議なのは、 toSql して ppSql して吐かれた SQL 文を、そのまま通常の DB のクライアントプログラム(実際には sqlite3 で試した)のプロンプトにべろべろっと貼り付けると、それはキチンと動作するということ。つまり、実際に DB エンジン側ではエラーにはならないものを事前に掴まえて構文エラーにしている輩がいる?ということなのかもしれない。あるいはコマンド行上での作業とライブラリの利用方式に違いがあるか、 HSQL の制約か。この辺が未調査。
>
>group by については、 project あたりを使う場合に起こるみたいだけど、これも未調査。
>
>(追記): いろいろ試してみたが、ドライバを変えるとエラーメッセージが変わってくるし、HSQL 経由で同じ SQL を食わせてもやっぱりユーザエラーになるので、これはやっぱり単純に構文が間違いだということなのだろう。ううーん、貼り付けるとやっぱり動作するのだが、どの辺が誤りなんだ? SQLは詳しくないのでわかりまへん。
>
>SQLite は型がない(というかみんな文字列としても数値としても扱えてしまう)というキモい仕様になっているんですが、これってひょっとして Tcl から生まれたプロジェクトだからということに由来するのだろうか?
>
>ということに唐突に思い至ったけど本当かどうかはわかりません。
>
>あーとちなみに、型がないっていうのはどういうことかというと、次のようなことが出来るということです。
>
>sqlite> create table test (x integer, y text);
sqlite> insert into test values (10, 'xyz');
sqlite> insert into test values ('xyz', 10);
sqlite> select * from test;
10|xyz
xyz|10
sqlite> select * from test where x > 1;
10|xyz
xyz|10
sqlite> select * from test where x > 10;
xyz|10
sqlite> select * from test where y > 10;
10|xyz
sqlite> select x + 1, y + 1 from test;
11|1
1|11
>
>これは SQLite.org では Manifest Typing と呼ばれていて、特徴の一つとして喧伝されているので SQLite.org の中の人は利点のひとつだと考えているのではないかと思うのですが、正直なところ僕にはキモいとしか思えません。
>
>zero-configuration で serverless なのは、個人用途には非常に魅力的だと思うんですが、正直コレさえなきゃなあと思ってるんですが……(あとデータタイプとしてやっぱ日付とか時間に相当するものも欲しいよなー)。
>
>ところで SQLite ってパブリック・ドメインだったのか。知らなかった。
>
>ざっくりと興味のあるとこだけ読んだ。
>
>いやしかし、 Tcl はすごいですね。ブロックも全体が文字列というのはさすがにぶっとんだ。
>
>でもやっぱり、青木さんの連載が楽しいです。非常に参考になる。
>
>ところで ActionMailer ってよく ActiveMailer と間違えて検索してしばらく思うようにヒットしなくてようやく気付く、っていうパターンが多いんですが僕だけでしょうか。
>
>rails まわりのコンポーネントは、
>
>
>Action系 → ActionController、ActionMailer、ActionView、ActionWebService
>
>
>
>Active系 → ActiveRecord、ActiveSupport
>
>
>
>
>があって正直何がなんだかわけがわからなくなることがあるのです。物覚えが悪くてすんません。
>
>ちょっと使ってみようとしたのだけど挫折中。難しい。
>
>何が難しいかというとドキュメント間の混乱が。 hawiki 上のチュートリアル、 sf.net 上の Getting Started 文書、 sf.net 上の API ドキュメント、配布ファイル内の test スクリプト、それぞれが相互に矛盾していてややっこしいことこの上ない。
>
>また、 ghc-6.2.x のパッケージシステムと Cabal の端境期にあるようで、 cvs 版でもまだまだなかなかの感。 GenericConnect がないのでたいていのテストは動かないようだ。
>
>あと、 SQLite3 を動かすのに四苦八苦してます。 HSQL の方は対応しているので、ちょぼちょぼ直すだけなんですがー。
>
>メモ。型インスタンスのオーバラップが起こるので -fallow-overlapping-instances フラグを立てないといけないらしい。
>
>うがー SQLite3 は型情報が取れなくて、とりあえず全てのカラムが String 扱いかよ。型推論の意味がなさすぎるよ。
>
>ていうかなんでおれはこんなに SQLite3 に固執していますか。
>
>ふと「全データをさらって順番に処理していく」ときにどうすればいいかということが気になった。 find_all でも良いんだけど、そうすると1つの配列にメンバが全部入っちゃうから、データ数が膨大なときは嬉しくない。なので、
>
>(1..User.count).each { |i| u = User.find(i) ..... }
>
>としてみた。 find がブロックを取れれば楽なのだけど。というかそれが Rubyish という気がするけれど、今のところ出来ないようだ。
>