aboutsummaryrefslogtreecommitdiff
path: root/challenge-142
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2021-12-13 01:22:39 +0000
committerGitHub <noreply@github.com>2021-12-13 01:22:39 +0000
commitbe84f6dcea70a956052bcd93971b9252eb4c74da (patch)
tree2868ddba11991d7ec342ebcf109929ec6ecef869 /challenge-142
parent0c62a7d83e539ccb32e3220a4c96ca810f149562 (diff)
parentc3ecb3493a4b04d53e6c1a8e93f75a1cac44c962 (diff)
downloadperlweeklychallenge-club-be84f6dcea70a956052bcd93971b9252eb4c74da.tar.gz
perlweeklychallenge-club-be84f6dcea70a956052bcd93971b9252eb4c74da.tar.bz2
perlweeklychallenge-club-be84f6dcea70a956052bcd93971b9252eb4c74da.zip
Merge pull request #5362 from adamcrussell/challenge-142
Perl solutions and blog for Challenge 142.
Diffstat (limited to 'challenge-142')
-rw-r--r--challenge-142/adam-russell/blog.txt1
-rw-r--r--challenge-142/adam-russell/perl/ch-1.pl41
-rw-r--r--challenge-142/adam-russell/perl/ch-2.pl57
3 files changed, 99 insertions, 0 deletions
diff --git a/challenge-142/adam-russell/blog.txt b/challenge-142/adam-russell/blog.txt
new file mode 100644
index 0000000000..32492ce28f
--- /dev/null
+++ b/challenge-142/adam-russell/blog.txt
@@ -0,0 +1 @@
+http://www.rabbitfarm.com/cgi-bin/blosxom/2021/12/12/perl
diff --git a/challenge-142/adam-russell/perl/ch-1.pl b/challenge-142/adam-russell/perl/ch-1.pl
new file mode 100644
index 0000000000..613d763ac9
--- /dev/null
+++ b/challenge-142/adam-russell/perl/ch-1.pl
@@ -0,0 +1,41 @@
+use strict;
+use warnings;
+##
+# You are given positive integers, $m and $n. Write a script to
+# find total count of divisors of $m having last digit $n
+##
+sub factor{
+ my($n) = @_;
+ my @factors = (1);
+ foreach my $j (2 .. sqrt($n)){
+ push @factors, $j if $n % $j == 0;
+ push @factors, ($n / $j) if $n % $j == 0 && $j ** 2 != $n;
+ }
+ return @factors;
+}
+
+sub divisors_last_digit{
+ my($m, $n) = @_;
+ my @divisors;
+ my @factors = factor($m);
+ {
+ my $factor = pop @factors;
+ push @divisors, $factor if $n == substr($factor, -1);
+ redo if @factors;
+ }
+ return sort {$a <=> $b} @divisors;
+}
+
+MAIN:{
+ my($m, $n);
+ my @divisors;
+ ($m, $n) = (24, 2);
+ @divisors = divisors_last_digit($m, $n);
+ print "($m, $n): " . @divisors . " --> " . join(", ", @divisors) . "\n";
+ ($m, $n) = (75, 5);
+ @divisors = divisors_last_digit($m, $n);
+ print "($m, $n): " . @divisors . " --> " . join(", ", @divisors) . "\n";
+ ($m, $n) = (30, 5);
+ @divisors = divisors_last_digit(30, 5);
+ print "($m, $n): " . @divisors . " --> " . join(", ", @divisors) . "\n";
+}
diff --git a/challenge-142/adam-russell/perl/ch-2.pl b/challenge-142/adam-russell/perl/ch-2.pl
new file mode 100644
index 0000000000..290e4998db
--- /dev/null
+++ b/challenge-142/adam-russell/perl/ch-2.pl
@@ -0,0 +1,57 @@
+use strict;
+use warnings;
+##
+# Implement Sleep Sort.
+##
+use Thread::Pool;
+
+sub create_workers{
+ my @numbers = @_;
+ my $count = @numbers;
+ my $workers = new Thread::Pool({
+ optimize => "cpu",
+ do => \&sleeper,
+ workers => $count,
+ maxjobs => $count,
+ minjobs => $count
+ });
+ return $workers;
+}
+
+sub sleeper{
+ my($n) = @_;
+ sleep($n);
+ return $n;
+}
+
+sub sleep_sort{
+ my($numbers, $workers) = @_;
+ my @jobs;
+ my @sorted;
+ for my $n (@{$numbers}){
+ my $job_id = $workers->job($n);
+ push @jobs, $job_id;
+ }
+ {
+ my $job = pop @jobs;
+ my @result = $workers->result_any(\$job);
+ if(!@result){
+ push @jobs, $job;
+ }
+ else{
+ push @sorted, $result[0];
+ }
+ redo if @jobs;
+ }
+ $workers->shutdown;
+ return @sorted;
+}
+
+MAIN:{
+ my @numbers;
+ my @sorted;
+ @numbers = map{int(rand($_) + 1)} (0 .. 9);
+ print join(", ", @numbers) . "\n";
+ @sorted = sleep_sort(\@numbers, create_workers(@numbers));
+ print join(", ", @sorted) . "\n";
+}