積集合の抽出に挑む 2 テストデーターの例とその生成スクリプト

集合の個数、集合に含まれるモノの最大個数、集合がモノを含む確率、の3つをパラメータとして与えると、テスト用のデータを生成するスクリプト

($b, $c, $d) = @ARGV || (200 100 .5);
print qq/\@data=(\n/;
$y='AA';
print join qq/,\n/,
	map{
		$a=qq/[\"$y\",[/;
		$y++;
		@a=map{
			(
				$_ % 10 ? '' : qq/\n/
			),(
				rand 1 < $d ? qq/\'$_\',/ : '     '
			);
		}('00'..$c);
		pop @a;
		$a.=join '',@a;
		$a=~s/,[^,]*$//g;
		qq/$a]]/;
	}(1..$b);
print qq/\n);/

例えば引数として 10 20 .5 を与えるとこうなる。

@data=(
["AA",[
'00',                         '06','07','08','09',
'10',                    '15','16']],
["AB",[
'00',                    '05',     '07',
               '13','14','15',               '19']],
["AC",[
     '01','02',     '04','05',     '07','08','09',
     '11','12','13',          '16']],
["AD",[
     '01','02','03',                         '09',
'10',               '14','15',               '19']],
["AE",[
'00','01','02',     '04',               '08',
               '13','14','15','16',          '19']],
["AF",[
          '02','03',               '07','08','09',
          '12','13',     '15',     '17','18','19']],
["AG",[
     '01','02','03','04',          '07',
               '13','14',          '17']],
["AH",[
'00',     '02',          '05','06',
'10',     '12','13',               '17','18','19']],
["AI",[
          '02','03',          '06',          '09',
          '12','13','14',     '16',     '18']],
["AJ",[
'00',     '02',     '04','05',     '07',     '09',
'10','11','12',               '16','17','18','19']]
);

当初の目標である配列200程度モノ50程度ならば例えば 200 100 .5 を与えればよい。