aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2021-08-31 00:07:45 +0100
committerGitHub <noreply@github.com>2021-08-31 00:07:45 +0100
commit0a6edcf282cbe52b61572bbc78b084681a5e2c71 (patch)
tree29d1ae8133cf4d1c4ca8a0c1b7234e118b2d4e33
parent398da02598962bebffa9a3f0622b71bfefa5cfcc (diff)
parentf04d46c144950cbf45bc384faa68332ffd461947 (diff)
downloadperlweeklychallenge-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-xchallenge-128/roger-bell-west/perl/ch-1.pl52
-rwxr-xr-xchallenge-128/roger-bell-west/perl/ch-2.pl34
-rwxr-xr-xchallenge-128/roger-bell-west/python/ch-1.py40
-rwxr-xr-xchallenge-128/roger-bell-west/python/ch-2.py29
-rwxr-xr-xchallenge-128/roger-bell-west/raku/ch-1.p649
-rwxr-xr-xchallenge-128/roger-bell-west/raku/ch-2.p632
-rwxr-xr-xchallenge-128/roger-bell-west/ruby/ch-1.rb51
-rwxr-xr-xchallenge-128/roger-bell-west/ruby/ch-2.rb34
-rwxr-xr-xchallenge-128/roger-bell-west/rust/ch-1.rs55
-rwxr-xr-xchallenge-128/roger-bell-west/rust/ch-2.rs35
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;
+}