aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2020-10-13 05:31:21 +0100
committerGitHub <noreply@github.com>2020-10-13 05:31:21 +0100
commitda717c8cdbf5414b65786a92e013962a60d69c21 (patch)
treebc241d4bf40473c01ce49647dcb11f12f5a895ef
parentaafec3dcb946db2a1ea9c7af4014888a7943b7a7 (diff)
parent93e729872243499407d495846097b5d6488d94ea (diff)
downloadperlweeklychallenge-club-da717c8cdbf5414b65786a92e013962a60d69c21.tar.gz
perlweeklychallenge-club-da717c8cdbf5414b65786a92e013962a60d69c21.tar.bz2
perlweeklychallenge-club-da717c8cdbf5414b65786a92e013962a60d69c21.zip
Merge pull request #2502 from Firedrake/rogerbw-challenge-082
Solutions for challenge 82.
-rwxr-xr-xchallenge-082/roger-bell-west/perl/ch-1.pl38
-rwxr-xr-xchallenge-082/roger-bell-west/perl/ch-2.pl32
-rwxr-xr-xchallenge-082/roger-bell-west/python/ch-1.py40
-rwxr-xr-xchallenge-082/roger-bell-west/python/ch-2.py37
-rwxr-xr-xchallenge-082/roger-bell-west/raku/ch-1.p632
-rwxr-xr-xchallenge-082/roger-bell-west/raku/ch-2.p631
-rwxr-xr-xchallenge-082/roger-bell-west/ruby/ch-1.rb49
-rwxr-xr-xchallenge-082/roger-bell-west/ruby/ch-2.rb45
8 files changed, 304 insertions, 0 deletions
diff --git a/challenge-082/roger-bell-west/perl/ch-1.pl b/challenge-082/roger-bell-west/perl/ch-1.pl
new file mode 100755
index 0000000000..52d220c256
--- /dev/null
+++ b/challenge-082/roger-bell-west/perl/ch-1.pl
@@ -0,0 +1,38 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 5;
+
+is_deeply(factor(12),{1 => 1, 2 => 1, 3 => 1, 4 => 1, 6 => 1, 12 => 1},'twelve');
+is_deeply(factor(18),{1 => 1, 2 => 1, 3 => 1, 6 => 1, 9 => 1, 18 => 1},'eighteen');
+is_deeply(factor(23),{1 => 1, 23 => 1},'twenty-three');
+
+is_deeply(commonfactor(12,18),[1,2,3,6],'twelve-eighteen');
+is_deeply(commonfactor(18,23),[1],'twelve-twentythree');
+
+sub factor {
+ my $n=shift;
+ my %o=map {$_ => 1} (1,$n);
+ foreach my $i (2..int(sqrt($n))) {
+ if ($n % $i == 0) {
+ $o{$n/$i}=$o{$i}=1;
+ }
+ }
+ return \%o;
+}
+
+sub commonfactor {
+ my @f=map {factor($_)} @_;
+ my $s=shift @f;
+ while (@f) {
+ my $q=shift @f;
+ foreach my $f (keys %{$s}) {
+ unless (exists $q->{$f}) {
+ delete $s->{$f};
+ }
+ }
+ }
+ return [sort keys %{$s}];
+}
diff --git a/challenge-082/roger-bell-west/perl/ch-2.pl b/challenge-082/roger-bell-west/perl/ch-2.pl
new file mode 100755
index 0000000000..30b078022a
--- /dev/null
+++ b/challenge-082/roger-bell-west/perl/ch-2.pl
@@ -0,0 +1,32 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 5;
+
+is(isinterleave(qw(XY X XXY)),1,'example 1');
+is(isinterleave(qw(XXY XXZ XXXXZY)),1,'example 2');
+is(isinterleave(qw(YX X XXY)),0,'example 3');
+is(isinterleave(qw(ACF BDEG ABCDEFG)),1,'example 4');
+is(isinterleave(qw(ACF BDGE ABCDEFG)),0,'example 5');
+
+sub isinterleave {
+ my ($a,$b,$c)=@_;
+ my @s=(map {[split '',$_]} ($a,$b,$c));
+ my @l=map {$#{$_}} @s;
+ my @buf=([0,0,0]);
+ while (@buf) {
+ my $n=shift @buf;
+ if ($n->[2] > $l[2]) {
+ return 1;
+ }
+ if ($n->[0] <= $l[0] && $s[0][$n->[0]] eq $s[2][$n->[2]]) {
+ push @buf,[$n->[0]+1,$n->[1],$n->[2]+1];
+ }
+ if ($n->[1] <= $l[1] && $s[1][$n->[1]] eq $s[2][$n->[2]]) {
+ push @buf,[$n->[0],$n->[1]+1,$n->[2]+1];
+ }
+ }
+ return 0;
+}
diff --git a/challenge-082/roger-bell-west/python/ch-1.py b/challenge-082/roger-bell-west/python/ch-1.py
new file mode 100755
index 0000000000..88e8cc4399
--- /dev/null
+++ b/challenge-082/roger-bell-west/python/ch-1.py
@@ -0,0 +1,40 @@
+#! /usr/bin/python3
+
+import unittest
+from math import sqrt
+
+def factor(n):
+ o=set()
+ o.add(1)
+ o.add(n)
+ for i in range(2,int(sqrt(n))+1):
+ if (n % i == 0):
+ o.add(int(n/i))
+ o.add(i)
+ return o
+
+def commonfactor(*fs):
+ f=list(map(factor,fs))
+ s=f.pop();
+ while (f):
+ s = s & f.pop()
+ return sorted(s)
+
+class TestCf(unittest.TestCase):
+
+ def test_f1(self):
+ self.assertEqual(factor(12),set((1,2,3,4,6,12)),'twelve')
+
+ def test_f2(self):
+ self.assertEqual(factor(18),set((1,2,3,6,9,18)),'eighteen')
+
+ def test_f3(self):
+ self.assertEqual(factor(23),set((1,23)),'twenty-three')
+
+ def test_cf1(self):
+ self.assertEqual(commonfactor(12,18),[1,2,3,6],'twelve-eighteen')
+
+ def test_cf2(self):
+ self.assertEqual(commonfactor(18,23),[1],'twelve-twentythree')
+
+unittest.main()
diff --git a/challenge-082/roger-bell-west/python/ch-2.py b/challenge-082/roger-bell-west/python/ch-2.py
new file mode 100755
index 0000000000..4b88c1acf0
--- /dev/null
+++ b/challenge-082/roger-bell-west/python/ch-2.py
@@ -0,0 +1,37 @@
+#! /usr/bin/python3
+
+import unittest
+from collections import deque
+
+def isinterleave(a,b,c):
+ l=list(map(len,(a,b,c)))
+ buf=deque()
+ buf.append([0,0,0])
+ while (buf):
+ n=buf.popleft()
+ if (n[2] >= l[2]):
+ return 1
+ if ((n[0] < l[0]) and (a[n[0]] == c[n[2]])):
+ buf.append([n[0]+1,n[1],n[2]+1])
+ if ((n[1] < l[1]) and (b[n[1]] == c[n[2]])):
+ buf.append([n[0],n[1]+1,n[2]+1])
+ return 0
+
+class TestInterleave(unittest.TestCase):
+
+ def test_ex1(self):
+ self.assertEqual(isinterleave('XY','X','XXY'),1,'example 1')
+
+ def test_ex2(self):
+ self.assertEqual(isinterleave('XXY','XXZ','XXXXZY'),1,'example 2')
+
+ def test_ex3(self):
+ self.assertEqual(isinterleave('YX','X','XXY'),0,'example 3')
+
+ def test_ex4(self):
+ self.assertEqual(isinterleave('ACF','BDEG','ABCDEFG'),1,'example 4')
+
+ def test_ex5(self):
+ self.assertEqual(isinterleave('ACF','BDGE','ABCDEFG'),0,'example 5')
+
+unittest.main()
diff --git a/challenge-082/roger-bell-west/raku/ch-1.p6 b/challenge-082/roger-bell-west/raku/ch-1.p6
new file mode 100755
index 0000000000..01207a3e42
--- /dev/null
+++ b/challenge-082/roger-bell-west/raku/ch-1.p6
@@ -0,0 +1,32 @@
+#! /usr/bin/perl6
+
+use Test;
+
+plan 5;
+
+is-deeply(factor(12),SetHash.new(1,2,3,4,6,12),'twelve');
+is-deeply(factor(18),SetHash.new(1,2,3,6,9,18),'eighteen');
+is-deeply(factor(23),SetHash.new(1,23),'twenty-three');
+
+is-deeply(commonfactor(12,18),(1,2,3,6),'twelve-eighteen');
+is-deeply(commonfactor(18,23),(1,),'twelve-twentythree');
+
+sub factor($n) {
+ my $o=SetHash.new(1,$n);
+ for 2..floor(sqrt($n)) -> $i {
+ if ($n % $i == 0) {
+ $o{Int.new($n/$i)}++;
+ $o{$i}++;
+ }
+ }
+ return $o;
+}
+
+sub commonfactor {
+ my @f=map {factor($_)},@_;
+ my $s=shift @f;
+ while (@f) {
+ $s (&)= shift @f;
+ }
+ return $s.keys.sort;
+}
diff --git a/challenge-082/roger-bell-west/raku/ch-2.p6 b/challenge-082/roger-bell-west/raku/ch-2.p6
new file mode 100755
index 0000000000..8d468d02a3
--- /dev/null
+++ b/challenge-082/roger-bell-west/raku/ch-2.p6
@@ -0,0 +1,31 @@
+#! /usr/bin/perl6
+
+use Test;
+
+plan 5;
+
+is(isinterleave('XY','X','XXY'),1,'example 1');
+is(isinterleave('XXY','XXZ','XXXXZY'),1,'example 2');
+is(isinterleave('YX','X','XXY'),0,'example 3');
+is(isinterleave('ACF','BDEG','ABCDEFG'),1,'example 4');
+is(isinterleave('ACF','BDGE','ABCDEFG'),0,'example 5');
+
+sub isinterleave {
+ my ($a,$b,$c)=@_;
+ my @s=(map {[$_.comb]}, ($a,$b,$c));
+ my @l=map {$_.end},@s;
+ my @buf=([0,0,0],);
+ while (@buf) {
+ my $n=shift @buf;
+ if ($n.[2] > @l[2]) {
+ return 1;
+ }
+ if ($n.[0] <= @l[0] && @s[0][$n.[0]] eq @s[2][$n.[2]]) {
+ push @buf,[$n.[0]+1,$n.[1],$n.[2]+1];
+ }
+ if ($n.[1] <= @l[1] && @s[1][$n.[1]] eq @s[2][$n.[2]]) {
+ push @buf,[$n.[0],$n.[1]+1,$n.[2]+1];
+ }
+ }
+ return 0;
+}
diff --git a/challenge-082/roger-bell-west/ruby/ch-1.rb b/challenge-082/roger-bell-west/ruby/ch-1.rb
new file mode 100755
index 0000000000..309176d51c
--- /dev/null
+++ b/challenge-082/roger-bell-west/ruby/ch-1.rb
@@ -0,0 +1,49 @@
+#! /usr/bin/ruby
+
+require 'set'
+
+def factor(n)
+ o=Set.new([1,n])
+ 2.upto(Math.sqrt(n).floor) do |i|
+ if (n % i == 0)
+ o.add(n/i)
+ o.add(i)
+ end
+ end
+ return o
+end
+
+def commonfactor(*fs)
+ f=fs.map{|x| factor(x)}
+ s=f.pop
+ while (!f.empty?)
+ s = s & f.pop
+ end
+ return s.sort
+end
+
+require 'test/unit'
+
+class TestCf < Test::Unit::TestCase
+
+ def test_f1
+ assert_equal(Set.new([1,2,3,4,6,12]),factor(12))
+ end
+
+ def test_f2
+ assert_equal(Set.new([1,2,3,6,9,18]),factor(18))
+ end
+
+ def test_f3
+ assert_equal(Set.new([1,23]),factor(23))
+ end
+
+ def test_cf1
+ assert_equal([1,2,3,6],commonfactor(12,18))
+ end
+
+ def test_cf2
+ assert_equal([1],commonfactor(18,23))
+ end
+
+end
diff --git a/challenge-082/roger-bell-west/ruby/ch-2.rb b/challenge-082/roger-bell-west/ruby/ch-2.rb
new file mode 100755
index 0000000000..067bddb305
--- /dev/null
+++ b/challenge-082/roger-bell-west/ruby/ch-2.rb
@@ -0,0 +1,45 @@
+#! /usr/bin/ruby
+
+def isinterleave(a,b,c)
+ l=[a,b,c].map{|x| x.length}
+ buf=[[0,0,0]]
+ while (!buf.empty?)
+ n=buf.pop
+ if (n[2] >= l[2])
+ return 1
+ end
+ if ((n[0] < l[0]) and (a[n[0]] == c[n[2]]))
+ buf.push([n[0]+1,n[1],n[2]+1])
+ end
+ if ((n[1] < l[1]) and (b[n[1]] == c[n[2]]))
+ buf.push([n[0],n[1]+1,n[2]+1])
+ end
+ end
+ return 0
+end
+
+require 'test/unit'
+
+class TestInterleave < Test::Unit::TestCase
+
+ def test_ex1
+ assert_equal(isinterleave('XY','X','XXY'),1)
+ end
+
+ def test_ex2
+ assert_equal(isinterleave('XXY','XXZ','XXXXZY'),1)
+ end
+
+ def test_ex3
+ assert_equal(isinterleave('YX','X','XXY'),0)
+ end
+
+ def test_ex4
+ assert_equal(isinterleave('ACF','BDEG','ABCDEFG'),1)
+ end
+
+ def test_ex5
+ assert_equal(isinterleave('ACF','BDGE','ABCDEFG'),0)
+ end
+
+end