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 );
   }
}