NxNの行列があるとします。行列の要素には0からNxN-1までの数字が重複しないようにランダムに配置されています。BINGOのように、0からNxN-1までの数字を順番にランダムに選択し、選択した数字がタテ・ヨコ・ナナメいずれかで揃う場合をBINGOとします。このとき要素が異なる配置の行列でありながら、同じ数字の組み合わせでBINGOになる行列を排除したい。
そのようなBINGOで重複した順列を排除した集合を求めます。
入力は「重複順列を求めるJavaScript」や「順列を求めるJavaScript」で求めたような順列を入力します。要素の順番は右図のように並んでいるものと考えます。
結果はテキストフィールドにタブ文字で要素の区切り、改行で列の区切りとして出力されます。Excelにコピペしてください。
これで重複排除できているか自信がないです。テストあまりしていません。
「BINGOもどきのNxNの行列で同じ組み合わせでビンゴにならない順列」の続きを読む
タグ : BINGO,JavaScript,ビンゴ
2014/04/22 05:40:47 | Trackbacks (0) | Comments (0) | Technology
順列はある集合から同じ要素を2個以上使わないという条件で要素を列挙した列です。例えば、0から2までの整数[0, 1, 2]の中から3個とる順列は、
[0, 1, 2], [0, 2, 1], [1, 0, 2], [1, 2, 0], [2, 0, 1], [2, 1, 0]
の6個です。
下記のプログラムで0からN-1までの整数からM個とる順列を求めます。結果はテキストフィールドにタブ文字で要素の区切り、改行で列の区切りとして出力されます。Excelにコピペしてください。
「順列を求めるJavaScript」の続きを読む
タグ : JavaScript,順列
2014/04/21 05:21:31 | Trackbacks (0) | Comments (0) | Technology
順列はある集合から同じ要素を2個以上使わないという条件で要素を列挙した列です。「同じ要素を2個以上使わない」という条件をつけない順列を重複順列と言います。例えば、0から2までの整数[0, 1, 2]の中から2個とる重複順列は、
[0, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2], [2, 0], [2, 1], [2, 2]
の9個です。
下記のプログラムで0からN-1までの整数からM個とる重複順列を求めます。結果はテキストフィールドにタブ文字で要素の区切り、改行で列の区切りとして出力されます。Excelにコピペしてください。
結果はN^M個になるので、やり過ぎるとブラウザ固まります。また、計算途中でJavaScriptのN進数変換を使うためNは36までに制限されます。
「重複順列を求めるJavaScript」の続きを読む
タグ : JavaScript,重複順列,順列
2014/04/21 03:15:07 | Trackbacks (0) | Comments (0) | Technology
Twitterで良くネタになっている診断メーカーというウェブサービスがあります。これは適当な名前で占いをするようなものです。
使っていて気がついたのですが、結果が日替わりであるとともに、名前の大文字小文字を区別するようですね。ということは大文字小文字を変えてみて結果がどう変わるか気になるところです。というか、大文字小文字を切り替えて無理やり良い(と思われる)結果を引き出したくなります。
そこで作ってみました。適当な名前を入力すると、その名前の大文字小文字のすべてのパターンを切り替えて診断メーカーにポストするJavaScriptです。
ソースコードを見たい方という奇特な方は続きからどうぞ。
「大人げない診断メーカーの使い方」の続きを読む
タグ : JavaScript,Twitter,診断メーカー
2010/12/11 00:47:50 | Trackbacks (0) | Comments (0) | Pastime
MySQLはSELECT文にLIMITが入っていればどんな時も結果件数を制御できた気がするんだが。例えばこんなSQL文は実行できるはず。
この文をphpMyAdminから発行してもちゃんと結果が返ってくるのに、FreePascalからデータベースドライバ経由でこれを発行しても結果が返ってこない。ってかエラーをRaisすらしない。こういう場合はどうするか。
ORDER BY句をつけなければいけないらしい。まぁ普通はLIMITを使うときは何らか並べ替えがあって、それを一定数取り出したいときだから特に問題になることでもない。しかしながら、並び順はなんでもいいから(普通はMySQLのデータ格納順)、とりあえず一定数取り出したいなんて時はそれが使えないことになる。
タグ : FreePascal,LIMIT,MySQL
2009/10/22 17:38:51 | Trackbacks (0) | Comments (0) | Technology
ずっと2週間くらい悩まされてきたことがやっと分かりましたよ。
ExtPascal内で動的にオブジェクトの属性を設定するときは、プロパティを参照するのではなく、メソッドで設定を行わなければならない。例えばボタンの有効状態を無効にしたければ、Button.Disabled := Trueではなく、Button.disable()を呼ばなければならないということです。
まぁよく考えてみれば、純粋にJavaScriptでExtJSを使うときもメソッド経由にしないと状態を設定することができないから当然と言えば当然なんです。Delphiのようにプロパティが暗黙にセッター・ゲッター関数になったりしていないから、動的に属性を変更するときはメソッドを呼ばなければいけないんですね。
基本的にExtPascalでは生成したオブジェクトのJavaScript内での名前しか覚えていないようです。そのためExtPascal内でpublicな変数でも、直接属性を設定するとアクセスエラーになるようです。
それにしてもコードでコンポーネントを配置していくのは面倒だなぁ。DelphiのフォームビルダがどれだけUIを設計する作業を簡便化しているかよく実感できる。
タグ : Delphi,ExtJS,ExtPascal,JavaScript
2009/10/20 20:48:24 | Trackbacks (0) | Comments (0) | Technology