From 8434299312e341eb515f1bf9507a6282f17488db Mon Sep 17 00:00:00 2001 From: Mark <53903062+andemark@users.noreply.github.com> Date: Tue, 12 Oct 2021 11:31:33 +0000 Subject: ch-1.raku do-over --- challenge-134/mark-anderson/raku/ch-1.raku | 50 ++++++++++++++++++++++++++---- 1 file changed, 44 insertions(+), 6 deletions(-) diff --git a/challenge-134/mark-anderson/raku/ch-1.raku b/challenge-134/mark-anderson/raku/ch-1.raku index 82bea0e855..b60563f66c 100644 --- a/challenge-134/mark-anderson/raku/ch-1.raku +++ b/challenge-134/mark-anderson/raku/ch-1.raku @@ -1,11 +1,49 @@ #!/usr/bin/env raku -say pandigital(100); -say pandigital(999); -say pandigital(^5); -say pandigital(400, 300, 200, 100, 0); +# This program only deals with pandigital numbers up to 9,876,543,210 +# (or up to the 3,265,920th) -sub pandigital(+$arr where .all ~~ UInt) +use Test; +plan 2; + +subset pd-index of UInt where * < 3_265_920; + +my $seq := 0, 362879, 362880, { |($^a + 362880, $^b + 362880) } ... *; + +is-deeply pandigital(^5), (1023456789, + 1023456798, + 1023456879, + 1023456897, + 1023456978), 'Example 1'; + +is-deeply pandigital($seq[^18]), (1023456789, 1987654320, + 2013456789, 2987654310, + 3012456789, 3987654210, + 4012356789, 4987653210, + 5012346789, 5987643210, + 6012345789, 6987543210, + 7012345689, 7986543210, + 8012345679, 8976543210, + 9012345678, 9876543210), 'Edge Cases'; + +sub pandigital(+$arr where .all ~~ pd-index) { - (1023456789.comb.permutations)[|$arr]>>.join.join(', '); + gather + { + for 1..9 -> $n + { + for create-list($n).permutations -> $list + { + last if $list[0] == 0; + take $list; + } + } + }[|$arr]>>.join>>.Int } + +sub create-list($n) +{ + my $head = ($n, 0); + my $tail = ^10 (-) $head; + |$head, |$tail.keys.sort; +} -- cgit