# -*- mode: cperl6; -*- # 2011 Perl 6 Coding Contest # Edgar Gonzàlez i Pellicer # Multisets module Multiset; # Take a n-multiset # Recursive helper function sub multisets-rec(Array $src, Int $n, Int $i, Array $cur) { # No more? if $n == 0 { # Add it take [ $cur.clone ]; } else { # For each one for $i ..^ $src.elems -> $j { # Add it to current $cur.push($src[$j]); # Recurse from there multisets-rec($src, $n - 1, $j, $cur); # Remove $cur.pop; } } } # Generate all n-multisets sub multisets(Array $src, Int $n) is export { return gather { # Recurse multisets-rec($src, $n, 0, []); } }