sogayaのプログラミング

さらしの集計、トリシーカー、ビンゴマスク、ロトサマリー

FLTK版のRannu

Rannuは、乱数表を作成します。乱数は、二桁の十進数です。最小値、最大値を設定できます(たとえば、1から37まで)。空白ではなくコンマを挿入してCSVを作成するには、FileメニューからCSVを選択してください。rannu.csvが作成されます。Rannuを設定するために、manage.txtという管理ファイルが用意されています。Manageウィンドウでは、乱数表のサイズとして、KB(キロバイト)のテキストボックスにrannu.txtのサイズを入力してください。右詰(みぎづめ)で表示するには、KBをクリックしてください。乱数表の行数を指定できます。行数ではなくキロバイトでファイルのサイズを決定したいことを明示するには、行数として2147483647を指定してください。rannu.txtの行数がこうした巨大な数に達する前に、Rannuは、指定のキロバイトで書き出しを終了します。Rannuは、Mersenne Twister (MT, メルセンヌツイスタ)およびxorshiftの擬似乱数発生器(PRNG)を実装しています。SettingメニューからMTかxorshiftのいずれか選択してください。PRNGのシード(種)として、1から999999までの整数を想定しています。seedのテキストボックスにシードを入力してください。利用者が0を入力した場合、Rannuは、自動的に年月日時分秒に基づいてシードを決定します。PRNGの設定として、シードだけではなくアイドリングも設定できます。たとえば、利用者がアイドリング回数を400に設定した場合、Rannuは、シードに基づいて連続して発生した400個の乱数を無視します。401回目以降をrannu.txtに書き出します。SettingメニューからGroupingを選択した場合、Rannuは、MTから生成された乱数を6ビットずつ利用して、0から63まで発生します。Rannuは、cou99コマンドの機能を内蔵しており、二桁の数字をカウントして表を作成できます。算術平均および分散を計算できます。平均を計算してから、分散を計算するのではなく、期待値を利用して分散を計算します。たとえば、81から90まで、でたらめに書き出すならば、期待値は、85.5です。Rannuは、毎秒1回の頻度でmanage.txtの時刻を取得します。前回の時刻と異なる場合、manage.txtは、更新された可能性があるため、Rannuは、自動的にmanage.txtを読み込みます。Windows 2000のパソコンにDev-C++ 4.9.9.2をインストールしました。さらに、FLTK 1.3.0のDevpakをインストールしました(fltk-130-1gp.DevPakをPackman.exeにトラッグしてドロップしました)。Dev-C++IDERannuを構築しました。FLTKGUIを提供します。Rannuは、GUIを提供する32ビットアプリケーションです。Windows 2000, Windows XP, Windows 7, Windows 10で作動します。半角の¥ではなくバックスラッシュ(右下がりの斜線)でパス名の区切りが表示されます(日本語のパス名をサポートしていない?)。ステータスバーに表示された文字列をクリップボードにコピーするには、SettingメニューからCopyを選択してください。コマンドプロンプトにコマンドおよびパラメータを入力して起動できます。パラメータが無い場合、Rannuは、manage.txtに従います。詳細は、PDFを参照してください。

f:id:sogaya:20170714234436p:plain

Swing版のGize

Gizeは、ビンゴ5集計ソフトウェアです。Swingは、JavaGUIライブラリです。Javaを実行する環境でGizeを利用できます。doubleClick.exeが添付されており、WindowsエクスプローラでdoubleClickを表示してダブルクリックすることで、Gizeのウィンドウを生成できます。Gizeのユーザーズガイドを添付しました。Gizeのユーザーズガイドは、3行3列ではなく04 08 15 /19 21 /28 34 40 //のように1行で表現されたビンゴ5を1行のビンゴ5と表現します。Gizeは、1行のビンゴ5を想定しています。3行3列のビンゴ5を統合して、1行のビンゴ5を生成する機能があります。1-2-3のライン、4-6のライン、7-8-9のラインの三つ組を斜線で区切って1行で表現します。Gizeの管理ファイルは、manage.txtです。manage.txtの第12行が0ではない場合、Gizeは、自動的に3行3列の探知を開始します。少なくともひとつの3行3列を検出した場合、Gizeは、自動的に3行3列を1行のビンゴ5にして、who.txtを上書きします。2個のCSVファイルを作成します。一方は、レス番号の順であり、もう一方は、成立したラインの本数に関して降順に(逆順に)並べ替えられています。これにより、高額当せんを容易に発見できます。Matrixページに3行3列のビンゴ5を左右に表示するには、まずTripletページの右上にあるテキストボックスに1行のビンゴ5を入力してください。次に、FileメニューからMatrixを選択してください。Swing版Gizeのzipファイル名は、GizeSwing.zipです。PDF.htmlをGizeSwing.zipに置換すればダウンロードできます。

http://sogaya.web.fc2.com/PDF.html

f:id:sogaya:20170523235847p:plain

gizeとannuy

gizeコマンドおよびannuyコマンドをダウンロードできます。annuyコマンドは、ビンゴ5を高速に選択してannuy.txtに書き出します。annuy.txtの各行は、ビンゴ5を1行で表現します。斜線を改行文字に置換すれば、3行3列に見えます。gizeコマンドは、ビンゴ5の当せん者を発見して、購入数字、成立したライン、当せん者名を書き出します。gizeコマンドは、1行のビンゴ5を想定しています。くじ券と同様に、3行3列のビンゴ5が2つ横に並べられている場合、gizeコマンドは、左上のマス(マス1号)が01, 02, 03, 04, 05のいずれかであることを確認して、3行3列を統合して、1行のビンゴ5を生成する機能があります。この機能を利用する前に、gizeコマンドは、全角数字を半角数字に修正します。ロト7は、一致したボールの個数で判定します。ロト7と異なり、ビンゴ5は、途切れないラインの本数で判定します。ビンゴ5の判定は、そのぶん複雑になりますが、ビット演算で容易になります。どのラインが成立したかわかるウェブページを作成しました! annuyコマンドは、Watcomで構築されており、Cのソースコードを添付しました。mt19937ar.hおよびmt19937ar.c(メルセンヌツイスタ、MT)を使用している32ビットアプリケーションです。gizeコマンドは、GCCまたはBorland無料コマンドラインコンパイラBorland C++ 5.5.1 for Win32)で構築できます。C++ソースコードを添付しました。バグ、間違いがあるかもしれません。改良して有用なソフトウェアにしたいと思います。gize.pdf

