Front page | perl.perl6.users |
Postings from May 2006
Re: Simple Print/Say Question
Thread Previous
|
Thread Next
From:
Ovid
Date:
May 23, 2006 17:23
Subject:
Re: Simple Print/Say Question
Message ID:
20060524002250.13451.qmail@web60820.mail.yahoo.com
Hi Chris,
I hope you don't mind. With the idea of getting back into Perl6, I've taken the liberty of rewriting your code to clean it up a bit (somewhat successfully), and make it more "perl6ish" (somewhat unsuccessfully). The only significant issue I have with my version is the terribly nested loop which I'm sure could be cleaned up some more.
Also, because Pugs is so slow, I've included some performance hacks in it. It originally was taking about 4 minutes to run on my computer. It now takes about 50 seconds.
If anyone can offer a better/cleaner version, I'd love to see it.
Cheers,
Ovid
-- If this message is a response to a question on a mailing list, please send follow up questions to the list.
Web Programming with Perl -- http://users.easystreet.com/ovid/cgi_course/--
my %buckets = (
'w' => {
'count' => 4,
'scale' => 10.5,
'array' => [],
},
'x' => {
'count' => 6,
'scale' => 7,
'array' => [],
},
'y' => {
'count' => 12,
'scale' => 3,
'array' => [],
},
'z' => {
'count' => 18,
'scale' => 2,
'array' => [],
},
);
for %buckets.kv -> my $bucket, $arg_for {
for 0 .. $arg_for{'count'} -> $index {
$arg_for{'array'}.push($index * $arg_for{'scale'});
}
}
my int @results;
my int $target = 35;
my $w_bucket = %buckets{'w'};
for 0 .. $w_bucket{'count'} -> my $i {
say "To 4: $i";
my $w = $w_bucket{'array'}[$i];
last if $w > $target;
my $x_bucket = %buckets{'x'};
for 0 .. $x_bucket{'count'} -> my $j {
say " To 6: $j";
my $x = $x_bucket{'array'}[$j];
last if ($w, $x).sum > $target;
my $y_bucket = %buckets{'y'};
for 0 .. $y_bucket{'count'} -> my $k {
my $y = $y_bucket{'array'}[$k];
last if ($w, $x, $y).sum > $target;
my $z_bucket = %buckets{'z'};
for 0 .. $z_bucket{'count'} -> my $l {
my $z = $z_bucket{'array'}[$l];
if( $target == ($w, $x, $y, $z).sum ) {
@results.push( [$i, $j, $k, $l] );
}
}
}
}
}
my $counter = 0;
for @results -> my $result {
say "$counter: " ~ $result.join(" | ");
$counter++;
}
Thread Previous
|
Thread Next