2008年8月10日日曜日

Google Sites で Google マップを埋め込む

Google Sites ではガジェットをページに埋め込むことができる。

  1. edit page ボタンを押す
  2. Insert > More… を選択

「公式 Google ガジェット」として、「地図」があったので、Google マップを表示させるために利用しようと思ったが、設定しても地図が表示されなかった。 (+_+)

Google Sites Help Group で map について調べたら、Putting Google map on the site via api + .js - How-to for End Users でマップを埋め込んでいる方がいた。

 

方法

以下、Inserting custom gadgets in Google Sites. (grinsted) の説明に従った。まず、上記に書いたように Google Sites においてガジェットを埋め込む手順を行う。 「URL を指定して追加」のリンクをクリックすると、URL を入力するためのフィールドが表示されるので、以下の URL を入力する。

http://grinsted.googlepages.com/flexiblegadget.xml

080810-002

 

Setup your gadget ダイアログが表示されるので、表示したい地図の iframe url を入力して OK ボタンを押す。

080810-003

 

ただし、 ifarme url は次のように取得した。

まず、Firefox 上で Google マップを右クリックしたときに、コンテキストメニューが表示されるように設定を変更。「ツール > オプション > コンテンツ」 において、JavaScritpt の「詳細設定」のボタンを押す。「コンテキストメニューを無効化または変更する」のチェックをはずす。

080810-004

 

Google マップにおいて、表示したい位置を特定する。地図の右上、「リンク」をクリックし、「埋め込み地図のカスタマイズとプレビュー」を選択。

080810-005

 

表示された地図の上で右クリック > 「このフレーム > このフレームだけを表示」を選択する。これにより地図だけがウィンドウいっぱいに表示されるので、このときの URL をコピーし、上記の iframe url に設定する。

追記(2008.8.24) : 上記の「このフレーム > このフレームだけを表示」では URL が表示されなくなってしまった。そこで「このフレーム > フレームを新しいウィンドウで開く」を選択することによって URL を表示させるようにした。

追記 2 (2008.8.24) : Google マップのマイマップを Firefox で開き、上記の通りの操作をしようとしたが、マイマップで使用したアイコンが表示されるのが非常に遅かった。そこで、マイマップの URL を控えておき、Google からサインアウトした後に、再度マイマップを開くと今度はスムーズにアイコンを含めて開くことができた。

関連サイト

Majestouch 黒軸を軽く押して入力する目安

「Majestouch 黒軸の打ち方の変化」 のつづき

例えば、Ctrl キーがある。これを底打ちするまで押すには結構な力がいる。底打ちさせた状態を保つこととなれば、なおさら力がいる。最小限の力で押すことが、指を疲れさせないために必須条件だけれど、黒軸はクリック感がないのでどこまで押せばいいのか指の感覚だけでは測りかねる。

もちろん、毎回同じ量の「しゃり」を一瞬で判断できる寿司職人や、機械よりも精密に金属を砥ぐことのできる職人ならいざ知らず、並の感覚しか持たない人間にとって、黒軸の入力ポイントを完璧にとらえることは至難の技だろう。だから、入力されるポイントよりもやや深くキーを押すことになる。しかし、不思議なことに、深く入力しはじめると、底無し沼のようにズブズブと指が押下させられてしまう感じがすることもある。そんなに強く押すつもりはなかったのに、底打ちさせしまっていることに気がつくことも。

軽く押したときに入力されるポイントに対して、何か目安となる深さはないものだろうか?感覚だけに頼るのは黒軸使用一ヶ月の若輩者にとっては、ちと荷が重すぎる。ゆっくり押して、入力されるポイントを指に覚えこます練習もいいかもしれないが、それにしても他に目安があればそれにこしたことはない。

 

手前の段のキーの高さ

キーボードのキーは、手前から離れていくに従って段をなし、徐々に高い位置にくるように配置されている。例えば、横から Ctrl キーを見てみると、手前の段にある Shift キーよりもわずかに高い位置にあることが確認できる。