f:id:sogaya:20170406235103p:plain

DFL版のviewXBM

きょう初めてDFL版のGUIソフトウェアをアップロードしました! DFLは、D言語GUIライブラリです。ZIPのファイル名は、viewXBM_DFL.zipです。C, D, DFLが利用できる環境で、viewXBMを構築しました。Windows 2000のパソコン(Pentium 4プロセッサ)に、Digital Mars D Compiler v1.030をインストールして、さらにD Forms Library Version 0.9.8 Beta (DFL)をインストールしました。Digital Mars Compiler Version 8.42nもインストールされています。ソースコードおよびdflvi.batを添付しました。viewXBM.resのリソースファイルを作成するには、たとえば、rccvi.batを使用します。viewXBM.exeおよびmanage.txtが同一のフォルダにあります。XBMは、UNIXのモノクロ画像形式です。各点の真の色彩は、黒ですが、濃紺の矩形(くけい)で表現されます。manage.txtの第2行に4を記入して、第3行に4を記入した場合、各点として、正方形は、4の幅、4の高さで表示されます。プログラミング言語としてDを使用したため、UTF-8文字コードを想定しています。C版のsjisUTF8を添付しました。sjisUTF8コマンドは、シフトJISのテキストファイルをUTF-8のテキストファイルに変換します。DFL版のviewXBMは、Win32API版のviewXBMより遅い。viewXBM.pdf

f:id:sogaya:20170316222328j:plain

Swing版のViewXbm

XBMは、X11Bitmapであり、UNIXのモノクロ画像形式です。XBMによる画像の幅は、8の倍数です。XBMの閲覧および編集は、テキストエディタで可能です。ただし、十六進数の配列であり、わかりにくい。Javaを実行できる環境でViewXbmを利用します。Swingは、JavaGUIライブラリです。ViewXbmは、点を矩形(くけい)で表示します。矩形としては、正方形、長方形があります。矩形の一辺として、10から16程度までの幅、高さを想定しています。Swing版のViewXbmは、JDK 1.3.1で構築されています。JDK 1.8.0でも構築できます。ViewXbmは、XBMを読み込んで、画像のランレングス符号化を行って、kopic.kunを作成できます。kopic.xbmは、テキストファイルですが、kopic.kunは、バイナリファイルです。起動支援ソフトウェアとして、doubleClick.exeがViewXbmに添付されており、Windowsの場合、エクスプローラでdoubleClickを表示してダブルクリックすることで、kopic.xbmの各点は、10×10の正方形として描画されます。自動的にコマンドプロンプトを最小化するには、doubleClick.txtの第1行に[Start]を記述して、doubleClick.txtの第3行に1を記入してください。まず中央に配置されて、次に最小化されます。Windows 2000, Windows 7で確認しました(Windows 10では、そうならなかった)。ViewXbm.pdf

Java版のKopic

Java版のKopicを試すことができます! XBMに基づくCSVにしたがってKopicで20480行を出力して、自作のツールで重複を意識しないでカウントして、市販のソフトウェアでグラフを作成しました。添付のviewXBMは、Win32APIを利用しています。viewXBMでXBMを表示しました。XBMは、左側の白い領域の幅が重みを表現します。グラフは、高さがボールの個数を表現します。XBMの重みがグラフの高さに反映していることがわかります。テスト結果として、こうしたグラフが実現するように、仕様を変更しました。以前の仕様は、乱数表から乱数を読み込んで、重みにしたがって出力しましたが、標本の数を増加しても、わかりやすいグラフが実現しません。新しい仕様として、乱数表から乱数を読み込む発想を活かすために多対一の対応を表現する変換表を用意して、乱数から数に変換するモードを追加しました(-m)。重みにしたがって出力するモードは、もはや乱数表から読み込まないで、内部で乱数を発生します。1から37までの乱数ではなく、0から4294967295までの乱数を利用するため、精度が向上しました。継承した仕様として、乱数表から乱数を順に読み込んで、7個を組み合わせて出力するモードもあります(-w-)。

f:id:sogaya:20161207153054j:plain

 

FLTK版のロト7高速選択ソフトウェアkopic

kopicは、ロト7高速選択ソフトウェアです。CSVにしたがって、kopicは、重みを付与して、ロト7の組合せを出力できます。FLTK版のkopicは、XBMからCSVを作成できます。XBMは、X11 Bitmapであり、UNIXのモノクロ画像形式です。FLTKは、GUIライブラリです。FLTK版のkopicは、XBMの閲覧および編集が可能です。海の物とも山の物ともつかない状況から、sogayaが独自にkopicを考案しました。編集の各操作には、元に戻す機能(Undo, アンドゥー)があります。FLTK版のkopicは、画像のランレングス符号化が可能です。乱数発生器として、mt19937arが乱数表に使用されています。mt19937arは、32ビットアプリケーションのライブラリとしてCで実装されたメルセンヌツイスタ(MT)です。kopicの詳細な説明は、ぜひPDFを参照してください。kopic.pdf