diff options
| author | Luis Mochan <mochan@fis.unam.mx> | 2022-07-04 14:46:35 -0500 |
|---|---|---|
| committer | Luis Mochan <mochan@fis.unam.mx> | 2022-07-04 14:46:35 -0500 |
| commit | 713277781459dd48bd8eb58cba05501db3dea286 (patch) | |
| tree | 27e2e91db3038cf90fc7fb8a38090defa529b5ab | |
| parent | 1f41d4ceb7f29ef1013277601d12d0029d2c3a8c (diff) | |
| download | perlweeklychallenge-club-713277781459dd48bd8eb58cba05501db3dea286.tar.gz perlweeklychallenge-club-713277781459dd48bd8eb58cba05501db3dea286.tar.bz2 perlweeklychallenge-club-713277781459dd48bd8eb58cba05501db3dea286.zip | |
Solve PWC172
| -rw-r--r-- | challenge-172/wlmb/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-172/wlmb/perl/ch-1.pl | 25 | ||||
| -rwxr-xr-x | challenge-172/wlmb/perl/ch-2.pl | 20 |
3 files changed, 46 insertions, 0 deletions
diff --git a/challenge-172/wlmb/blog.txt b/challenge-172/wlmb/blog.txt new file mode 100644 index 0000000000..7aef09841c --- /dev/null +++ b/challenge-172/wlmb/blog.txt @@ -0,0 +1 @@ +https://wlmb.github.io/2022/07/04/PWC172/ diff --git a/challenge-172/wlmb/perl/ch-1.pl b/challenge-172/wlmb/perl/ch-1.pl new file mode 100755 index 0000000000..748d5fff51 --- /dev/null +++ b/challenge-172/wlmb/perl/ch-1.pl @@ -0,0 +1,25 @@ +#!/usr/bin/env perl +# Perl weekly challenge 172 +# Task 1: Prime partition +# +# See https://wlmb.github.io/2022/07/04/PWC172/#task-1-prime-partition +use v5.36; +use Math::Prime::Util qw(primes); +say("Usage: ./ch-1.pl M N\nto find the N-term prime partitions of M\n"), exit + unless @ARGV==2; +my ($m,$n)=@ARGV; +my @primes=@{primes($m)}; +my @result= partitions($m,$n,\@primes); +say "$m=", join "+", @$_ foreach @result; +sub partitions($m, $n, $set){ + # return all partitions of $m into $n elements of the ordered $set + return $m==0?([]):() if $n==0; # () means failure, ([]) means we are done + my @set=grep {$_<=$m} @$set; # remove high unneeded elements + my @results=(); + while(@set){ + my $element=pop @set; # try highest elements first + my @r=partitions($m-$element, $n-1, \@set); + push @results, map {push @$_, $element; $_} @r if @r; + } + return @results; +} diff --git a/challenge-172/wlmb/perl/ch-2.pl b/challenge-172/wlmb/perl/ch-2.pl new file mode 100755 index 0000000000..dec20342f1 --- /dev/null +++ b/challenge-172/wlmb/perl/ch-2.pl @@ -0,0 +1,20 @@ +#!/usr/bin/env perl +# Perl weekly challenge 172 +# Task 2: Prime partition +# +# See https://wlmb.github.io/2022/07/04/PWC172/#task-1-five-number-summary +use v5.36; +say("Usage: ./ch-2.pl N1 N2...Nk\nto find the five-number summary of the sequence N1...Nk"), exit + unless @ARGV; +say("The sequence should have at least 2 elements"), exit unless @ARGV>=2; +my @data=sort {$a<=>$b} @ARGV; +my ($min, $max)=($data[0], $data[-1]); +my $median=median(@data); +my $q1=median(@data[0..(@data-2)/2]); +my $q3=median(@data[(@data+1)/2..@data-1]); +say join " ", "The five-number summary of ", @ARGV, "is"; +say "min=$min, Q1=$q1, median=$median, Q3=$q3, max=$max"; + +sub median(@d){ + @d%2?$d[(@d-1)/2]:($d[@d/2-1]+$d[@d/2])/2 +} |