さて、 Ctrl キーをゆっくり押下しはじめると、 Ctrl が有効になるポイントがあることわかる。はじめ気がついていなかったのだけれど、 Ctrl キーが有効になる押したときのキーの高さは、ほぼ手前のキーである Shift キーの高さになるくらいだった。 Ctrl キーを押したときに Shift キーと同じくらいの高さなると、指を少し寝かせた状態であれば Shift キーに触ったことを感知することができる。このことは、他のキーについても同様で、例えば、 A キーであれば Z キーに触れるくらいの位置でキーの入力が有効になる。指を寝かした状態で打鍵するのは全てのキーでできるわけではないけれど、これは一つの入力時の力の加減の目安として使えそうだ。 ^^

DSC01512-2

「 キーボードの入力を改善する方法 」 につづく

2008年8月9日土曜日

複利の計算

リボ払い

ちょうど「ブログが続かないわけ | リボ払いは悪魔」を読んでいて、「リボ払いは使うな! 気をつけろ」ということを、いつどこで教えてもらったのかと記憶の糸を辿りつつ、そういえば「複利の計算」ってどうやるだっけ (?) と疑問が。 (@_@;) 複利の計算方法、学生時代に習ったっけ?全く記憶がない。どこで耳にしたのか、雪だるま式に何かがどうかなるというイメージがあるだけ。恥ずかしながら具体的な意味を知らず。 ^^;

 

複利

複利 – Wikipedia によると、

複利(ふくり)とは、複利法によって計算された利子のことで、利子を元金に組み入れる方式で利子に利子がつくことを言う。(…)

 投資などでは得た利子を元本に組み入れることにより、元本を増やすことで次に受け取る利子が増える事になり雪だるま式に利子が増えていくことになる。

雪だるま式というイメージはどうやら見当違いではなかったようだ。つまるところ、利子を計算するための元になるお金 (元金) があったときに、そのお金に対してだけ利子を考えていくのではなく、「元金に利子を足したもの」に対して利子を考え、それ繰り返していくということ。

複利は、投資の場合に有効に働けば大きな利益を得られるが、逆に借金した場合に大きな力として働いてしまったら恐しいことに。Airblog: 複利とアインシュタイン によると、

The most powerful force in the universe is compound interest.(wikiquote)

といったのは物理学者のアインシュタイン。曰く、「世界でもっとも強い力(=force)は、複利だ」。身近な例でいうと、住宅ローン。

compound interest の意味は、

interest は、「興味、関心;関心事」のほか「利子、利息;利率」や「利益;私利私欲」という意味で用いられる。
compound は、「複数の部分(要素)からなる、合成の、混成の、複合の」という意味。

(ぱふぅ家のホームページ の compound interest より)

 

具体的な複利の計算

「複数」という言葉に対して「単数」があるように、「複利」に対して「単利」がある。この違いについて具体的に例を挙げて説明してあった 大学生の株日記 の 単利と複利 がわかりやすかった。

100万円の元本があるとします。1年の利回りが20%とします。
1年で 100万円×0.2=20万円の利子がついて、合計で120万円となります。
2年目は その120万に対して20%の利子がつくので
120万円×0.2=24万円の利子がつき、合計で144万円となります。 (…)

注目するところは、2 年目の計算のところで、”1 年目の利子がついた金額に対して利子を計算している” こと。これが雪だるまになるしかけのようだ。

 

計算式

3分LifeHacking:複利計算を“暗算”で行う - ITmedia Biz.ID によると、

数式で考えると、利率をr、年数をNとした場合、資産の増加は、

  • A(1+r)^N

いきなり数式がでてきたが、具体的に考えてみる。 上記の例に当てはめると、

1 年目 : 100 * (1 + 0.2)

2 年目 : (100 * (1 + 0.2)) * (1 + 0.2) = 100 * (1 + 0.2) ^ 2

3 年目 : ((100 * (1 + 0.2)) * (1 + 0.2)) * (1 + 0.2) = 100 * (1 + 0.2) ^ 3

