For summing to 100, I got all but one with this
#!/usr/bin/env perl
use strict;
use warnings;
use feature 'say';
my @queue = '123456789';
while (@queue) {
$_ = shift @queue;
say if eval == 100;
while ( /\d+?/g) {
next if (!$' || $' =~ /\+|\-/);
push @queue,("$`$&+$'","$`$&-$'");
}
}
123-45-67+89
123+4-5+67-89
123+45-67+8-9
1+2+34-5+67-8+9
1+23-4+5+6+78-9
1+23-4+56+7+8+9
12+3+4+5-6-7+89
12+3-4+5+67+8+9
12-3-4+5-6+7+89
123-4-5-6-7+8-9
1+2+3-4+5+6+78+9
Eventually resorted to this to get the last one
#!/usr/bin/env perl
use strict;
use warnings;
use feature 'say';
my @queue = '123456789';
my %seen;
while (@queue) {
local $_ = shift @queue;
next if (exists $seen{$_});
$seen{$_}++;
say if eval == 100;
while (/\d+?/g) {
my ($pre,$match,$post) = ($`,$&,$');
push @queue, "$pre$match+$post" unless (!$post || $post =~ /[+
+-]/);
push @queue, "$pre-$match$post" unless ($pre =~ /[-+]$/ );
}
}
I think a better regex solution exists, this re-evaluates too many times. I used structure from tybalt89's Re: Parks Puzzle.
With '1234567891234' 1222 solutions
With '12345678912345' 3080 solutions
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.