『しょぼちむにおごって僕が金欠になるかどうか』をプログラミングしてみた!
この記事は しょぼちむ Advent Calendar 2014 5 日目の記事です。
しょぼちむ Advent Calendar 2014 - Adventar
昨日は なかけん さんの しょぼちむを使ったお手軽WebGL体験|猫まっしぐら でした!
しょぼちむとは確か2回ほど会ったことがあります!可憐でかわいい女の子でしたよ^^しょぼちむとは年末の忘年会でも会う予定だから、今から楽しみだ!
普段から「かわいい女の子には奢っちゃうぞ///」宣言しているから、この状況でおねだりされるとおじさん、金欠がデッドラインになっちゃうな~ww。
・・・
あいつ本物か?
というのも、実はネカマのおっさんで僕が会ったのはバイトの女子大生という噂も絶えません。ツイッターを見てても、可憐な女子の発言とはとうてい思えない!
お、おっさんには絶対に奢らないからな!!
やばい、結局金欠になるのか、ならんのか分からなくなってきた。
ということで、『しょぼちむにおごって僕が金欠になるかどうか』をプログラミングして求めたいと思います。
まずは可能性をあらわすクラスを用意します。世の中は選択肢で溢れています。 選択肢の型はジェネリック型にして、様々な選択型を扱えるようにします。また、選択には確率がありますので、確率を小数点*1で現します。
しょぼちむ Advent Calendar 2014 のソース(可能性)
次にしょぼちむの正体とその可能性を考えます。
僕が会っていたしょぼちむはバイトの女子大生の可能性が高いです。ということは、今度の忘年会にもその子が来る可能性が高いでしょう。ってことで、確率を60%として0.6で現します。もしかすると忘年会ということで、ネカマのおっさんがくるかもしれません!ようおっさん!はたまた、実は本当は普通の二年目女子SEかもしれません。全く知らん人かも、、おまえ誰だ?
まじレッドキングだったらどうしよう。。
しょぼちむの正体の可能性をStreamで現すことにします。Streamとは遅延評価可能な値の集まり、つまりリストです。そしてリストとは非決定性を持った値の集合、つまり可能性ある値の集合なのです。
しょぼちむ Advent Calendar 2014 のソース(しょぼちむ)
次に支払いの可能性を考えます。支払いは「おごり」と「ごち」と「割り勘」が考えられます。バイトの子がきたらおじさん奢っちゃうかも///。おっさんがきたら、謝罪と賠償を求めます。レッドキングだったら、まじどうしよう。。
それぞれの確率にしょぼちむの正体の確率をかけることで、入力の確率に対しての割合を加味して返します。
しょぼちむ Advent Calendar 2014 のソース(支払い)
最後に、支払いの結果、おこづかいのダメージ具合を考えます。奢ったからといって、即金欠になるかどうかは分からないからな! (その逆もしかり)
しょぼちむ Advent Calendar 2014 のソース(おこづかい)
可能性の条件は揃いました!
flatMapで処理を連結してcollectで確率を求めます。flatMapを用いることで、「ある値に対して考えうる可能性を返す関数」を連結出来るんです!*2
しょぼちむ Advent Calendar 2014 のソース(Main)
そして実行結果
{金欠だ~ヽ(;▽;)ノ=70.0, 金ならあるんだ!!(((o(*゚▽゚*)o)))=29.0}
やばい、70%の確率で金欠やで~~。。
人生は選択の連続であり、選択の結果が人生です。若いというのは可能性の宝庫です。これから様々な選択をしていくことになると思います。慎重にかつアグレッシブな選択をしていき、自分が楽しいと思える人生を選択していってくださいね^^
若いっていいな~ *・゜゚・*:.。..。.:*・'(*゚▽゚*)'・*:.。. .。.:*・゜゚・*
ではこの辺で!バイナリ〜( ´ ▽ ` )ノ
明日は mike_neck さんの syobochim/gistにプルリクを送った結果wwwwwwwwwwwww です!
*1:金額の計算をBigDecimalで![http://togetter.com/li/738592]