Debug- Official Website -

犬土偶日記

海の近くに住みたい

Debug日記の使い方

話題:Webプログラミングとか

2018年10月25日

ロト&ナンバーズ 數字生成器

公開日時: 2018年10月28日 23時11分42秒

晝頃に起きた。ロト7がキャリーオーバー30億になつてゐるらしい。1等が當れば10億だ。締切は金曜18時20分。明日か。1〜37の數字を7個選ぶ籤。1等の當籤率は約1/1000萬。totoBIGの半分以下だ。當る氣がしない。しかし今なら10億だからな。たまには買つてみるのも良いかもしれない。ネットで買ふと當つた場合に自動振込になるので換金の手間が無い。店で買ふとみずほ銀行まで行かねばならん。ここらには無いから名古屋驛の方まで行かねばならん。ネットで買ふのがベストに決まつてゐる。確か昨日か一昨日くらゐから寶籤公式サイトでのネット販賣が開始された。丁度良いタイミングだ。以前からみずほ銀行とか一部のネットバンクで買へたがその銀行の口座を持つてゐないと當然ダメだつた。公式サイトではクレカで買へる。當籤金の振込先の銀行は自分で選べる。俺は樂天銀行や三菱UFJ銀行やジャパンネット銀行の口座があるから、殘高さへあればそこのサービスでネット購入も可能だつたんだが、それらの銀行には金を入れてゐないから使へなかつた。わざわざ入れるのも面倒臭い。なのでネットで買ふならクレカで買へるやつぢやないと難しい。寶籤公式サイトでクレカ購入ができるといふことで、早速登録してみた。ジャンボ寶籤も買へるやうだ。

で、ロト7。自分で數字を7個選ぶのが基本だが、自分で選べない人はクイックピックやランダム選擇ができる。クイックピックは購入後に向うの機械でランダムな數字を7個選擇される。ランダム選擇は購入前にランダムに選擇されて表示され、それで良いと思へば購入するといふタイプ。どちらもランダム性に疑問がある。コンピューターの作る亂數といふのは完全なランダムではない。ランダムに見せ掛けただけの數列だ。複數の數値を選ぶ場合に、一度に全部選ぶと完全なランダムではなくなる。亂數生成アルゴリズムによつて決まつてしまふ。先頭の1個だけランダムで他は1個目に引きずられる。全部の數字まとめて1つの亂數みたいなものだ。セットごとにランダムといふ方が分かりやすいか。同じセット内で數値選擇のたびにタイミングをズラすやうなプログラムを組んでも、プログラム起動のタイミングで結局は全て決まつてしまふ。プログラムの起動自體を複數囘にしても、それをランダムなタイミングにしようとして亂數を使ふと結局初囘の亂數で全て決まつてしまふことになる。だから一度に全部を決めてしまふ仕組みのランダムは信用できない。以前樂天totoのBIGで同じ人が5口完全一致の籤を買はされた事件があつた。確率で考へればほぼあり得ないことだ。不正だイカサマだと騷がれたが、サッカーの試合は販賣締切後に行はれるのでその不正で特定の人間が利益を得ることは不可能。意圖的にやる意味が全く無い。結局それもコンピューターの擬似亂數の仕組みのせゐで起こつたことだ。試合ごとに完全ランダムに籤を生成したとしたら5口完全一致などほぼあり得ない確率になる。だが一發で全試合生成すると試合ごとのランダム性が無くなつてしまふ。見た目はランダムでも同じパターンが發生しやすくなつてしまふ。ロトのクイックピックやランダム選擇もボタンクリック一發で決まるやうだから同じだらう。別にバラけてゐれば大して變らんとも言へるが、ランダムを選んだ人の中で重複する可能性が實際の確率より高くなるかもしれない。同じ組み合はせの籤を買はされる人が密かにたくさんゐるかもしれない疑ひがある。どういふアルゴリズムでランダムにしてゐるかによつても變つて來るが、どういふ仕組みなのか分からないから信用できない。ならば自分で作ればいい。

1個だけならほぼランダムにできる。ならば1個づつ生成すれば良いのだ。プログラム中で一連の流れでやるとダメなので複數囘プログラムを起動する。そのタイミングをプログラムで決めると完全なランダムにはならない。ならば手動で複數囘起動すれば良い。7個の數字を選擇するなら7囘手動で起動すれば良い。人間が起動のボタンをクリックするタイミングは必ずバラける。しかし必要な囘數だけクリックせねばならんから面倒臭い。面倒だからこの手法は商業レベルでは使はれない。まあランダム性のためだから我慢するしか無い。

どうせなら數字選擇式の他の籤にも使へるやうにしよう。といふことで他の籤も調べてみた。といふかロト7すら仕組みを知らなかつたのでそれを調べるついでに全部調べた。ロト7は1〜37を7個で重複不可。ロト6は1〜43を6個で重複不可。ミニロトは1〜35を5個で重複不可。ナンバーズは0〜9で重複可、3は3個、4は4個。ボタンをクリックするたびに新たな數値を取得し、重複不可の籤の場合は過去の數値をチェックして重複したらやり直す。自分用に適當に作つてゐたが、もしかしたら需要があるかもしれないのでDebugサイトに公開できるやうに細かい部分も作つてみた。Webで公開するとなると想定外の値をURL末尾のQUERY改變や改竄FORMなどで送られる可能性がある。やられても大丈夫なやうに作る必要がある。送られて來たものをそのまま表示するやうな感じだとスクリプトを仕込まれたりする。Webに關するセキュリティはプログラミングとは別に學ぶ必要があるので、Web以外でプログラマーをやつてゐた人が知らずにやらかしてしまふことがあるかもしれない。自分專用で自分のPC内だけで使ふやつなら惡意ある攻撃に對する備へなど必要無いが、Webだとどんな奴が何をするか分からんからな。こんなのわざわざ作らなくても探せばスマホアプリとかでいくらでもあるだらうが、まあ良いだらう。DebugのサイトのSpecialのページにあるので必要な人は使つてくれ。

