From c8bc68cd3adab0b91a98d88b7abf0feb044d768f Mon Sep 17 00:00:00 2001 From: lakpatashi Date: Sat, 17 Apr 2021 21:19:29 +0530 Subject: Finished challenge-008 with perl --- challenge-008/lakpatashi/README | 1 + challenge-008/lakpatashi/perl/ch-1.pl | 44 +++++++++++++++++++++++++++++++++++ challenge-008/lakpatashi/perl/ch-2.pl | 24 +++++++++++++++++++ 3 files changed, 69 insertions(+) create mode 100644 challenge-008/lakpatashi/README create mode 100755 challenge-008/lakpatashi/perl/ch-1.pl create mode 100755 challenge-008/lakpatashi/perl/ch-2.pl diff --git a/challenge-008/lakpatashi/README b/challenge-008/lakpatashi/README new file mode 100644 index 0000000000..bc153bd576 --- /dev/null +++ b/challenge-008/lakpatashi/README @@ -0,0 +1 @@ +Solution by lakpatashi diff --git a/challenge-008/lakpatashi/perl/ch-1.pl b/challenge-008/lakpatashi/perl/ch-1.pl new file mode 100755 index 0000000000..3f61167468 --- /dev/null +++ b/challenge-008/lakpatashi/perl/ch-1.pl @@ -0,0 +1,44 @@ +#!/usr/bin/perl + +use warnings; +use strict; + +# part 1 +# withIteration takes so much time to produce 5th element +# so I used formula +my @primeList = (2,3,5,7,13,17,19); # 11 does not work +for my $i (@primeList){ + print 2**($i-1)*(2**$i-1),"\n"; +} + +#withIteration(); + +sub withIteration{ # should be called without parameter + my $count = 0; + my $n = 2; + for (;;){ + #print "checking:: $n\n"; + if( isPerfect($n) ){ + print '='x10,"$n\n"; + $count++; + } + last if $count == 5; + $n++; + } +} + +sub isPerfect{ + my ($n)= @_; + my $divisorSum = 1; + for (2..int sqrt $n){ + if ($_**2 == $n){ + $divisorSum += $_; + return 0 if $divisorSum > $n; + }else{ + $divisorSum += $_ + int $n/$_ unless $n % $_; # add if divisor + } + } + return 1 if $divisorSum == $n; + return 0; +} + diff --git a/challenge-008/lakpatashi/perl/ch-2.pl b/challenge-008/lakpatashi/perl/ch-2.pl new file mode 100755 index 0000000000..4a9147d2bf --- /dev/null +++ b/challenge-008/lakpatashi/perl/ch-2.pl @@ -0,0 +1,24 @@ +#!/usr/bin/perl + +use warnings; +use strict; + +# part 2 +print "\n\n"; +use POSIX; +use List::Util qw (max); +my @arr = ("This", "is", "a test of the", "center function"); +my $n = max map {length $_}@arr; +print centreAlign($_, $n)."\n" for @arr; + +sub centreAlign{ + my ($str,$n) = @_; + my $m = ceil $n/2; + my $spaces = $m - mid($str); + return ' 'x$spaces.$str; +} + +sub mid{ + my ($str)= @_; + return ceil (length $str)/2; +} -- cgit