- ベストアンサー
perlでくじ引きプログラムを作りたい
箱の中に、 akaが14個 aoが21個 kiiが443個 以下続く(__END__以下) という様にさまざまな色のボールが箱に入っているとします。 そこから、80個だけ取り出した場合、 aka=4 ao=9 aka=4 以下続く という様に表示させたいのですがどのようにすればよいでしょうか? ネット上で見つけた色々なプログラムをくっつけてはみたのですがいまいちです。 特に、ballの数がakaが14個ではなく、akaが1000000個、ao300000個のように膨れるとメモリも多く要りそうですし、時間もかかってしまいます・・・ もっとうまくやるやり方があると思うのですが、どうしても思いつきません。 どなたか、教えていただけ無いでしょうか? 宜しくお願い致します。 #!/usr/bin/perl print "Content-Type: text/plain\n\n"; my $cnt = 80; my ($line,@array,@data,$data); foreach $line (<DATA>){ @array = split(/\t/,$line); for(1..$array[2]){ #ここの部分がかなり問題あり・・・ $data[$datacnt++]=$line; } } srand; for (my $i = @data; --$i; ) { my $j = int rand ($i + 1); next if $i == $j; @data[$i, $j] = @data[$j, $i]; } foreach(0..($cnt-1)){ #とりあえず表示させる。 print $data[$_]; } #同名を集計して表示させるプログラムを作る予定 #空白はタブ区切りです。 __END__ ball aka 14 ball ao 21 ball kii 443 ball midori 112 ball shiro 122 ball orenji 1
- みんなの回答 (2)
- 専門家の回答
お礼
回答いただきありがとうございます。 確率だけの計算なら学校で習いましたが、 実際プログラムでシュミレーションさせようとすると難しいですね(*^_^*)