diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2021-12-13 01:22:39 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-12-13 01:22:39 +0000 |
| commit | be84f6dcea70a956052bcd93971b9252eb4c74da (patch) | |
| tree | 2868ddba11991d7ec342ebcf109929ec6ecef869 /challenge-142 | |
| parent | 0c62a7d83e539ccb32e3220a4c96ca810f149562 (diff) | |
| parent | c3ecb3493a4b04d53e6c1a8e93f75a1cac44c962 (diff) | |
| download | perlweeklychallenge-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.txt | 1 | ||||
| -rw-r--r-- | challenge-142/adam-russell/perl/ch-1.pl | 41 | ||||
| -rw-r--r-- | challenge-142/adam-russell/perl/ch-2.pl | 57 |
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"; +} |
