From 27a42b2c0c633a11815ea027b69bd8b63a6296e6 Mon Sep 17 00:00:00 2001 From: "Kian-Meng, Ang" Date: Sun, 1 Sep 2019 21:00:05 +0800 Subject: Add task 1 & 2 for challenge 023 --- challenge-023/kian-meng-ang/perl5/ch-1.pl | 47 +++++++++++++++++++++++++++++++ challenge-023/kian-meng-ang/perl5/ch-2.pl | 36 +++++++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 challenge-023/kian-meng-ang/perl5/ch-1.pl create mode 100644 challenge-023/kian-meng-ang/perl5/ch-2.pl 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 |; +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 at ch-1.pl line 10 + +$ perl ch-1.pl 1 +USAGE: perl ch-1.pl 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 -- cgit