…

n 年目 : 100 * (1 + 0.2) ^ n

元本を A 、利率を r 、年数を N とすれば、

1 年目 : A * (1 + r)

2 年目 : (A * (1 + r)) * (1 + r) = A * (1 + r) ^ 2

3 年目 : ((A * (1 + r)) * (1 + r)) * (1 + r) = A * (1 + r) ^ 3

…

N 年目 : A (1 + r) ^ N

この計算式を使うならば、上例の 10 年目を 100(1+0.2)^10 - Google 検索 で求めることができる。

 

再帰で表現

再び、大学生の株日記 の 単利と複利 の例として挙げられていた例を見てみる。

100万円の元本があるとします。1年の利回りが20%とします。

http://daigakusei.daa.jp/money/tanrifukuri.html

単利と複利 via kwout

上の表の「はじめから 10 年目」までの値をリストとして眺めていると、このまま延々と続く「無限リスト」を想起する。無限リストと言えば、思い出すのは Haskell …

先ほどの複利の計算方法は忘れて、複利の定義に戻り具体例で考えると、

1 年目の値は、はじめの値 の 1.2 倍

2 年目の値は、1 年目の値の 1.2 倍

3 年目の値は、2 年目の値の 1.2 倍

…

N 年目の値は、(N – 1) 年目の値の 1.2 倍

となり、再帰的な表現がされていることがわかる。 (再帰については「ループと再帰」を参照。)

 

Haskell で実装

早速これを Haskell で実装してみる。

fukuri gankin riritu = [gankin] ++ fukuri(gankin*(1+riritu)) riritu

main = print $ map round $ take 11 $ fukuri 100 0.2

fukuri 関数に元金と利率を適用すると、元金を先頭にした無限リストが生成される。それに take 関数を適用して必要なだけ取り出す。

 

Ruby で実装

Ruby で書いてみると、

def fukuri(gankin,riritu,n)
  return gankin if n == 0
  return fukuri(gankin*(1+riritu),riritu,n-1)
end

puts fukuri(100,0.2,10)

fukuri 関数の引数は、元金と利率と、利率を年利と考えるならば n 年目の金額を求めるための n を渡す。上記では、元金 100, 利率(年利を仮定し) 20% で 10 年目の金額を求めている。

今はたまたま年利として考えたが、金利は長さによって呼び方が異なり、金利ってどういうもの? - レジャー王を目指して によると、

金利の単位 日歩(ひぶ) 月利(げつり) 年利(ねんり)

1日の利息 1ヶ月の利息の割合 1年間の利息の割合

年利29.2%の場合 0.08% 2.43% 29.2%

この数字は、単純に、年利÷12=月利 年利÷365=日歩という計算方法になります。

という関係がある。

 

ところで、上記の関数は特定の値を求めるものだったが、これを Haskell のリストのように元金を先頭した配列を取得しようとするなら、

def fukuri2(gankin,riritu,n)
  return [] if n == 0
  return [gankin.round] + fukuri2(gankin*(1+riritu),riritu,n-1)
end

p fukuri2(100,0.2,11)

 

考え方

ところで、 tnomuraのブログ : 思考と再帰 には Scheme による実装が書かれている。

複利の考え方を言葉で説明すると次のようになる。
1.ローンをすぐに返済すれば利子はなく、元金のままだ。
2.1年後の期末の元利合計は、期首の元利合計を元金と考えそれに利率をかけた利子と期首の元利合計(その年度の元金)との和になる。

これをSchemeでプログラムすると次のようになる。
(define (ganri gankin riritu kikan)
  (if (= kikan 0)
      gankin
      (* (ganri gankin riritu (- kikan 1)) (+ 1 riritu))))
> (ganri 100 0.02 10)
121.89944199947573

ほぼ、文章で説明した通りの内容だ。同じパターンの操作を繰り返すという内容をプログラムするのに再帰を用いると、思考の内容をほぼそのままプログラムとして実行することができるのだ。再帰で表現された繰り返しは、手続き言語の構文のループで表現するよりも、脳の中の思考の形態により近いような気がする。

