aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2020-04-28 11:56:30 +0100
committerGitHub <noreply@github.com>2020-04-28 11:56:30 +0100
commit802d92a4876a1f2daf9283a2232cbcea0c0ca191 (patch)
treeb82b94ab3f0e2003ed04712adf8cb7e4d6a5948d
parent469190e7290185066b4fa4132d4e3d3ef95e8848 (diff)
parent589498b7fd337a4b6d5faf13ba5790388abbbf8a (diff)
downloadperlweeklychallenge-club-802d92a4876a1f2daf9283a2232cbcea0c0ca191.tar.gz
perlweeklychallenge-club-802d92a4876a1f2daf9283a2232cbcea0c0ca191.tar.bz2
perlweeklychallenge-club-802d92a4876a1f2daf9283a2232cbcea0c0ca191.zip
Merge pull request #1646 from Firedrake/rogerbw-challenge-058
Solutions for challenge #58.
-rwxr-xr-xchallenge-058/roger-bell-west/perl5/ch-1.pl40
-rwxr-xr-xchallenge-058/roger-bell-west/perl5/ch-2.pl36
2 files changed, 76 insertions, 0 deletions
diff --git a/challenge-058/roger-bell-west/perl5/ch-1.pl b/challenge-058/roger-bell-west/perl5/ch-1.pl
new file mode 100755
index 0000000000..65498d24d9
--- /dev/null
+++ b/challenge-058/roger-bell-west/perl5/ch-1.pl
@@ -0,0 +1,40 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+
+use List::Util qw(max);
+
+foreach my $vtest (
+ ['0.1','1.1','-1'],
+ ['2.0','1.2','1'],
+ ['1.2','1.2_5','-1'],
+ ['1.2.1','1.2_1','1'],
+ ['1.2.1','1.2.1','0'],
+ ) {
+ my $vr=compare($vtest->[0],$vtest->[1]);
+ print "$vtest->[0] $vtest->[1] $vtest->[2] $vr\n";
+}
+
+sub compare {
+ my @v=@_;
+ my @s;
+ my %l=('_' => 1, '.' => 2);
+ foreach my $i (0,1) {
+ unless ($v[$i] =~ /^[0-9]+([._][0-9]+)*$/) {
+ die "$v[$i] is not a valid version\n";
+ }
+ $s[$i]= [split /([._])/,$v[$i]];
+ for (my $j=1;$j<=$#{$s[$i]};$j+=2) {
+ $s[$i][$j]=$l{$s[$i][$j]};
+ }
+ }
+ my $k=0;
+ foreach my $j (0..max(map {$#{$_}} @s)) {
+ $k=(($s[0][$j] || 0) <=> ($s[1][$j] || 0));
+ if ($k != 0) {
+ last;
+ }
+ }
+ return $k;
+}
diff --git a/challenge-058/roger-bell-west/perl5/ch-2.pl b/challenge-058/roger-bell-west/perl5/ch-2.pl
new file mode 100755
index 0000000000..1339ad06b3
--- /dev/null
+++ b/challenge-058/roger-bell-west/perl5/ch-2.pl
@@ -0,0 +1,36 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+
+my @H = (2, 6, 4, 5, 1, 3); # Heights
+my @T = (1, 0, 2, 0, 1, 2); # Number of taller people in front
+
+my @i=sort {$H[$b] <=> $H[$a]} (0..$#H); # ordered by decreasing height
+my @n;
+
+foreach my $p (@i) {
+ if ($T[$p]==0) {
+ unshift @n,$p+1;
+ } elsif ($T[$p] == scalar @n) {
+ push @n,$p+1;
+ } else {
+ splice @n,$T[$p],0,$p+1;
+ }
+}
+
+print join(', ',@n),"\n";
+
+foreach my $ti (0..$#n) {
+ my $tx=$n[$ti]-1;
+ my $mh=$H[$tx];
+ my $hi=0;
+ foreach my $tj (0..$ti-1) {
+ if ($H[$n[$tj]-1] > $mh) {
+ $hi++;
+ }
+ }
+ unless ($hi == $T[$tx]) {
+ die "index $ti failed\n";
+ }
+}