aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Bell_West <roger@firedrake.org>2020-04-06 10:39:26 +0100
committerRoger Bell_West <roger@firedrake.org>2020-04-06 10:39:26 +0100
commit7318f32e2d7c6f330598ea8a1cd5156242fee10d (patch)
treed03f72af6df3b51df64897a2b5c3fd919bca3746
parentac3d005bd7923e9b5982785215435d2bb1a4aabc (diff)
downloadperlweeklychallenge-club-7318f32e2d7c6f330598ea8a1cd5156242fee10d.tar.gz
perlweeklychallenge-club-7318f32e2d7c6f330598ea8a1cd5156242fee10d.tar.bz2
perlweeklychallenge-club-7318f32e2d7c6f330598ea8a1cd5156242fee10d.zip
Solutions for challenge #55
-rwxr-xr-xchallenge-055/roger-bell-west/perl5/ch-1.pl36
-rwxr-xr-xchallenge-055/roger-bell-west/perl5/ch-2.pl48
-rwxr-xr-xchallenge-055/roger-bell-west/perl6/ch-1.p633
3 files changed, 117 insertions, 0 deletions
diff --git a/challenge-055/roger-bell-west/perl5/ch-1.pl b/challenge-055/roger-bell-west/perl5/ch-1.pl
new file mode 100755
index 0000000000..8f74cc2846
--- /dev/null
+++ b/challenge-055/roger-bell-west/perl5/ch-1.pl
@@ -0,0 +1,36 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+
+my $b=$ARGV[0] || '010';
+
+my @res;
+my $max=0;
+
+my @b=split '',$b;
+foreach my $l (0..$#b) {
+ my $la=0;
+ if ($l>0) {
+ $la=scalar grep /1/,@b[0..$l-1];
+ }
+ foreach my $r ($l..$#b) {
+ my $ma=scalar grep /0/,@b[$l..$r];
+ my $ra=0;
+ if ($r<$#b) {
+ $ra=scalar grep /1/,@b[$r+1..$#b];
+ }
+ my $a=$la+$ma+$ra;
+ if ($a>$max) {
+ @res=();
+ }
+ if ($a>=$max) {
+ $max=$a;
+ push @res,[$l,$r];
+ }
+ }
+}
+
+foreach my $r (@res) {
+ print "(L=$r->[0], R=$r->[1])\n";
+}
diff --git a/challenge-055/roger-bell-west/perl5/ch-2.pl b/challenge-055/roger-bell-west/perl5/ch-2.pl
new file mode 100755
index 0000000000..6fc2fc7bbe
--- /dev/null
+++ b/challenge-055/roger-bell-west/perl5/ch-2.pl
@@ -0,0 +1,48 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+
+my @input=@ARGV;
+unless (@input) {
+ @input=(1..4);
+}
+my %candidates;
+map {$candidates{$_}++} @input;
+
+@input=sort @input;
+
+my @tree=map {[$_]} @input;
+
+while (1) {
+ if ($#{$tree[0]} == $#input) {
+ last;
+ }
+ my $branch=shift @tree;
+ my %cc=%candidates;;
+ map {$cc{$_}--} @{$branch};
+ foreach my $ca (keys %cc) {
+ if ($cc{$ca}<1) {
+ delete $cc{$ca};
+ }
+ }
+ my @cc;
+ my $dir=(scalar @{$branch})%2; # 1 = go down, 2 = go up
+ if ($dir==1) {
+ @cc=grep {$_ <= $branch->[-1]} keys %cc;
+ } else {
+ @cc=grep {$_ >= $branch->[-1]} keys %cc;
+ }
+ foreach my $c (sort @cc) {
+ push @tree,[@{$branch},$c];
+ }
+}
+
+my $l='';
+foreach my $a (@tree) {
+ my $t=join(', ',@{$a});
+ if ($t ne $l) {
+ print "[$t]\n";
+ $l=$t;
+ }
+}
diff --git a/challenge-055/roger-bell-west/perl6/ch-1.p6 b/challenge-055/roger-bell-west/perl6/ch-1.p6
new file mode 100755
index 0000000000..a2b7ff1501
--- /dev/null
+++ b/challenge-055/roger-bell-west/perl6/ch-1.p6
@@ -0,0 +1,33 @@
+#! /usr/bin/perl6
+
+my $b=@*ARGS[0] || '010';
+
+my @res;
+my $mx=0;
+
+my @b=$b.comb(/./);
+for (0..@b.end) -> $l {
+ my $la=0;
+ if ($l>0) {
+ $la=@b[0..$l-1].grep(/1/).elems;
+ }
+ for ($l..@b.end) -> $r {
+ my $ma=@b[$l..$r].grep(/0/).elems;
+ my $ra=0;
+ if ($r < @b.end) {
+ $ra=@b[$r+1..@b.end].grep(/1/).elems;
+ }
+ my $a=$la+$ma+$ra;
+ if ($a > $mx) {
+ @res=();
+ }
+ if ($a >= $mx) {
+ $mx=$a;
+ push @res,[$l,$r];
+ }
+ }
+}
+
+for @res -> $r {
+ say "(L=$r.[0], R=$r.[1])";
+}