• ベストアンサー

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

質問者が選んだベストアンサー

  • ベストアンサー
  • jyamo
  • ベストアンサー率13% (16/121)
回答No.1

なんか学校の課題っぽい感じが良いですね~ がんばって下さいヽ(`▽´)/ perlはしらないので。。。

ayu_mi_nic
質問者

お礼

回答いただきありがとうございます。 確率だけの計算なら学校で習いましたが、 実際プログラムでシュミレーションさせようとすると難しいですね(*^_^*)

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

よくわからんですが、 $data{"色名"}=個数 のようにハッシュで持つようにしたらどうでしょうか

すると、全ての回答が全文表示されます。

関連するQ&A