aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordrbaggy <js5@sanger.ac.uk>2021-10-19 16:17:32 +0100
committerdrbaggy <js5@sanger.ac.uk>2021-10-19 16:17:32 +0100
commite058ca9cfd9410e2433acefd56d0d601501c5c0c (patch)
tree34a84cf4441cb0077701cd66ac5d56b01e74219a
parent624df489701537fdbe85a3d72447975258d61161 (diff)
parent402866100f60f1c742cb1151fbbe1aeb5f6cac6b (diff)
downloadperlweeklychallenge-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.raku41
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;
}