#!/usr/bin/perl -n

BEGIN { 
	$set = [];
	$cards = 4;
	$q_per_card = 25;
	$n = 0;
}

chomp;
if (/./) {
	push @$set, $_;
	$n++;
} else {
	push @sets, $set;
	$set = [];
}

sub pop_rand {
	my $ary = $_[0];
	my $i = int rand(@$ary);
	return splice @$ary, $i, 1;
}

sub shuffle {
#note: this function is destructive
	my $old_ary = $_[0];
	my $new_ary = [];
	while (@$old_ary) {
		push @$new_ary, pop_rand($old_ary);
	}
	return $new_ary;
}

sub init_card_set_list {
	my $card_n = $_[0];
	$card_sets[$card_n] = [0..@sets-1];
}

sub init_card_set_lists {
	for my $card_n (0..$cards-1) {
		init_card_set_list($card_n);
	}
}

sub filter_card_set_list {
	my $card_n = $_[0];
	my $list = $card_sets[$card_n];
	for (my $i=$#$list; $i>=0; --$i) {
		if (@{$sets[$$list[$i]]} == 0) {
			splice @$list, $i, 1;
		}
	}
}

END {
	print STDERR "trying now!\n";
	if ($n / $cards != $q_per_card) {
		die "wrong number of questions\n";
	}
	init_card_set_lists();
	while ($n > 0) {
		print STDERR "$n questions remain!\n";
		for $card_n (0..$cards-1) {
			print STDERR "choosing for card $card_n\n";
			filter_card_set_list($card_n);
			if (@{$card_sets[$card_n]} == 0) {
				init_card_set_list($card_n);
				filter_card_set_list($card_n);
				if (@{$card_sets[$card_n]} == 0) {
					die "oh oh!\n";
				}
			}
			print "@{$card_sets[$card_n]}\n";
			$set_n = pop_rand($card_sets[$card_n]);
			$q = pop_rand($sets[$set_n]);
			push @{$card_qs[$card_n]}, $q;
			$n--;
		}
	}
	for $card_n (1..$cards) {
		open OUT, ">board$card_n.mb";
		print OUT "Decimals, fractions & percentages $card_n\n";
		for (@{$card_qs[$card_n-1]}) {
			print OUT "$_\n";
		}
		close OUT;
	}
}
