diff options
| author | Roger Bell_West <roger@firedrake.org> | 2020-04-06 10:39:26 +0100 |
|---|---|---|
| committer | Roger Bell_West <roger@firedrake.org> | 2020-04-06 10:39:26 +0100 |
| commit | 7318f32e2d7c6f330598ea8a1cd5156242fee10d (patch) | |
| tree | d03f72af6df3b51df64897a2b5c3fd919bca3746 | |
| parent | ac3d005bd7923e9b5982785215435d2bb1a4aabc (diff) | |
| download | perlweeklychallenge-club-7318f32e2d7c6f330598ea8a1cd5156242fee10d.tar.gz perlweeklychallenge-club-7318f32e2d7c6f330598ea8a1cd5156242fee10d.tar.bz2 perlweeklychallenge-club-7318f32e2d7c6f330598ea8a1cd5156242fee10d.zip | |
Solutions for challenge #55
| -rwxr-xr-x | challenge-055/roger-bell-west/perl5/ch-1.pl | 36 | ||||
| -rwxr-xr-x | challenge-055/roger-bell-west/perl5/ch-2.pl | 48 | ||||
| -rwxr-xr-x | challenge-055/roger-bell-west/perl6/ch-1.p6 | 33 |
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])"; +} |