(太字は引用者による)

再帰になかなか慣れない自分にとって、やはり再帰はまだまだ思考内容を素直に表現できると感じるには遠いなぁ。 ^^;

自分の場合は、次のように考えた方が自然に感じる。まず、「複利」というモヤモヤとした実体をイメージする。そこに「元金」と「利率」を設定。next の呼出しを行うと、「複利」は元金と利率を元に元金を設定する。これを next の呼出しの度に行う。

080809-003

上記を Ruby で実装すると、

class Fukuri
  def initialize(gankin,riritu)
    @gankin, @riritu = gankin, riritu
  end
  def next(n)
    n.times{@gankin = @gankin * (1+@riritu)}
  end
  def result
    return @gankin.round
  end
end

f = Fukuri.new(100,0.2)
f.next(10)
puts f.result

もし元金からのリストを得たい場合は、next の計算の度に結果を保持する配列を用意しておき記録する。

再帰で表現したときに比べると、随分長くなってしまったが、こちらの方が動作をイメージしやすくて好み... ^^;

Google Sites を Blogger のまとめ用の Wiki として活用 - 一時的にアクセス不能になる

フローとしてのブログ

2,3 年前に、次の文をを読んだことがある。

「ブログはフロー、Wikiはストック」  (Zopeジャンキー日記 より)

当時、ブログのことを「フロー」と表現していたことが新鮮であり、言い得て妙だったので、今でもずっと印象に残っている。そのときに「フローテキスト」という言葉にも出会った。

大雑把に言って、単位となるテキストのまとまりが、時系列で書かれ、管理されるのフロー・テキスト、そうではなく、テーマ志向で、いわば空間的に、ディレクトリ的、非時間的に管理されるのを、ストック・テキストと呼びたいと思います。

(ストックとフロー、blogとwiki あるいは。 より)

ブログはそのとき思い付いたことをなるべく早くチャチャとまとめて書きだしている。後で振り返ってみると、「こんなの書いたっけ?」 (@_@;) と思うこともしばしば。書きっぱなしで「流れていく」。まさにフローという言葉が自分にはぴったりとくる。

このブログのタイトルにあるように、「すぐに忘れる脳みそ」というのは伊達じゃない。自分の関心のあることを忘れないようにとの思いからメモ書きをしているのだけれど、その対象となるテーマが複数存在するので、あるテーマについて期間をあけるとすぐに前にやっていたことを忘れてしまう。本当に自分の脳みその容量の小ささと、作業領域の狭さについては辟易してしまうのだけれど、それについて文句ばかりを言っても、悲しいかな自分に返ってくるだけ。やり方を工夫をするしかない。人それぞれ能力も違えば与えられている環境も違う。ネットの世界を見ていると、自分との差に鬱々とすること多々あるけれど、上と比べず自分なりの方法で楽しく知識を伸ばしていきたいものだなぁ。 (+_+)

で、いろいろと考え、学習環境としてのブログを考える (2)  で述べたように、ブログの機能として以下のような構造を実装してくれるとありがたいのだけれど、さすがに既存のブログシステムを自分の都合のいいように変更することは望むべくもなく、ブログを効率的に振り返ることができる代替手段として、「ストックとしての Wiki 」 を利用することを考えていた。

080126-003

 

Google の Wiki

「ITmedia News:Google、WikiツールのJotSpotを買収」 という記事を 2006/11 に目にして以来、非常にワクワクとした気分で首を長くして Wiki の登場を待っていた。他にも Wiki のサービスはたくさんあるけれど、 Blogger を利用している身にとってみれば、 Google が参入してくるという意味は大きい。そして、2008/6 「Wiki以上! 『Google Sites』は情報統合プラットフォームだ」で、一般ユーザも無料で使えるということを知ってすぐに飛び付いた。試してみると、以前の Wiki のように独自の文法を覚えなくてすみ、 Google ドキュメントのようにブラウザ上でワープロ感覚で使うことができるという機能は、「まとめる」ために同じページを何度も更新する作業と相性が良く、自分の使う目的を十分に満たしていた。

