Re: Perl 'Medium' Quiz-of-the-Whatever for 2009-08-11 : Plusified Equations
Peter Scott <[email protected]> Mon, 12 Oct 2009 21:40:37 -0700
| Newsgroups | gmane.comp.lang.perl.qotw.discuss |
|---|---|
| Message-ID | <p06230900c6f9b4877f05@[192.168.1.3]> |
My last submission was more for clarity than efficiency. This one is
a bit more efficient, in generating the list for one side in advance,
but a bit less clear:
use strict;
use warnings;
my ($left, $right) = @ARGV;
my @left;
iter( $left, sub { push @left, shift } );
iter( $right, sub { eval == eval $_[0] and print "$_ = $_[0]\n" for @left } );
sub iter
{
my ($side, $cb) = @_;
my $count = length($side) - 1;
for my $num ( 0 .. 2**$count - 1)
{
my $i = $count;
(my $side = $side) =~ s/(.)(?=.)/$1 . ($num & 1 << --$i ? '+' : '')/ge;
$cb->( $side );
}
}