diff options
| author | Michael Manring <michael@manring> | 2022-03-16 01:07:38 +0700 |
|---|---|---|
| committer | Michael Manring <michael@manring> | 2022-03-16 01:29:41 +0700 |
| commit | c14a49440f7a7c9ac1d70f817d5c7a12aa25dba4 (patch) | |
| tree | 0f3278170edf718af063ec2143178db786b142ad | |
| parent | 1354cf80de7115334f0f499a0f09bdcc020de0cc (diff) | |
| download | perlweeklychallenge-club-c14a49440f7a7c9ac1d70f817d5c7a12aa25dba4.tar.gz perlweeklychallenge-club-c14a49440f7a7c9ac1d70f817d5c7a12aa25dba4.tar.bz2 perlweeklychallenge-club-c14a49440f7a7c9ac1d70f817d5c7a12aa25dba4.zip | |
pwc156 solution in perl
| -rw-r--r-- | challenge-156/pokgopun/perl/ch-1.pl | 30 | ||||
| -rw-r--r-- | challenge-156/pokgopun/perl/ch-2.pl | 66 |
2 files changed, 96 insertions, 0 deletions
diff --git a/challenge-156/pokgopun/perl/ch-1.pl b/challenge-156/pokgopun/perl/ch-1.pl new file mode 100644 index 0000000000..1a6d96c0ee --- /dev/null +++ b/challenge-156/pokgopun/perl/ch-1.pl @@ -0,0 +1,30 @@ +use strict; +use warnings; +use Math::Prime::Util qw/is_prime/; + +my $n = shift; +$n = 10 unless $n && $n =~ /^\d+$/; +my $i; +my %is_prime; +my @prime; +{ + my $j = ++$i; + my $sum; + { + $sum += $j % 2; + $j = int($j / 2); + redo if $j; + } + if (defined $is_prime{$sum}) + { + push @prime, $i if $is_prime{$sum}; + } else { + $is_prime{$sum} = 0; + if (is_prime($sum)){ + $is_prime{$sum} = 1; + push @prime, $i + } + } + redo if @prime < $n; +} +printf "%s\n", join(", ",@prime); diff --git a/challenge-156/pokgopun/perl/ch-2.pl b/challenge-156/pokgopun/perl/ch-2.pl new file mode 100644 index 0000000000..eff159f7e6 --- /dev/null +++ b/challenge-156/pokgopun/perl/ch-2.pl @@ -0,0 +1,66 @@ +use strict; +use warnings; +use Data::Dumper; + +my $n = shift; +$n = 12 unless $n && $n =~ /^\d+$/; + +my @d = &getDivisors($n); +#printf "%s\n", join(", ", @d); +my $sum = eval(join(" + ",@d)); +my $o = 0; +{ + last unless $sum > $n; + $o = 1; + for my $i (2..$#d) { + my $ds = []; + &cTree([],$i,[@d],$ds); + if (&isSumsEqualN($n,$ds)){ + $o = 0; + last; + } + } +} +#printf "Input: \$n = %s, Output: %s\n", $n, $o; +printf "Input: \$n = %s\n", $n; +printf "Output: %s\n", $o; + +sub isSumsEqualN{ + my($n,$ds) = @_; + for (@$ds) { + my $sum = eval(join(" + ", @$_)); + if ($sum == $n){ + return 1; + } + } + return 0; +} +sub cTree { + my($c,$n,$e,$res) = @_; + if ( @$c == $n || @$c + @$e == $n ) { + my @res = @{[@$c,@$e]}[0..$n-1]; + if ($res) { + push @$res, \@res; + } else { + printf "%s\n", join(", ",@res); + } + } else { + { + my $ct = [@$c,@{$e}[0]]; + shift @$e if @$e; + &cTree($ct,$n,[@$e],$res); + redo if @$ct + @$e > $n; + } + } + } +sub getDivisors() { + my $n = shift; + my @d; + my $i; + { + $i++; + push @d, $i unless $n % $i; + redo if $i < int($n/2); + } + return @d; +} |
