From 1f3aee3539964c567010c11f189ddba4cbb873cc Mon Sep 17 00:00:00 2001 From: Alexander Pankoff Date: Mon, 12 Oct 2020 11:50:09 +0200 Subject: add perl solution for wk-081 ch-1 --- challenge-082/alexander-pankoff/perl/ch-1.pl | 53 ++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100755 challenge-082/alexander-pankoff/perl/ch-1.pl diff --git a/challenge-082/alexander-pankoff/perl/ch-1.pl b/challenge-082/alexander-pankoff/perl/ch-1.pl new file mode 100755 index 0000000000..ef11c95c46 --- /dev/null +++ b/challenge-082/alexander-pankoff/perl/ch-1.pl @@ -0,0 +1,53 @@ +#!/usr/bin/env perl +use v5.20; +use utf8; +use strict; +use warnings; +use autodie; +use feature qw(say signatures); +no warnings 'experimental::signatures'; + +use Pod::Usage; + +use List::Util qw(min all any); +use Scalar::Util qw(looks_like_number); + +=pod + +=head1 SYNOPSIS + +This Script will print a list of common factors from M and N + +=head1 USAGE + +ch-1.pl + +=cut + +pod2usage( + -message => "$0: Expects 2 postive numbers", + -exitval => 1, + -verbose => 99, + -sections => "USAGE|SYNOPSIS", + ) + if @ARGV != 2 + or any { !looks_like_number($_) || $_ < 1 } @ARGV; + +my ( $M, $N ) = @ARGV; +say format_list( common_factors( $M, $N ) ); + +sub common_factors ( $m, $n ) { + grep { + my $check_factor = $_; + all { is_factor( $check_factor, $_ ) } ( $m, $n ); + } 1 .. min( $m, $n ); +} + +sub is_factor ( $divisor, $value ) { + return $value % $divisor == 0; +} + +sub format_list(@list) { + return '(' . join( ', ', @list ) . ')'; +} + -- cgit