少し前から、ブログの中で特に関心のあるテーマで、後で順を追って読み返したいものに限って Google Sites を使って記事を並べている。また、ブログの記事にするほどのことでもないこともメモっている。特にパソコンが壊れたときなどに、再びアプリをすぐにインストールするできるように、今使っているアプリを羅列してある。それが 「すぐに忘れる脳みそのための Wiki 」 。

 

Google Sites が表示されない

さて、すぐに忘れる脳みそのための Wiki を使うようになってからしばらく経ち、つい先日アクセスしたら、次のような表示がされるようになった。

This site has been disabled for violations of our Terms of Service. If you feel this disabling was in error, please visit our contact page to let us know. Contact Us

 

あわわわわ (@_@;) 何も悪いことしてないはずなのに... 規約に違反しているみたいなことが書かれているけれど、どの項目に違反しているのか何も通知されずにバスンと閉じられてしまった。急いで上記に書かれていた連絡先に投稿して様子を見た。

今や一日のうちで Google を使わない日はない。完全に自分の生活は Google に依存してしまっている。他のサービスにしても、その安定性から Google ならば安心という意識がいつの間にか形成されている。そのため、今回の事態はびっくりしてしまった。

ちにみに同じような状態になっている人が Site Disabled - How-to for End Users | Google グループ に投稿していた。

連絡をして、2、3 日経って Google からメールが届いた。

080809-002

 

あ~ よかったぁ~ ^^ サイトが復活してる!

 

関連サイト

2008年8月7日木曜日

コイン投げのシミュレーションで大数の法則を実感

数学の思い出

典型的な文系人間で、数学全般にアレルギーがあった。まぁ、小学一年生のころに算数のテスト一発目で 0 点。「繰り上げ」の意味がわからなくて一人居残りさせられ、母真っ青という思い出がある。算数の素質に問題あり。 ^^;

数学の中でも特に「確率」なんてチンプンカンプンだった。大学受験の二次試験のとき、出題されないと思い勉強せずに受験に臨んだら、大問 3 問中の 1 問が確率の問題だと知ったときはマジで終ったと思った。 ^^; そんなこんなで大学では数学なんてやらなくてすむと思いほっとしていたが、統計を使わなくては卒論が書けないので、多少は理解するために読まざる終えなかった。そして、友人に勧められて読んだのがこの本。難しい数式が使われず、読み物のよう。なつかしいなぁ。でも、表紙が変わってる。 (@_@;) 改訂版か。

確率のはなし―基礎・応用・娯楽 (Best selected business books) 確率のはなし―基礎・応用・娯楽 (Best selected business books)
大村 平

by G-Tools

さて、久しぶりに読むとおもしろい。必要に迫られないで自分の興味のままにわからないことを調べるというのであれば、数学の話もおもしろく感じる。今回は再度読むにあたり、折角なのでパソコンを使って実験し、確率を体感したいと思う。確率を理解する難しさは、特に一般化したときの話を具体的な問題に適用するときに、どれがどれに相当するのか訳がわからなくなるということが大きいが、それに加えて確率の実感がわきにくいということもあった。理論的に式を導いたり意味を理解するのは難しいと感じるが、ランダムを使って確率の動きを見ることくらいならできそうだ。

 

大数の法則

さて、確率の話となると「大数の法則」(p24) というのが最初の方にでてくる。大数の法則 – Wikipedia によると、

例えば「コイン投げ」、つまりゆがみも偏りもない"理想的なコイン"を投げて出る表裏を当てるゲームを行うとする。 (…) このとき、コイン投げの試行回数を限りなく増やせば、表が出る回数と裏が出る回数の比率はどちらも 1/2 に近づく。

