Fun problem++
Update: The original guard condition was a holdover.
Update2: Noticed that all 3 used of $bs (after the guard) were +1, so increment instead.
#! perl -slw use strict; sub interleave { my( $a, $b ) = qw[ a b ]; my( $as, $bs ) = @_; ( $a, $as, $b, $bs ) = ( $b, $bs, $a, $as ) if $as < $bs; return $a x $as . $b x $bs unless $as and $bs; ++$bs; my $aPerB = int( $as / $bs ); my $aRem = $as - $bs * $aPerB; my @as = ( $a x $aPerB ) x $bs; my $n = 0; $as[ $n ] .= $a, $as[ - ++$n ] .= $a, $aRem -= 2 while $aRem > 1; $as[ @as / 2 ] .= $a if $aRem > 0; return join $b, @as; } our $N ||= 10; our $S ||= 0; our $M ||= 10; srand $S if $S; for ( 13 .. 19 ) { my( $na, $nb ) = ( $_, 4 ); my $s = interleave( $na, $nb ); my( $as, $bs ) = ( $s =~ tr[a][], $s =~ tr[b][] ); printf "%2da %2db: %s\n", $na, $nb, $s; die "$na != $as or $nb != $bs\n" unless $na == $as and $nb == $bs; } print "\n-----------\n"; for ( 1 .. $N ) { my( $na, $nb ) = map{ int rand $M } 1 .. 2; my $s = interleave( $na, $nb ); my( $as, $bs ) = ( $s =~ tr[a][], $s =~ tr[b][] ); printf "%2da %2db: %s\n", $na, $nb, $s; die "$na != $as or $nb != $bs\n" unless $na == $as and $nb == $bs; } __END__ 13a 4b: aaabaabaaabaabaaa 14a 4b: aaabaaabaabaaabaaa 15a 4b: aaabaaabaaabaaabaaa 16a 4b: aaabaaabaaaabaaabaaa 17a 4b: aaaabaaabaaabaaabaaaa 18a 4b: aaaabaaabaaaabaaabaaaa 19a 4b: aaaabaaaabaaabaaaabaaaa ----------- 0a 11b: bbbbbbbbbbb 3a 16b: bbbbabbbbabbbbabbbb 11a 9b: abababababaababababa 7a 17b: bbabbabbabbabbbabbabbabb 16a 14b: abababababababaabababababababa 3a 17b: bbbbabbbbabbbbbabbbb 14a 10b: aabababababaabababababaa 6a 0b: aaaaaa 1a 7b: bbbabbbb 2a 3b: babab 19a 8b: aabaabaabaabaaabaabaabaabaa 2a 0b: aa 0a 7b: bbbbbbb 10a 11b: babababababababababab 12a 12b: ababababababbabababababa 3a 13b: bbbabbbabbbbabbb 9a 7b: ababababaabababa 1a 12b: bbbbbbabbbbbb 15a 16b: bababababababababababababababab 10a 6b: aabababaabababaa
In reply to Re: Spreading out the elements
by BrowserUk
in thread Spreading out the elements
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |