「あなくつ」のおもちゃばこ

Blog

BINGOもどきのNxNの行列で同じ組み合わせでビンゴにならない順列

同じ数字の組み合わせでBINGOになる行列を排除したい

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

順列を求めるJavaScript

順列はある集合から同じ要素を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

重複順列を求めるJavaScript

順列はある集合から同じ要素を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です。

つかいかた

  1. 「URL」テキストボックスに使いたい診断メーカーのURLを入力します(デフォルトで「冬のボーナスが出ったー」のURLが入ってます)
  2. 「NAME」テキストボックスに診断したい名前を入力します
  3. 「Execute」ボタンをクリックします
  4. 結果が別ウィンドウで表示されます
  5. 途中で停止・再開したい場合は「Pause」ボタンをクリックします

フォーム

URL
NAME
  • いちおう他のサイトに対してポストしないようにURLのチェックはしてます
  • DoSにならないように1回のポストは5秒おきです
  • [2]の[ユーザー名の文字数]乗回のポストが発生するため、不要な結果(ウィンドウ)は次々閉じないと、多分ブラウザがクラッシュします。

ソースコードを見たい方という奇特な方は続きからどうぞ。

大人げない診断メーカーの使い方」の続きを読む

タグ : JavaScript,Twitter,診断メーカー

2010/12/11 00:47:50 | Trackbacks (0) | Comments (0) | Pastime

FreePascalがMySQLでLIMITするとき

MySQLはSELECT文にLIMITが入っていればどんな時も結果件数を制御できた気がするんだが。例えばこんなSQL文は実行できるはず。

SELECT user_name WHERE user LIMIT 5

この文をphpMyAdminから発行してもちゃんと結果が返ってくるのに、FreePascalからデータベースドライバ経由でこれを発行しても結果が返ってこない。ってかエラーをRaisすらしない。こういう場合はどうするか。

SELECT user_name WHERE user ORDER BY user_id LIMIT 5

ORDER BY句をつけなければいけないらしい。まぁ普通はLIMITを使うときは何らか並べ替えがあって、それを一定数取り出したいときだから特に問題になることでもない。しかしながら、並び順はなんでもいいから(普通はMySQLのデータ格納順)、とりあえず一定数取り出したいなんて時はそれが使えないことになる。

タグ : FreePascal,LIMIT,MySQL

2009/10/22 17:38:51 | Trackbacks (0) | Comments (0) | Technology

ExtPascalでオブジェクトの属性を変更するとき

ずっと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

  • Top
  • Software
  • Blog
  • Laboratory
  • Profile
Search
Feeds of Blog
Archives

Copyright © 2004-2024 Ana-Kutsu All Rights Reserved.