シミュレーション:大数の法則 law of large numbers 中川雅央 - 滋賀大学 では、「確率 p  の事象に対して n 回試行を行う」場合のシミュレーションを実際に試すことができる。コイン投げであれば、 p を 1/2 に設定した状態が相当する。

このシミュレーションでは、 確率 p を変動させて試すことができることからわかるように、「確率 p の事象」という抽象的なレベルでシミュレーションを表現してる。 JavaScript で書かれているのでソースを見ることができるが、「確率 p の事象」が起こったということをコード上で次のように表現している。

if(Math.random() < p) r++;

p は確率、 r は事象が起きた回数を表わしている。つまりこの表現では、ランダムな数値を生成し、それが設定した確率 p 以下であれば「事象が起こった」と見なすということ。

 

コイン投げのシミュレーション

さて、文系な脳みその自分は、いきなり抽象的な表現をされると訳がわからなくなる。そこで、はじめはもっと限定的で具体的な状況でのシミュレーションを行うことにした。つまり、上記で引用したように、「コインを投げてその裏表の回数を数える」ということをその言葉通り表現してみる。言語は Ruby を使う。

まずは、投げる対象である「コイン」を表現してみる。 コインには表と裏の二つの状態 (@omote) があり、コインを生成したときにその状態が決まる (setState) とする。シュミレーションをするためにコインを投げる (nageru) 必要があり、その結果.表か裏かの状態が変化する。 @omote を見れば、そのコインの現在の状態が表か裏か知ることができる。
# コインを表わすクラス
class Coin
  attr_reader :omote	# 表かどうかの状態を表わす
  def initialize
    setState
  end
  # コインを投げる
  def nageru
    setState
  end
  private
  # コインの表裏の状態を設定する
  def setState
    @omote = if rand().round == 1 then true else false end
  end
end

このコインを n 回数投げて、表が出た割合を調べてみればよい。

 

ところで、これだけだと先ほどのシュミレーションのより限定的な状況を表現しているるだけなので、少し変化をつけてみる。どこを変えるかと言えば、コインを n 回投げるだけではなく、「n 回投げることを x 回繰り返す」ようにしてみる。そして、それぞれの回において表が出た割合がどのくらいだったのかを記録し、適当な基準において結果を表示するようにする。イメージとしては、次のような結果が表示されるようにする。

コインを 20 回投げる試行を 100  回繰り返します。

0   - 15 % :  1

15 – 25 % :  3

25 – 35 % :  8

…

上記の場合、例えばコインを 20 回投げてすべて裏だったら 0 – 15 % の区間にカウントする。 20 回投げて 4  回表だったら 15 – 25 % の区間にカウントする。以下同じようにして、それを 100 回繰り返す。

 

設計

コードを書く前に、おおよその輪郭を考える。以下に示すように、コインは上記の Coin クラスで、それを投げる人 (Hantei クラス) がいるとする。コインを投げる人は、指定に従ってコインを投げることに専念し、コインを投げた結果は Result クラスに記録していく。

080807-002

結果は集計され、最終的な表示に変換される。この集計を行う Counter クラスでは、Result に記録された結果を読み取り、対応したカウンターでカウントすることによって分析を行う。

これでコイン投げのシュミレーションと結果の表示までのモデル化ができた。効率的ではないけれど ^^; 、やりたいことをそのまま直接的に表現した。

 

実装

# コインを投げて結果を記録するクラス。
class Hantei
  def initialize(coin)
    @coin = coin
    @result = Result.new
  end
  # コインを n 回投げる。
  def nageru(n)
    omote_num = 0	# 表が出た回数
    for i in 0...n
      @coin.nageru
      omote_num += 1 if @coin.omote
    end
    # n 回中表が出た割合を結果として記録する。
    @result.add(omote_num / n.to_f * 100)
  end
  # コインを n 回投げることを x 回繰り返す。
  def repeat(x,n)
    puts "コインを #{n} 回投げる試行を #{x} 回繰り返します。"
    for i in 0...x
      nageru(n)
    end
  end
  # 結果を表示する。
  def result
    @result.print
  end
