aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2021-06-01 15:49:54 +0100
committerGitHub <noreply@github.com>2021-06-01 15:49:54 +0100
commit7bb7a5ec9219a014d940d4c823845e5d2272fd93 (patch)
tree520e37e765de5448225e4b25988f16d36ac64887
parent22d3d0992e6d621d24a5bfeff089aef6be9b5157 (diff)
parent598699548ff75215bd14484c7e6c30cc53111809 (diff)
downloadperlweeklychallenge-club-7bb7a5ec9219a014d940d4c823845e5d2272fd93.tar.gz
perlweeklychallenge-club-7bb7a5ec9219a014d940d4c823845e5d2272fd93.tar.bz2
perlweeklychallenge-club-7bb7a5ec9219a014d940d4c823845e5d2272fd93.zip
Merge pull request #4185 from Firedrake/rogerbw-challenge-115
Solutions for challenge #115
-rwxr-xr-xchallenge-115/roger-bell-west/perl/ch-1.pl38
-rwxr-xr-xchallenge-115/roger-bell-west/perl/ch-2.pl32
-rwxr-xr-xchallenge-115/roger-bell-west/python/ch-1.py43
-rwxr-xr-xchallenge-115/roger-bell-west/python/ch-2.py37
-rwxr-xr-xchallenge-115/roger-bell-west/raku/ch-1.p644
-rwxr-xr-xchallenge-115/roger-bell-west/raku/ch-2.p622
-rwxr-xr-xchallenge-115/roger-bell-west/ruby/ch-1.rb56
-rwxr-xr-xchallenge-115/roger-bell-west/ruby/ch-2.rb42
-rwxr-xr-xchallenge-115/roger-bell-west/rust/ch-1.rs64
-rwxr-xr-xchallenge-115/roger-bell-west/rust/ch-2.rs44
10 files changed, 422 insertions, 0 deletions
diff --git a/challenge-115/roger-bell-west/perl/ch-1.pl b/challenge-115/roger-bell-west/perl/ch-1.pl
new file mode 100755
index 0000000000..55218babb2
--- /dev/null
+++ b/challenge-115/roger-bell-west/perl/ch-1.pl
@@ -0,0 +1,38 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 4;
+
+is(sc(qw(abc dea cd)),1,'example 1');
+is(sc(qw(ade cbd fgh)),0,'example 2');
+is(sc(qw(abc dea fgh hif)),0,'example 3');
+is(sc(qw(abc dec cfa cgd)),1,'example 4');
+
+sub sc {
+ my @n=@_;
+ my @m;
+ my %i;
+ foreach my $t (@n) {
+ push @m,substr($t,-1,1);
+ push @{$i{substr($t,0,1)}},$#m;
+ }
+ my @chain=([0]);
+ while (@chain) {
+ my $stub=pop @chain;
+ my %v=map {$_ => 1} (0..$#n);
+ map {delete $v{$_}} @{$stub};
+ if (%v) {
+ if (exists $i{$m[$stub->[-1]]}) {
+ my @x=grep {exists $v{$_}} @{$i{$m[$stub->[-1]]}};
+ foreach my $x (@x) {
+ push @chain,[@{$stub},$x];
+ }
+ }
+ } else {
+ return 1;
+ }
+ }
+ return 0;
+}
diff --git a/challenge-115/roger-bell-west/perl/ch-2.pl b/challenge-115/roger-bell-west/perl/ch-2.pl
new file mode 100755
index 0000000000..7da435464d
--- /dev/null
+++ b/challenge-115/roger-bell-west/perl/ch-2.pl
@@ -0,0 +1,32 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 4;
+
+is(lm(1,0,2,6),6210,'example 1');
+is(lm(1,4,2,8),8412,'example 2');
+is(lm(4,1,7,6),7614,'example 3');
+is(lm(1,3,5,7),0,'example 4');
+
+use List::Util qw(first);
+
+sub lm {
+ my @o=sort @_;
+ my $t=first {$_ % 2 == 0} @o;
+ unless (defined $t) {
+ return 0;
+ }
+ my $i=0;
+ while (1) {
+ if ($o[$i]==$t) {
+ last;
+ }
+ $i++;
+ }
+ splice @o,$i,1;
+ @o=reverse @o;
+ push @o,$t;
+ return join('',@o);
+}
diff --git a/challenge-115/roger-bell-west/python/ch-1.py b/challenge-115/roger-bell-west/python/ch-1.py
new file mode 100755
index 0000000000..04f265e13b
--- /dev/null
+++ b/challenge-115/roger-bell-west/python/ch-1.py
@@ -0,0 +1,43 @@
+#! /usr/bin/python3
+
+import unittest
+
+from collections import defaultdict
+
+def sc(*n):
+ m=list()
+ i=defaultdict(list)
+ for t in n:
+ m.append(t[-1])
+ i[t[0]].append(len(m)-1)
+ chain=list([[0]])
+ while len(chain)>0:
+ stub=chain.pop()
+ v=set(range(len(n)))
+ for x in stub:
+ v.remove(x)
+ if len(v)>0:
+ if m[stub[-1]] in i:
+ for x in filter (lambda y: y in v, i[m[stub[-1]]]):
+ s=stub
+ s.append(x)
+ chain.append(s)
+ else:
+ return 1
+ return 0
+
+class TestSc(unittest.TestCase):
+
+ def test_ex1(self):
+ self.assertEqual(sc('abc','dea','cd'),1,'example 1')
+
+ def test_ex2(self):
+ self.assertEqual(sc('ade','cbd','fgh'),0,'example 2')
+
+ def test_ex3(self):
+ self.assertEqual(sc('abc','dea','fgh','hif'),0,'example 3')
+
+ def test_ex4(self):
+ self.assertEqual(sc('abc','dec','cfa','cgd'),1,'example 4')
+
+unittest.main()
diff --git a/challenge-115/roger-bell-west/python/ch-2.py b/challenge-115/roger-bell-west/python/ch-2.py
new file mode 100755
index 0000000000..97a2409d51
--- /dev/null
+++ b/challenge-115/roger-bell-west/python/ch-2.py
@@ -0,0 +1,37 @@
+#! /usr/bin/python3
+
+import unittest
+
+def lm(*n):
+ o=list(n)
+ o.sort()
+ ff=[i for i in range(len(o)) if o[i] % 2 == 0]
+ if len(ff)==0:
+ return 0
+ i=ff[0]
+ ox=list()
+ ox.append(o[i])
+ if i>0:
+ for j in range(i):
+ ox.append(o[j])
+ if i+1<len(o):
+ for j in range(i+1,len(o)):
+ ox.append(o[j])
+ ox.reverse()
+ return int(''.join(str(i) for i in ox))
+
+class TestSc(unittest.TestCase):
+
+ def test_ex1(self):
+ self.assertEqual(lm(1,0,2,6),6210,"example 1")
+
+ def test_ex2(self):
+ self.assertEqual(lm(1,4,2,8),8412,"example 2")
+
+ def test_ex3(self):
+ self.assertEqual(lm(4,1,7,6),7614,"example 3")
+
+ def test_ex4(self):
+ self.assertEqual(lm(1,3,5,7),0,"example 4")
+
+unittest.main()
diff --git a/challenge-115/roger-bell-west/raku/ch-1.p6 b/challenge-115/roger-bell-west/raku/ch-1.p6
new file mode 100755
index 0000000000..5594dc7dfd
--- /dev/null
+++ b/challenge-115/roger-bell-west/raku/ch-1.p6
@@ -0,0 +1,44 @@
+#! /usr/bin/perl6
+
+use Test;
+
+plan 4;
+
+is(sc('abc','dea','cd'),1,'example 1');
+is(sc('ade','cbd','fgh'),0,'example 2');
+is(sc('abc','dea','fgh','hif'),0,'example 3');
+is(sc('abc','dec','cfa','cgd'),1,'example 4');
+
+sub sc(**@n) {
+ my @m;
+ my %i;
+ for @n -> $t {
+ push @m,substr($t,*-1,1);
+ my $ss=substr($t,0,1);
+ if %i{$ss}:exists {
+ push @(%i{$ss}),@m.end;
+ } else {
+ %i{$ss}=[@m.end];
+ }
+ }
+ my @chain=([0]);
+ while (@chain) {
+ my @stub=pop @chain;
+ @stub=@stubĀ».List.flat;
+ my $v=SetHash.new(0..@n.end);
+ map {$v{$_}:delete}, @stub;
+ if ($v) {
+ if (%i{@m[@stub[*-1]]}:exists) {
+ my @x=grep {$v{$_}:exists}, @(%i{@m[@stub[*-1]]});
+ for @x -> $x {
+ my @s=@stubĀ».List.flat;
+ push @s,$x;
+ push @chain,@s;
+ }
+ }
+ } else {
+ return 1;
+ }
+ }
+ return 0;
+}
diff --git a/challenge-115/roger-bell-west/raku/ch-2.p6 b/challenge-115/roger-bell-west/raku/ch-2.p6
new file mode 100755
index 0000000000..21fdadf26b
--- /dev/null
+++ b/challenge-115/roger-bell-west/raku/ch-2.p6
@@ -0,0 +1,22 @@
+#! /usr/bin/perl6
+
+use Test;
+
+plan 4;
+
+is(lm(1,0,2,6),6210,'example 1');
+is(lm(1,4,2,8),8412,'example 2');
+is(lm(4,1,7,6),7614,'example 3');
+is(lm(1,3,5,7),0,'example 4');
+
+sub lm(**@n) {
+ my @o=sort @n;
+ my ($i,$t)=@o.first({$_ % 2 == 0}, :kv);
+ unless (defined $i) {
+ return 0;
+ }
+ splice @o,$i,1;
+ @o=reverse @o;
+ push @o,$t;
+ return join('',@o);
+}
diff --git a/challenge-115/roger-bell-west/ruby/ch-1.rb b/challenge-115/roger-bell-west/ruby/ch-1.rb
new file mode 100755
index 0000000000..1eb4ad336b
--- /dev/null
+++ b/challenge-115/roger-bell-west/ruby/ch-1.rb
@@ -0,0 +1,56 @@
+#! /usr/bin/ruby
+# coding: utf-8
+
+require 'test/unit'
+
+require 'set'
+
+def sc(*n)
+ m=[]
+ i=Hash.new
+ n.each {|t|
+ m.push(t[-1])
+ ss=t[0]
+ if i.has_key?(ss) then
+ i[ss].push(m.length-1)
+ else
+ i[ss]=[m.length-1]
+ end
+ }
+ chain=[[0]]
+ while (chain.length>0)
+ stub=chain.pop
+ v=Set.new(0.upto(n.length-1))
+ stub.map{|x| v.delete(x)}
+ if v.length>0 then
+ if i.has_key?(m[stub[-1]]) then
+ x=i[m[stub[-1]]].find_all {|x| v.include?(x)}
+ x.each {|xx|
+ s=stub
+ s.push(xx)
+ chain.push(s)
+ }
+ end
+ else
+ return 1
+ end
+ end
+ return 0
+end
+
+class TestSc < Test::Unit::TestCase
+
+ def test_ex1
+ assert_equal(1,sc('abc','dea','cd'))
+ end
+ def test_ex2
+ assert_equal(0,sc('ade','cbd','fgh'))
+ end
+ def test_ex3
+ assert_equal(0,sc('abc','dea','fgh','hif'))
+ end
+ def test_ex4
+ assert_equal(1,sc('abc','dec','cfa','cgd'))
+ end
+
+end
diff --git a/challenge-115/roger-bell-west/ruby/ch-2.rb b/challenge-115/roger-bell-west/ruby/ch-2.rb
new file mode 100755
index 0000000000..617e9acb9e
--- /dev/null
+++ b/challenge-115/roger-bell-west/ruby/ch-2.rb
@@ -0,0 +1,42 @@
+#! /usr/bin/ruby
+# coding: utf-8
+
+require 'test/unit'
+
+def lm(*n)
+ o=n.sort()
+ i=o.find_index {|x| x % 2 == 0}
+ if i.nil? then
+ return 0
+ end
+ ox=[o[i]]
+ if i>0 then
+ ox.push(o[0..i-1])
+ end
+ if i+1<o.length() then
+ ox.push(o[i+1..-1])
+ end
+ ox.flatten!
+ return ox.reverse().join('').to_i
+end
+
+
+class TestLm < Test::Unit::TestCase
+
+ def test_ex1
+ assert_equal(6210,lm(1,0,2,6))
+ end
+
+ def test_ex2
+ assert_equal(8412,lm(1,4,2,8))
+ end
+
+ def test_ex3
+ assert_equal(7614,lm(4,1,7,6))
+ end
+
+ def test_ex4
+ assert_equal(0,lm(1,3,5,7))
+ end
+
+end
diff --git a/challenge-115/roger-bell-west/rust/ch-1.rs b/challenge-115/roger-bell-west/rust/ch-1.rs
new file mode 100755
index 0000000000..856f46fbcb
--- /dev/null
+++ b/challenge-115/roger-bell-west/rust/ch-1.rs
@@ -0,0 +1,64 @@
+#! /bin/sh
+//usr/bin/env rustc --test $0 -o ${0}x && ./${0}x; rm -f ${0}x ; exit
+
+use std::collections::{HashMap,HashSet};
+
+#[test]
+fn test_ex1() {
+ assert_eq!(sc(vec!["abc","dea","cd"]),1);
+}
+
+#[test]
+fn test_ex2() {
+ assert_eq!(sc(vec!["ade","cbd","fgh"]),0);
+}
+
+#[test]
+fn test_ex3() {
+ assert_eq!(sc(vec!["abc","dea","fgh","hif"]),0);
+}
+
+#[test]
+fn test_ex4() {
+ assert_eq!(sc(vec!["abc","dec","cfa","cgd"]),1);
+}
+
+fn sc (n: Vec<&str>) -> i8 {
+ let mut m: Vec<String>=vec![];
+ let mut i: HashMap<String,Vec<usize>>=HashMap::new();
+ for t in &n {
+ m.push(t[t.len()-1..].to_string());
+ let ss=&t.chars().nth(0).unwrap().to_string();
+ let mut vv: Vec<usize>=vec![];
+ if i.contains_key(ss) {
+ vv=i.get(ss).unwrap().to_vec();
+ }
+ vv.push(m.len()-1);
+ i.insert(ss.to_string(),vv);
+ }
+ let mut chain: Vec<Vec<usize>>=vec![vec![0]];
+ while chain.len()>0 {
+ let stub=chain.pop().unwrap();
+ let mut v: HashSet<usize>=HashSet::new();
+ for y in 0..n.len() {
+ v.insert(y);
+ }
+ for y in &stub {
+ v.remove(&y);
+ }
+ if v.len()>0 {
+ if i.contains_key(&m[stub[stub.len()-1]]) {
+ let xx=i.get(&m[stub[stub.len()-1]]).unwrap();
+ let xx=xx.iter().filter(|x| v.contains(&x));
+ for x in xx {
+ let mut s=stub.clone();
+ s.push(*x);
+ chain.push(s);
+ }
+ }
+ } else {
+ return 1;
+ }
+ }
+ return 0;
+}
diff --git a/challenge-115/roger-bell-west/rust/ch-2.rs b/challenge-115/roger-bell-west/rust/ch-2.rs
new file mode 100755
index 0000000000..bbdba109ff
--- /dev/null
+++ b/challenge-115/roger-bell-west/rust/ch-2.rs
@@ -0,0 +1,44 @@
+#! /bin/sh
+//usr/bin/env rustc --test $0 -o ${0}x && ./${0}x; rm -f ${0}x ; exit
+
+#[test]
+fn test_ex1() {
+ assert_eq!(sc(vec![1,0,2,6]),6210);
+}
+
+#[test]
+fn test_ex2() {
+ assert_eq!(sc(vec![1,4,2,8]),8412);
+}
+
+#[test]
+fn test_ex3() {
+ assert_eq!(sc(vec![4,1,7,6]),7614);
+}
+
+#[test]
+fn test_ex4() {
+ assert_eq!(sc(vec![1,3,5,7]),0);
+}
+
+fn sc (n: Vec<u32>) -> u32 {
+ let mut o=n.clone();
+ o.sort();
+ let mut ov=o.clone().into_iter();
+ let m=ov.position(|x| x % 2 == 0);
+ let i: usize;
+ match m {
+ None => return 0,
+ Some(x) => i=x,
+ }
+ println!("{:?}",i);
+ let mut ox: Vec<u32>=vec![o[i]];
+ if i>0 {
+ ox.append(&mut o[0..i].to_vec());
+ }
+ if i+1<o.len() {
+ ox.append(&mut o[i+1..o.len()].to_vec());
+ }
+ ox.reverse();
+ return ox.into_iter().map(|i| i.to_string()).collect::<Vec<String>>().join("").parse::<u32>().unwrap();
+}