diff options
| author | drbaggy <js5@sanger.ac.uk> | 2021-10-19 16:17:32 +0100 |
|---|---|---|
| committer | drbaggy <js5@sanger.ac.uk> | 2021-10-19 16:17:32 +0100 |
| commit | e058ca9cfd9410e2433acefd56d0d601501c5c0c (patch) | |
| tree | 34a84cf4441cb0077701cd66ac5d56b01e74219a | |
| parent | 624df489701537fdbe85a3d72447975258d61161 (diff) | |
| parent | 402866100f60f1c742cb1151fbbe1aeb5f6cac6b (diff) | |
| download | perlweeklychallenge-club-e058ca9cfd9410e2433acefd56d0d601501c5c0c.tar.gz perlweeklychallenge-club-e058ca9cfd9410e2433acefd56d0d601501c5c0c.tar.bz2 perlweeklychallenge-club-e058ca9cfd9410e2433acefd56d0d601501c5c0c.zip | |
Merge remote-tracking branch 'upstream/master'
| -rw-r--r-- | challenge-134/mark-anderson/raku/ch-1.raku | 41 |
1 files changed, 26 insertions, 15 deletions
diff --git a/challenge-134/mark-anderson/raku/ch-1.raku b/challenge-134/mark-anderson/raku/ch-1.raku index 213a6e51ec..8316cd0dc4 100644 --- a/challenge-134/mark-anderson/raku/ch-1.raku +++ b/challenge-134/mark-anderson/raku/ch-1.raku @@ -1,25 +1,36 @@ #!/usr/bin/env raku -say pandigital(1..5); -say pandigital(1, 1000000, 2000000, 3000000, 3265920); +# a translation of http://perplexus.info/show.php?pid=6448&cid=42810 -sub pandigital(+$arr where 3265920 >= .all) +for (1, 1e6, 2e6, 3e6, 3265920) { - my @polys = |$arr.map(*.pred.polymod(362880)); + say pandigital($_); +} - my $starts := < 1023456789 2013456789 3012456789 - 4012356789 5012346789 6012345789 - 7012345689 8012345679 9012345678 >; +multi pandigital($n where * == 3265920) { 9876543210 } - my @pans = gather for $starts.head.comb.permutations - { - .take - }[@polys>>[0]]>>.join; +multi pandigital($n is copy where * < 3265920) +{ + my $m; + my $t; + my $a = ''; + my @a = 1..9; + my $s = set 0..9; - gather for @pans Z @polys + loop { - my $div = .tail.tail; - .head .= trans($starts[0] => $starts[$div]) if $div; - take .head; + my $f = [*] @a; + $m = ($n / $f).floor; + last if $m * $f == $n; + $t = $++ ?? $s.sort.[$m].key !! $s.sort.[$m+1].key; + $a ~= $t; + $s (-)= $t; + $n -= $f * $m; + @a.pop; } + + $t = $s.sort.[$m-1].key; + $a ~= $t; + $s (-)= $t; + $a ~ $s.keys.sort(-*).join; } |
