aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKian-Meng, Ang <kianmeng@cpan.org>2019-09-01 21:00:05 +0800
committerKian-Meng, Ang <kianmeng@cpan.org>2019-09-01 21:00:05 +0800
commit27a42b2c0c633a11815ea027b69bd8b63a6296e6 (patch)
tree37e6973e0661f7d2b783b6de6fc4188c94f209f6
parent9de628273bbacc92999bac1131f72924798e322d (diff)
downloadperlweeklychallenge-club-27a42b2c0c633a11815ea027b69bd8b63a6296e6.tar.gz
perlweeklychallenge-club-27a42b2c0c633a11815ea027b69bd8b63a6296e6.tar.bz2
perlweeklychallenge-club-27a42b2c0c633a11815ea027b69bd8b63a6296e6.zip
Add task 1 & 2 for challenge 023
-rw-r--r--challenge-023/kian-meng-ang/perl5/ch-1.pl47
-rw-r--r--challenge-023/kian-meng-ang/perl5/ch-2.pl36
2 files changed, 83 insertions, 0 deletions
diff --git a/challenge-023/kian-meng-ang/perl5/ch-1.pl b/challenge-023/kian-meng-ang/perl5/ch-1.pl
new file mode 100644
index 0000000000..06b7e92295
--- /dev/null
+++ b/challenge-023/kian-meng-ang/perl5/ch-1.pl
@@ -0,0 +1,47 @@
+#!/usr/bin/env perl
+# vi:et:sw=4 ts=4 ft=perl
+
+use strict;
+use warnings;
+use utf8;
+use feature qw(say);
+use constant USAGE => qq|USAGE: perl $0 <order> <n1,n2,...,nN>|;
+use Carp;
+
+my $order = $ARGV[0] || croak USAGE;
+my @seq = split /,/, $ARGV[1] || croak USAGE;
+scalar @seq > $order || croak q|ERROR: Total sequence of number must larger than order|;
+
+my @trace;
+foreach my $o (1 .. $order) {
+ my @nseq;
+ foreach my $s (1 .. scalar @seq - 1) {
+ push @nseq, $seq[$s] - $seq[$s - 1];
+ }
+ push @trace, \@nseq;
+ @seq = @nseq;
+}
+
+foreach (0 .. scalar @trace - 1) {
+ say sprintf q|order:%s seq:%s|, $_ + 1, join q|,|, @{$trace[$_]};
+}
+
+1;
+
+__END__
+
+$ perl ch-1.pl
+USAGE: perl ch-1.pl <order> <n1,n2,...,nN> at ch-1.pl line 10
+
+$ perl ch-1.pl 1
+USAGE: perl ch-1.pl <order> <n1,n2,...,nN> at ch-1.pl line 11.
+
+$ perl ch-1.pl 1 5
+ERROR: Total sequence of number must larger than order at ch-1.pl line 12.
+
+$ perl ch-1.pl 5 5,9,2,8,1,6
+order:1 seq:4,-7,6,-7,5
+order:2 seq:-11,13,-13,12
+order:3 seq:24,-26,25
+order:4 seq:-50,51
+order:5 seq:101
diff --git a/challenge-023/kian-meng-ang/perl5/ch-2.pl b/challenge-023/kian-meng-ang/perl5/ch-2.pl
new file mode 100644
index 0000000000..f3e61b8716
--- /dev/null
+++ b/challenge-023/kian-meng-ang/perl5/ch-2.pl
@@ -0,0 +1,36 @@
+#!/usr/bin/env perl
+# vi:et:sw=4 ts=4 ft=perl
+
+use strict;
+use warnings;
+use utf8;
+use feature qw(say signatures);
+no warnings 'experimental::signatures';
+
+use Carp;
+use ntheory qw(primes);
+
+MAIN: {
+ my $number = $ARGV[0] || croak 'ERROR: missing number';
+ say sprintf q|Number: %s have prime factors: %s|,
+ $number, join q|,|, prime_factors($number);
+}
+
+sub prime_factors($number) {
+ my $primes = primes(2, $number);
+ my @factors;
+ foreach my $prime (@{$primes}) {
+ while ($number % $prime == 0) {
+ $number = $number / $prime;
+ push @factors, $prime;
+ next if $number == 1;
+ }
+ }
+ return @factors;
+}
+
+1;
+
+__END__
+$ perl ch-2.pl 228
+Number: 228 have prime factors: 2,2,3,19