プロが教えるわが家の防犯対策術!

箱の中に、
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__
ballaka14
ballao21
ballkii443
ballmidori112
ballshiro122
ballorenji1

A 回答 (2件)

なんか学校の課題っぽい感じが良いですね~


がんばって下さいヽ(`▽´)/
perlはしらないので。。。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/10/09 19:22

よくわからんですが、


$data{"色名"}=個数
のようにハッシュで持つようにしたらどうでしょうか
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!