NAME
Data::Lotter - Data pickup module by its own weight
SYNOPSIS
use Data::Lotter;
# 抽選候補データを用意
# item => weight のhash
my %candidates = (
red => 10,
green => 10,
blue => 10,
yellow => 10,
white => 10,
);
# データをセット
my $lotter = Data::Lotter->new(%candidates);
# 普通のpickup
# 3つのアイテムを抽選(47個のアイテムwaitが残る)
my @ret = $lotter->pickup(3);
# ex. ( red, green, yellow ) = @ret
# REMOVEオプションつきのpickup
# 1つのアイテムを抽選(4つのアイテムが残る)
my @ret = $lotter->pickup(1, "REMOVE");
DESCRIPTION
Data::Lotter is データ抽選モジュールです。 itemとweightの値を持ったhashを「抽選候補データ」として準備します。 (weightは適当にばらけた数値を指定して構いません)
red green blue yellow white
---------- ---------- ---------- ---------- ----------
0123456789 0123456789 0123456789 0123456789 0123456789
ここから1つのデータを抽選するとします。 たとえば「35」が抽選の結果だったとします。
red green blue yellow white
---------- ---------- ---------- ---------- ----------
0123456789 0123456789 0123456789 0123456789 0123456789
^
↑ここ
抽選用のpickupメソッドが呼び出された後、データは以下のように抽選されたitemのweightが1つ減らされた状態になります。
red green blue yellow white
---------- ---------- ---------- --------- ----------
0123456789 0123456789 0123456789 012356789 0123456789
^
↑ここが消えた
REMOVEオプションをつけてpickupメソッドを呼び出すと、その番号を保有するitemごと削除されます。
red green blue white
---------- ---------- ---------- ----------
0123456789 0123456789 0123456789 0123456789
yellowごと消えた!
これにより複数の候補から複数のアイテムを繰り返し抽選する際に、 * 福引のように「たくさんのくじの中から選ぶ」パターンと * 選挙のように「特定の誰かを何人か決める」ようなパターンの両方を実現できます。
METHODS
new()
pickup()
left_items()
left_item_waits()
AUTHOR
Takeshi Miki <miki@cpan.org>
Original idea was spawned by KANEGON
Special thanks to Daisuke Maki
LICENSE
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.