diff options
| -rwxr-xr-x | challenge-115/roger-bell-west/perl/ch-1.pl | 38 | ||||
| -rwxr-xr-x | challenge-115/roger-bell-west/perl/ch-2.pl | 32 | ||||
| -rwxr-xr-x | challenge-115/roger-bell-west/python/ch-1.py | 43 | ||||
| -rwxr-xr-x | challenge-115/roger-bell-west/python/ch-2.py | 37 | ||||
| -rwxr-xr-x | challenge-115/roger-bell-west/raku/ch-1.p6 | 44 | ||||
| -rwxr-xr-x | challenge-115/roger-bell-west/raku/ch-2.p6 | 22 | ||||
| -rwxr-xr-x | challenge-115/roger-bell-west/ruby/ch-1.rb | 56 | ||||
| -rwxr-xr-x | challenge-115/roger-bell-west/ruby/ch-2.rb | 42 | ||||
| -rwxr-xr-x | challenge-115/roger-bell-west/rust/ch-1.rs | 64 | ||||
| -rwxr-xr-x | challenge-115/roger-bell-west/rust/ch-2.rs | 44 |
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(); +} |
