NOTE: **use Perl;** is on undef hiatus. You can read content, but you can't post it. More info will be forthcoming forthcomingly.

colomon

(email not shown publicly)

(email not shown publicly)

Wednesday July 29, 2009

12:26 PM

Loved PerlJam's Euler #52 post, but instantly wanted to try to optimize it. I think this version is about five times faster than his (not sure because I'm too lazy to run his full program on my system) while being more careful about what it checks.

use v6;

my $pass_start = 5; # start at the first number divisible by three after this one

my $pass_end = 17; # skip ahead when we get here

my $n;

loop ($n = 6; ; $n += 3)

{

if $n > $pass_end

{

$pass_start *= 10;

$pass_end *= 10;

$n = $pass_start;

$n -= $n % 3;

next;

}

my $digits = (2*$n).comb.sort;

next unless ($digits ~~/0|5/);

# say "$n ==> $digits";

last if

$digits eq (3*$n).comb.sort &&

$digits eq (4*$n).comb.sort &&

$digits eq (5*$n).comb.sort &&

$digits eq (6*$n).comb.sort;

}

say $n;

Full

Abbreviated

Hidden

Stories, comments, journals, and other submissions on use Perl; are Copyright 1998-2006, their respective owners.

## Second try (Score:1)

## Re: (Score:1)

## care to contribute to the euler_bench program? (Score:1)

{after some poking from Eric Wilhelm I'll post this here as well}

I'm part of PDX.pm and we've started a project to collect solutions to euler problems as a way to benchmark rakudo. We would love to have you join in the fun. Currently everything is up on github (http://github.com/notbenh/euler_bench/tree/master).

benh~

## Re: (Score:1)

## The answer has to be divisible by 9 (Score:1)

The sum of the digits of a number mod 9 is always the number mod 9. The sum of the digits of 2*$n and 3*$n is the same, which means that mod 9, 2*$n and 3*$n are the same, which means that $n is 0 mod 9, so $n is divisible by 9.

This should improve your speed by a factor of 3. :-)

## Re: (Score:1)