Pandigital products

Author: Andrei Osipov

https://projecteuler.net/problem=32

We shall say that an n-digit number is pandigital if it makes use of all the digits 1 to n exactly once; for example, the 5-digit number, 15234, is 1 through 5 pandigital.

The product 7254 is unusual, as the identity, 39 × 186 = 7254, containing multiplicand, multiplier, and product is 1 through 9 pandigital.

Find the sum of all products whose multiplicand/multiplier/product identity can be written as a 1 through 9 pandigital. HINT: Some products can be obtained in more than one way so be sure to only include it once in your sum.

Source code: prob032-andreoss.pl

use v6;

sub is-pandigital($n is copy) {
    # #`«17x slower» return so all $n.comb.one == all 1..9;
    return unless 123456789 <= $n <= 987654321;
    my $x = 0;
    loop ( ; $n != 0 ; $n div=10) {
        my $d = $n mod 10;
        $x += $d * 10 ** (9 - $d);
    }
    $x == 123456789;
}

sub is-unusual($a, $b) {
    my $p = $a * $b;
    my $la = chars $a;
    my $lb = chars $b;
    my $lp = chars $p;

    return unless $la +$lb + $lp == 9;

    my $x = $a * 10 ** (9 - $la) + $b * (10 ** $lp) + $p;

    is-pandigital $x;
}


say [+] unique gather for 1 ... 2000 -> $x {
    for 1 ... 50 -> $y {
        take $x * $y if is-unusual $x, $y
    }
}