diff options
| -rw-r--r-- | challenge-072/wambash/README | 1 | ||||
| -rw-r--r-- | challenge-072/wambash/raku/ch-1.raku | 33 | ||||
| -rw-r--r-- | challenge-072/wambash/raku/ch-2.raku | 4 |
3 files changed, 38 insertions, 0 deletions
diff --git a/challenge-072/wambash/README b/challenge-072/wambash/README new file mode 100644 index 0000000000..ab9af9d7d1 --- /dev/null +++ b/challenge-072/wambash/README @@ -0,0 +1 @@ +Solution by Jan Krňávek diff --git a/challenge-072/wambash/raku/ch-1.raku b/challenge-072/wambash/raku/ch-1.raku new file mode 100644 index 0000000000..52b915d5cd --- /dev/null +++ b/challenge-072/wambash/raku/ch-1.raku @@ -0,0 +1,33 @@ +use v6; +constant @fact = 1, |[\*] 1..* ; +subset BigInt of Int where * ≥ 2000; + +multi trailing-zeroes ( $n ) { + @fact[$n].match(/0*$/).chars +} + +multi trailing-zeroes ( BigInt $n ) { + trailing-zeroes-of-bigint($n) +} + +sub trailing-zeroes-of-bigint ( $n ) { + state @coeficient = [\+] 0, {5**$++} ... *; + [+] $n.polymod(5 xx *) Z* @coeficient +} + +multi MAIN ($n) { + my $fact = $n ~~ BigInt ?? "$n!" !! "$n! = @fact[$n]"; + say "$fact has {trailing-zeroes($n)} trailing zeroes" +} + +multi MAIN (:$test! ) { + use Test; + is trailing-zeroes(10), 2; + is trailing-zeroes(7), 1; + is trailing-zeroes(4), 0; + is trailing-zeroes-of-bigint(10), 2; + is trailing-zeroes-of-bigint(7), 1; + is trailing-zeroes-of-bigint(4), 0; + is trailing-zeroes-of-bigint($_), trailing-zeroes($_) for ^2000 .pick(20); + done-testing; +} diff --git a/challenge-072/wambash/raku/ch-2.raku b/challenge-072/wambash/raku/ch-2.raku new file mode 100644 index 0000000000..ff7014ba39 --- /dev/null +++ b/challenge-072/wambash/raku/ch-2.raku @@ -0,0 +1,4 @@ +use v6; + +unit sub MAIN ($a, $b, $file); +$file.IO.lines.head($b).skip($a-1)».say |
