diff options
Diffstat (limited to 'challenge-082')
| -rw-r--r-- | challenge-082/laurent-rosenfeld/blog.txt | 1 | ||||
| -rw-r--r-- | challenge-082/laurent-rosenfeld/perl/ch-1.pl | 21 | ||||
| -rw-r--r-- | challenge-082/laurent-rosenfeld/raku/ch-1.raku | 8 |
3 files changed, 30 insertions, 0 deletions
diff --git a/challenge-082/laurent-rosenfeld/blog.txt b/challenge-082/laurent-rosenfeld/blog.txt new file mode 100644 index 0000000000..6f76aa65ed --- /dev/null +++ b/challenge-082/laurent-rosenfeld/blog.txt @@ -0,0 +1 @@ +http://blogs.perl.org/users/laurent_r/2020/10/perl-weekly-challenge-82-common-factors.html diff --git a/challenge-082/laurent-rosenfeld/perl/ch-1.pl b/challenge-082/laurent-rosenfeld/perl/ch-1.pl new file mode 100644 index 0000000000..bb9fffa367 --- /dev/null +++ b/challenge-082/laurent-rosenfeld/perl/ch-1.pl @@ -0,0 +1,21 @@ +use strict; +use warnings; +use feature "say"; + +sub gcd { + my ($i, $j) = sort { $a <=> $b } @_; + while ($j) { + ($i, $j) = ($j, $i % $j); + } + return $i; +} + +sub common_factors { + my ($i, $j) = @_; + my $gcd = gcd ($i, $j); + return (1) if $gcd == 1; + my @factors = grep { $gcd % $_ == 0 } 1..$gcd; + my %unique = map {$_ => 1} @factors; + return sort { $a <=> $b } keys %unique; +} +say join " ", common_factors @ARGV; diff --git a/challenge-082/laurent-rosenfeld/raku/ch-1.raku b/challenge-082/laurent-rosenfeld/raku/ch-1.raku new file mode 100644 index 0000000000..12a67d9bd4 --- /dev/null +++ b/challenge-082/laurent-rosenfeld/raku/ch-1.raku @@ -0,0 +1,8 @@ +sub common_factors (Int $a, Int $b) { + my $gcd = $a gcd $b; + return (1,) if $gcd == 1; + return ($gcd,) if $gcd.is-prime; + return (1..$gcd).grep($gcd %% *).unique; +} +my @result = common_factors 12, 18; +say @result; |