end

# 結果を保持するクラス。
class Result
  def initialize
    @results = []		# 結果の配列
    @counter = Counter.new	# 集計をするためのもの
  end
  # 結果を追加する
  def add(result)
    @results << result
  end
  # 結果を設定した基準で集計する
  def analyze
    @results.each do |result|
      @counter.add(result)
    end
  end
  # 結果を表示する。
  def print
    analyze
    @counter.result
  end
end

# 結果を集計するためのクラス
class Counter
  INTERVAL = 10
  include Enumerable
  def initialize
    @counterUnits = []
    setCriterion
  end
  # 集計のための基準を設定する
  def setCriterion
    @counterUnits << CounterUnit.new(0,15)
    for i in 0..6
      @counterUnits << CounterUnit.new(15+INTERVAL*i, 15+INTERVAL*i+INTERVAL)
    end
    @counterUnits << CounterUnit.new(85,100)
  end
  def each
    @counterUnits.each do |counterUnit|
      yield counterUnit
    end
  end
  # 結果を追加する
  def add(result)
    @counterUnits.find { |counterUnit|
      counterUnit.lowerLimit <= result and 
      	counterUnit.upperLimit >= result
    }.countUp
  end
  # 集計の結果を表示する
  def result
    @counterUnits.each do |counterUnit|
      printf("%2d -%3d%% : %3d\n",
             counterUnit.lowerLimit, 
             counterUnit.upperLimit, 
             counterUnit.counter)
    end
  end
  
  # 集計のための個々のカウンター
  class CounterUnit
    attr_reader :lowerLimit, :upperLimit, :counter
    def initialize(lowerLimit, upperLimit)
      @lowerLimit = lowerLimit
      @upperLimit = upperLimit
      @counter = 0
    end
    def countUp
      @counter += 1
    end
  end
end

集計のための区間がハードコードされているけれど、とりあえず、まぁいいや。 ^^;

 

結果

上記のクラスを使うには、次のようにする。

hantei = Hantei.new(Coin.new)
hantei.repeat(100,10)
hantei.result

結果は、次のようになる。

コインを 10 回投げる試行を 100 回繰り返します。
 0 - 15% :   1
15 - 25% :   9
25 - 35% :  14
35 - 45% :  21
45 - 55% :  23
55 - 65% :  14
65 - 75% :  11
75 - 85% :   6
85 -100% :   1

パラメータの値を変化させていくと、

コインを 20 回投げる試行を 100 回繰り返します。
 0 - 15% :   0
15 - 25% :   4
25 - 35% :  10
35 - 45% :  32
45 - 55% :  13
55 - 65% :  38
65 - 75% :   3
75 - 85% :   0
85 -100% :   0

コインを 40 回投げる試行を 100 回繰り返します。
 0 - 15% :   0
15 - 25% :   0
25 - 35% :   5
35 - 45% :  34
45 - 55% :  35
55 - 65% :  25
65 - 75% :   1
75 - 85% :   0
85 -100% :   0

コインを 100 回投げる試行を 100 回繰り返します。
 0 - 15% :   0
15 - 25% :   0
25 - 35% :   0
35 - 45% :  27
45 - 55% :  54
55 - 65% :  19
65 - 75% :   0
75 - 85% :   0
85 -100% :   0

コインを 200 回投げる試行を 100 回繰り返します。
 0 - 15% :   0
15 - 25% :   0
25 - 35% :   0
35 - 45% :   7
45 - 55% :  83
55 - 65% :  10
65 - 75% :   0
75 - 85% :   0
85 -100% :   0

コインを 500 回投げる試行を 100 回繰り返します。
 0 - 15% :   0
15 - 25% :   0
25 - 35% :   0
35 - 45% :   0
45 - 55% :  96
55 - 65% :   4
65 - 75% :   0
75 - 85% :   0
85 -100% :   0

コインを投げる回数を増やすにつれて、 1/2 の確率に近付いているのがわかる。