diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2021-08-31 00:07:45 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-08-31 00:07:45 +0100 |
| commit | 0a6edcf282cbe52b61572bbc78b084681a5e2c71 (patch) | |
| tree | 29d1ae8133cf4d1c4ca8a0c1b7234e118b2d4e33 | |
| parent | 398da02598962bebffa9a3f0622b71bfefa5cfcc (diff) | |
| parent | f04d46c144950cbf45bc384faa68332ffd461947 (diff) | |
| download | perlweeklychallenge-club-0a6edcf282cbe52b61572bbc78b084681a5e2c71.tar.gz perlweeklychallenge-club-0a6edcf282cbe52b61572bbc78b084681a5e2c71.tar.bz2 perlweeklychallenge-club-0a6edcf282cbe52b61572bbc78b084681a5e2c71.zip | |
Merge pull request #4820 from Firedrake/rogerbw-challenge-128
Rogerbw challenge 128
| -rwxr-xr-x | challenge-128/roger-bell-west/perl/ch-1.pl | 52 | ||||
| -rwxr-xr-x | challenge-128/roger-bell-west/perl/ch-2.pl | 34 | ||||
| -rwxr-xr-x | challenge-128/roger-bell-west/python/ch-1.py | 40 | ||||
| -rwxr-xr-x | challenge-128/roger-bell-west/python/ch-2.py | 29 | ||||
| -rwxr-xr-x | challenge-128/roger-bell-west/raku/ch-1.p6 | 49 | ||||
| -rwxr-xr-x | challenge-128/roger-bell-west/raku/ch-2.p6 | 32 | ||||
| -rwxr-xr-x | challenge-128/roger-bell-west/ruby/ch-1.rb | 51 | ||||
| -rwxr-xr-x | challenge-128/roger-bell-west/ruby/ch-2.rb | 34 | ||||
| -rwxr-xr-x | challenge-128/roger-bell-west/rust/ch-1.rs | 55 | ||||
| -rwxr-xr-x | challenge-128/roger-bell-west/rust/ch-2.rs | 35 |
10 files changed, 411 insertions, 0 deletions
diff --git a/challenge-128/roger-bell-west/perl/ch-1.pl b/challenge-128/roger-bell-west/perl/ch-1.pl new file mode 100755 index 0000000000..6d4f02372f --- /dev/null +++ b/challenge-128/roger-bell-west/perl/ch-1.pl @@ -0,0 +1,52 @@ +#! /usr/bin/perl + +use strict; +use warnings; + +use Test::More tests => 2; + +is_deeply(msm([[1,0,0,0,1,0],[1,1,0,0,0,1],[1,0,0,0,0,0]]), + [[0,0,0],[0,0,0]],'example 1'); +is_deeply(msm([[0,0,1,1],[0,0,0,1],[0,0,1,0]]), + [[0,0],[0,0],[0,0]],'example 2'); + +use List::Util qw(min); + +sub msm { + my $m=shift; + my $y=scalar @{$m}; + my $x=scalar @{$m->[0]}; + my $mxa=0; + my @oc; + foreach my $yi (0..$y-1) { + foreach my $xi (0..$x-1) { + if ($m->[$yi][$xi]==0) { + my @rl; + my $mrl=$x-$xi; + foreach my $yj ($yi..$y-1) { + foreach my $xj ($xi..min($xi+$mrl,$x)-1) { + if ($m->[$yj][$xj] != 0) { + $mrl=min($xj-$xi,$mrl); + last; + } + } + push @rl,$mrl; + } + foreach my $n (0..$#rl) { + if ($rl[$n]>0) { + my $a=$rl[$n]*($n+1); + if ($a >= $mxa) { + $mxa=$a; + @oc=($rl[$n],$n+1); + } + } + } + } + } + } + my @o; + foreach my $y (1..$oc[1]) { + push @o,[(0) x $oc[0]]; + } + return \@o; +} diff --git a/challenge-128/roger-bell-west/perl/ch-2.pl b/challenge-128/roger-bell-west/perl/ch-2.pl new file mode 100755 index 0000000000..6054db3913 --- /dev/null +++ b/challenge-128/roger-bell-west/perl/ch-2.pl @@ -0,0 +1,34 @@ +#! /usr/bin/perl + +use strict; +use warnings; + +use Test::More tests => 2; + +is(mp([qw(11:20 14:30)], + [qw(11:50 15:00)]), + 1,'example 1'); +is(mp([qw(10:20 11:00 11:10 12:20 16:20 19:00)], + [qw(10:30 13:20 12:40 12:50 20:20 21:20)]), + 3,'example 2'); + +sub mp { + my ($aa,$da)=@_; + my %e; + foreach my $p ([$aa,1],[$da,-1]) { + foreach my $tm (@{$p->[0]}) { + if ($tm =~ /([0-9]+):([0-9]+)/) { + $e{$1*60+$2}+=$p->[1]; + } + } + } + my $pt=0; + my $pm=0; + foreach my $ts (sort {$a <=> $b} keys %e) { + $pt+=$e{$ts}; + if ($pt > $pm) { + $pm=$pt; + } + } + return $pm; +} diff --git a/challenge-128/roger-bell-west/python/ch-1.py b/challenge-128/roger-bell-west/python/ch-1.py new file mode 100755 index 0000000000..96a27b2453 --- /dev/null +++ b/challenge-128/roger-bell-west/python/ch-1.py @@ -0,0 +1,40 @@ +#! /usr/bin/python3 + +import unittest + +def msm(m): + y=len(m) + x=len(m[0]) + mxa=0 + oc=[] + for yi in range(y): + for xi in range(x): + if m[yi][xi]==0: + rl=[] + mrl=x-xi + for yj in range(yi,y): + for xj in range(xi,min(xi+mrl,x)): + if m[yj][xj] != 0: + mrl=min(xj-xi,mrl) + break + rl.append(mrl) + for n in range(len(rl)): + if rl[n]>0: + a=rl[n]*(n+1) + if a >= mxa: + mxa=a + oc=[rl[n],n+1] + o=[] + for i in range(oc[1]): + o.append([0] * oc[0]) + return o + +class TestMsm(unittest.TestCase): + + def test_ex1(self): + self.assertEqual(msm([[1,0,0,0,1,0],[1,1,0,0,0,1],[1,0,0,0,0,0]]),[[0,0,0],[0,0,0]],'example 1') + + def test_ex2(self): + self.assertEqual(msm([[0,0,1,1],[0,0,0,1],[0,0,1,0]]),[[0,0],[0,0],[0,0]],'example 2') + +unittest.main() diff --git a/challenge-128/roger-bell-west/python/ch-2.py b/challenge-128/roger-bell-west/python/ch-2.py new file mode 100755 index 0000000000..be1990c384 --- /dev/null +++ b/challenge-128/roger-bell-west/python/ch-2.py @@ -0,0 +1,29 @@ +#! /usr/bin/python3 + +import unittest + +from collections import defaultdict + +def mp(aa,da): + e=defaultdict(lambda: 0) + for p in [[aa,1],[da,-1]]: + for tm in p[0]: + hm=tm.split(":") + e[int(hm[0])*60+int(hm[1])] += p[1] + pt=0 + pm=0 + for ts in sorted(e.keys()): + pt+=e[ts] + if pt > pm: + pm=pt + return pm + +class TestMp(unittest.TestCase): + + def test_ex1(self): + self.assertEqual(mp(["11:20","14:30"],["11:50","15:00"]),1,'example 1') + + def test_ex2(self): + self.assertEqual(mp(["10:20","11:00","11:10","12:20","16:20","19:00"],["10:30","13:20","12:40","12:50","20:20","21:20"]),3,'example 2') + +unittest.main() diff --git a/challenge-128/roger-bell-west/raku/ch-1.p6 b/challenge-128/roger-bell-west/raku/ch-1.p6 new file mode 100755 index 0000000000..e319147f11 --- /dev/null +++ b/challenge-128/roger-bell-west/raku/ch-1.p6 @@ -0,0 +1,49 @@ +#! /usr/bin/perl6 + +use Test; + +plan 2; + +is-deeply(msm([[1,0,0,0,1,0],[1,1,0,0,0,1],[1,0,0,0,0,0]]), + [[0,0,0],[0,0,0]],'example 1'); +is-deeply(msm([[0,0,1,1],[0,0,0,1],[0,0,1,0]]), + [[0,0],[0,0],[0,0]],'example 2'); + + +sub msm(@m) { + my $y=@m.elems; + my $x=@m[0].elems; + my $mxa=0; + my @oc; + for (0..$y-1) -> $yi { + for (0..$x-1) -> $xi { + if (@m[$yi][$xi]==0) { + my @rl; + my $mrl=$x-$xi; + for ($yi..$y-1) -> $yj { + for ($xi..min($xi+$mrl,$x)-1) -> $xj { + if (@m[$yj][$xj] != 0) { + $mrl=min($xj-$xi,$mrl); + last; + } + } + push @rl,$mrl; + } + for (0..@rl.end) -> $n { + if (@rl[$n]>0) { + my $a=@rl[$n]*($n+1); + if ($a >= $mxa) { + $mxa=$a; + @oc=(@rl[$n],$n+1); + } + } + } + } + } + } + my @o; + for (1..@oc[1]) -> $y { + push @o,[0 xx @oc[0]]; + } + return @o; +} diff --git a/challenge-128/roger-bell-west/raku/ch-2.p6 b/challenge-128/roger-bell-west/raku/ch-2.p6 new file mode 100755 index 0000000000..4feac471f5 --- /dev/null +++ b/challenge-128/roger-bell-west/raku/ch-2.p6 @@ -0,0 +1,32 @@ +#! /usr/bin/perl6 + +use Test; +plan 2; + + +is(mp([qw{11:20 14:30}], + [qw{11:50 15:00}]), + 1,'example 1'); +is(mp([qw{10:20 11:00 11:10 12:20 16:20 19:00}], + [qw{10:30 13:20 12:40 12:50 20:20 21:20}]), + 3,'example 2'); + +sub mp(@aa,@da) { + my %e; + for ([@aa,1],[@da,-1]) -> @p { + for @(@p[0]) -> $tm { + if ($tm ~~ /(<[0..9]>+)\:(<[0..9]>+)/) { + %e{$0*60+$1}+=@p[1]; + } + } + } + my $pt=0; + my $pm=0; + for %e.keys.sort({$^a <=> $^b}) -> $ts { + $pt+=%e{$ts}; + if ($pt > $pm) { + $pm=$pt; + } + } + return $pm; +} diff --git a/challenge-128/roger-bell-west/ruby/ch-1.rb b/challenge-128/roger-bell-west/ruby/ch-1.rb new file mode 100755 index 0000000000..7c11831fe5 --- /dev/null +++ b/challenge-128/roger-bell-west/ruby/ch-1.rb @@ -0,0 +1,51 @@ +#! /usr/bin/ruby + +require 'test/unit' + +def msm(m) + y=m.length() + x=m[0].length() + mxa=0 + oc=[] + 0.upto(y-1) do |yi| + 0.upto(x-1) do |xi| + if m[yi][xi]==0 then + rl=[] + mrl=x-xi + yi.upto(y-1) do |yj| + xi.upto([xi+mrl,x].min-1) do |xj| + if m[yj][xj] != 0 then + mrl=[xj-xi,mrl].min + break + end + end + rl.push(mrl) + end + 0.upto(rl.length()-1) do |n| + if rl[n]>0 then + a=rl[n]*(n+1) + if a >= mxa then + mxa=a + oc=[rl[n],n+1] + end + end + end + end + end + end + return Array.new(oc[1]) {Array.new(oc[0],0)} +end + +class TestMsm < Test::Unit::TestCase + + def test_ex1 + assert_equal([[0,0,0],[0,0,0]], + msm([[1,0,0,0,1,0],[1,1,0,0,0,1],[1,0,0,0,0,0]])) + end + + def test_ex2 + assert_equal([[0,0],[0,0],[0,0]], + msm([[0,0,1,1],[0,0,0,1],[0,0,1,0]])) + end + +end diff --git a/challenge-128/roger-bell-west/ruby/ch-2.rb b/challenge-128/roger-bell-west/ruby/ch-2.rb new file mode 100755 index 0000000000..8187520e8c --- /dev/null +++ b/challenge-128/roger-bell-west/ruby/ch-2.rb @@ -0,0 +1,34 @@ +#! /usr/bin/ruby + +require 'test/unit' + +def mp(aa,da) + e=Hash.new(0) + for p in [[aa,1],[da,-1]] + for tm in p[0] + hm=tm.split(":") + e[(hm[0].to_i)*60+hm[1].to_i] += p[1] + end + end + pt=0 + pm=0 + for ts in e.sort_by {|k, v| k.to_i} + pt+=ts[1] + if pt > pm then + pm=pt + end + end + return pm +end + +class TestMp < Test::Unit::TestCase + + def test_ex1 + assert_equal(1,mp(["11:20","14:30"],["11:50","15:00"])) + end + + def test_ex2 + assert_equal(3,mp(["10:20","11:00","11:10","12:20","16:20","19:00"],["10:30","13:20","12:40","12:50","20:20","21:20"])) + end + +end diff --git a/challenge-128/roger-bell-west/rust/ch-1.rs b/challenge-128/roger-bell-west/rust/ch-1.rs new file mode 100755 index 0000000000..6bb994d8d8 --- /dev/null +++ b/challenge-128/roger-bell-west/rust/ch-1.rs @@ -0,0 +1,55 @@ +#! /bin/sh +//usr/bin/env rustc --test $0 -o ${0}x && ./${0}x; rm -f ${0}x ; exit + +#[test] +fn test_ex1() { + assert_eq!(msm(vec![vec![1,0,0,0,1,0],vec![1,1,0,0,0,1],vec![1,0,0,0,0,0]]), + vec![vec![0,0,0],vec![0,0,0]]); +} + +#[test] +fn test_ex2() { + assert_eq!(msm(vec![vec![0,0,1,1],vec![0,0,0,1],vec![0,0,1,0]]), + vec![vec![0,0],vec![0,0],vec![0,0]]); +} + +fn msm(m: Vec<Vec<i64>>) -> Vec<Vec<i64>> { + let y=m.len(); + let x=m[0].len(); + let mut mxa: usize=0; + let mut oc: Vec<usize>=vec![]; + for yi in 0..y { + for xi in 0..x { + if m[yi][xi]==0 { + let mut rl: Vec<usize>=vec![]; + let mut mrl=x-xi; + for yj in yi..y { + for xj in xi..min(xi+mrl,x) { + if m[yj][xj] != 0 { + mrl=min(xj-xi,mrl); + break; + } + } + rl.push(mrl); + } + for n in 0..rl.len() { + if rl[n]>0 { + let a=rl[n]*(n+1); + if a >= mxa { + mxa=a; + oc=vec![rl[n],n+1]; + } + } + } + } + } + } + return vec![vec![0;oc[0]];oc[1]]; +} + +fn min(a: usize,b: usize) -> usize { + if a < b { + return a; + } + return b; +} diff --git a/challenge-128/roger-bell-west/rust/ch-2.rs b/challenge-128/roger-bell-west/rust/ch-2.rs new file mode 100755 index 0000000000..5318c3fcb8 --- /dev/null +++ b/challenge-128/roger-bell-west/rust/ch-2.rs @@ -0,0 +1,35 @@ +#! /bin/sh +//usr/bin/env rustc --test $0 -o ${0}x && ./${0}x; rm -f ${0}x ; exit + +use std::collections::BTreeMap; + +#[test] +fn test_ex1() { + assert_eq!(mp(vec!["11:20","14:30"],vec!["11:50","15:00"]),1); +} + +#[test] +fn test_ex2() { + assert_eq!(mp(vec!["10:20","11:00","11:10","12:20","16:20","19:00"],vec!["10:30","13:20","12:40","12:50","20:20","21:20"]),3); +} + +fn mp(aa: Vec<&str>, da: Vec<&str>) -> i64 { + let mut e: BTreeMap<i64,i64>=BTreeMap::new(); + for p in vec![(aa,1),(da,-1)] { + for tm in p.0 { + let hm: Vec<&str>=tm.split(':').collect(); + let ts=(hm[0].parse::<i64>().unwrap())*60+hm[1].parse::<i64>().unwrap(); + let en=e.entry(ts).or_insert(0); + *en += p.1; + } + } + let mut pt=0; + let mut pm=0; + for ts in e.keys() { + pt += e.get(ts).unwrap(); + if pt > pm { + pm=pt; + } + } + return pm; +} |
