Solve hanging lantern problem
Directly computing the count
unit sub MAIN(*@columns);
sub postfix:<!>($n) { [*] 1..$n }
say [+](@columns)! / [*](@columns»!);Output:
$ raku lanterns.raku 1 2 3
60Sequence as column numbers
unit sub MAIN(*@columns, :v(:$verbose)=False);
my @sequences = @columns
. pairs
. map({ (.key+1) xx .value })
. flat
. permutations
. map( *.join(',') )
. unique;
if ($verbose) {
say "There are {+@sequences} possible takedown sequences:";
say "[$_]" for @sequences;
} else {
say +@sequences;
}Output:
Sequence as lantern numbers
Output:
Last updated