数字選択式宝くじ 数字生成器

早速これを使つて3口買つてみた。10億當れ。

スマホで見ると數値取得ボタンが小さくて押しにくい。指2本で廣げて畫面を擴大しないとやりにくい。畫面は小さいのにPCと同じ感じに表示するからドットが細か過ぎて見えん。スマホでも細かくならないサイトつてどういふ仕組みになつてゐるんだらう。UserAgentを調べて別ページを表示するなんていふ古臭くて面倒な方法を使つてゐるとは思へん。JavaScriptで何か調べてCSSのプロパティを變更する感じなんだらうか。昔はブラウザの設定でJavaScript切るのが普通だつたが、今はJavaScriptをOFFにしたら何もできないサイトばかりなんだらうな。昔はチラチラ動いて鬱陶しいだけのゴミだと思つてゐたがいつの間にか激しく進化してWebでは必須の技術みたいになつてゐる。今時俺ほどJavaScriptを使はない奴も珍しいのではないか。

重大なバグに氣附いた。ロト系は問題無いが、ナンバーズで最初に0を引いた時に問題が起こることが發覺した。次の番號を取得すると最初の0が上書きされて消えてしまふ。つまり何億囘やつても頭が0の數字列は取得されないことになる。何故そんなことになつたのかといふと、Perlでは0がFALSEと同じ扱ひになることがあるからだ。取得した番號は@numbersといふ配列に格納する。後で新しい數字が過去に取得されてゐないか調べる處理をするために配列にした方がやりやすいから。過去に引いた番號を次囘以降に引き繼ぐためHTMLのFORMのhiddenフィールドに過去の番號をコンマで區切つた文字列が書かれてゐる。その文字列はCGI起動時に$numberに格納される。起動時にこのhiddenフィールドから送信された$numberの値があればそれをコンマで分割して@numbersに格納する。配列のままでhiddenフィールドに書き出すとをかしなことになるのでコンマ區切りの文字列に變換する。で、「起動時にこのhiddenフィールドから送信された$numberの値があれば」の部分で「if($number)」といふ條件式をつけてゐた。$numberが眞ならばといふ條件。つまり$numberが存在してゐればといふ意味。初囘が0だつた場合は$numberの値が0になる。これは數値のつもりでやつてゐたのだが、この條件だとFALSEの扱ひになる。自分がロト7を買ふために作つてゐたので、1〜37をランダムで生成するといふことしか頭に無かつた。ナンバーズは0も含むといふところは初期設定で變數に書いてゐたし0を生成することは當然知つてゐたはずだが、初囘に0を引いた場合の條件判斷まで頭が囘らなかつた。Perlでは文脈で型が緩く判斷される。眞僞の判斷では0や空文字が僞の扱ひになる。0を眞として扱ふためにはboolean型ではなくint型やstring型だと明示しないとダメだといふことか。Perlにはそもそもboolean型とかint型といふのも無いかもしれない。Perlで型のキャストとかやつたことが無い。普段全然意識してないが、かうして見ると他の言語と隨分違ふな。結局、「if($number ne "")」にした。$numberが空文字列でない場合といふ條件。これで0でも僞ではなく文字の0として扱はれるから眞になる。試しに1桁目で0が出るまで試してみた。0〜9の10種類しか無いのにアホみたいに引けなくてイライラした。チェックするだけなら0〜1に範圍變更すれば良かつたのだが、すぐ出るだらうと甘くみた。確率怖い。ちなみに0しか出ないやうにすると0以外が出た時の擧動を見ることができないので最小でも0〜1の範圍にして實驗すべき。無事に初囘0でもOKになつた。ついでに他の部分も修正。樂天とAmazonの廣告を貼つてゐたが、2つあるとウザいので樂天の方を消した。樂天は犬土偶日記に貼つてあるしな。かなり長い間Amazonからの收益がゼロだし。それと表示される數字の文字サイズを少し大きくして數字と數字の間の隙間も半角スペースから全角スペースに變更した。少し見やすくなつただらう。

(1.2)Anniversary song、fake、MIRAI、turning、トウダイモトクラシー、pain、イカロス、波、ELECTRIC EYE、ながい愛、ギリギリchop、ファミレスボンバー、今夜月の見える丘に、煌めく人、OCEAN。

ギター練習54分、腕立て伏せ200囘、讀書42ページ。

話題:Webプログラミングとか

Info.
公開日時2018年10月28日 23時11分42秒
本文文字数4399文字 (タグ込み)
URLhttps://orca.xii.jp/debug/diary/diary.cgi?id=dogoo;date=20181025
RSS1.0https://orca.xii.jp/info/diary-dogoo.rdf
Comments

コメントはありません。

コメント投稿フォーム
文字色              
  • 名前を省略すると「名無しDebugger」になります。
  • メールアドレスの入力は任意です。
  • 海外からのコメントスパム対策のため、表示された漢字の読みを必ず入力してください。
  • 本文は必須項目です。投稿する場合は必ず記入してください。タグは使えません。
  • 改行が1つ入力された場合は強制改行として処理されますが、2つ以上連続する改行は段落の終了として処理されます。
  • 本文の行頭に「>」のある文は引用としてマークします。引用でない部分の冒頭に「>」は付けないでください。
  • コメントの削除は管理者若しくは日記執筆者しかできません。書き込む時は注意しましょう。
  • 全部記入が済んだら投稿ボタンを押す前に一度読み直して推敲しましょう。