aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xchallenge-112/roger-bell-west/perl/ch-1.pl28
-rwxr-xr-xchallenge-112/roger-bell-west/perl/ch-2.pl20
-rwxr-xr-xchallenge-112/roger-bell-west/python/ch-1.py31
-rwxr-xr-xchallenge-112/roger-bell-west/python/ch-2.py26
-rwxr-xr-xchallenge-112/roger-bell-west/raku/ch-1.p626
-rwxr-xr-xchallenge-112/roger-bell-west/raku/ch-2.p618
-rwxr-xr-xchallenge-112/roger-bell-west/ruby/ch-1.rb39
-rwxr-xr-xchallenge-112/roger-bell-west/ruby/ch-2.rb31
-rwxr-xr-xchallenge-112/roger-bell-west/rust/ch-1.rs40
-rwxr-xr-xchallenge-112/roger-bell-west/rust/ch-2.rs29
10 files changed, 288 insertions, 0 deletions
diff --git a/challenge-112/roger-bell-west/perl/ch-1.pl b/challenge-112/roger-bell-west/perl/ch-1.pl
new file mode 100755
index 0000000000..c1bed89bc6
--- /dev/null
+++ b/challenge-112/roger-bell-west/perl/ch-1.pl
@@ -0,0 +1,28 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 4;
+
+is(cp('/a/'),'/a','example 1');
+is(cp('/a/b//c/'),'/a/b/c','example 2');
+is(cp('/a/b/c/../..'),'/a','example 3');
+is(cp('/a/./b'),'/a/b','example 4');
+
+sub cp {
+ my $i=shift;
+ my @p=grep {$_ ne '.'} grep /./,split /\//,$i;
+ my $d=1;
+ while ($d) {
+ $d=0;
+ foreach my $pi (1..$#p) {
+ if ($p[$pi] eq '..') {
+ splice @p,$pi-1,2;
+ $d=1;
+ last;
+ }
+ }
+ }
+ return '/'.join('/',@p);
+}
diff --git a/challenge-112/roger-bell-west/perl/ch-2.pl b/challenge-112/roger-bell-west/perl/ch-2.pl
new file mode 100755
index 0000000000..685630026b
--- /dev/null
+++ b/challenge-112/roger-bell-west/perl/ch-2.pl
@@ -0,0 +1,20 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 3;
+
+is(cs(3),3,'example 1');
+is(cs(4),5,'example 2');
+is(cs(20),10946,'example 3');
+
+sub cs {
+ my $i=shift;
+ my ($a,$b,$c)=(0,1,0);
+ foreach (1..$i) {
+ $c=$a+$b;
+ ($a,$b)=($b,$c);
+ }
+ return $c;
+}
diff --git a/challenge-112/roger-bell-west/python/ch-1.py b/challenge-112/roger-bell-west/python/ch-1.py
new file mode 100755
index 0000000000..cf1ecbd798
--- /dev/null
+++ b/challenge-112/roger-bell-west/python/ch-1.py
@@ -0,0 +1,31 @@
+#! /usr/bin/python3
+
+import unittest
+
+def cp(i):
+ p=[x for x in i.split('/') if x != '' and x != '.']
+ d=True
+ while d:
+ d=False
+ for pi in range(1,len(p)):
+ if p[pi] == '..':
+ p=p[0:pi-2]+p[pi+1:-1]
+ d=True
+ break
+ return '/'+'/'.join(p)
+
+class TestCp(unittest.TestCase):
+
+ def test_ex1(self):
+ self.assertEqual(cp('/a/'),'/a','example 1')
+
+ def test_ex2(self):
+ self.assertEqual(cp('/a/b//c/'),'/a/b/c','example 2')
+
+ def test_ex3(self):
+ self.assertEqual(cp('/a/b/c/../..'),'/a','example 3')
+
+ def test_ex4(self):
+ self.assertEqual(cp('/a/./b'),'/a/b','example 4')
+
+unittest.main()
diff --git a/challenge-112/roger-bell-west/python/ch-2.py b/challenge-112/roger-bell-west/python/ch-2.py
new file mode 100755
index 0000000000..77dcdbca19
--- /dev/null
+++ b/challenge-112/roger-bell-west/python/ch-2.py
@@ -0,0 +1,26 @@
+#! /usr/bin/python3
+
+import unittest
+
+def cs(i):
+ a=0
+ b=1
+ c=0
+ for x in range(i):
+ c=a+b
+ a=b
+ b=c
+ return c
+
+class TestCs(unittest.TestCase):
+
+ def test_ex1(self):
+ self.assertEqual(cs(3),3,'example 1')
+
+ def test_ex2(self):
+ self.assertEqual(cs(4),5,'example 2')
+
+ def test_ex3(self):
+ self.assertEqual(cs(20),10946,'example 3')
+
+unittest.main()
diff --git a/challenge-112/roger-bell-west/raku/ch-1.p6 b/challenge-112/roger-bell-west/raku/ch-1.p6
new file mode 100755
index 0000000000..4b37ee6062
--- /dev/null
+++ b/challenge-112/roger-bell-west/raku/ch-1.p6
@@ -0,0 +1,26 @@
+#! /usr/bin/perl6
+
+use Test;
+
+plan 4;
+
+is(cp('/a/'),'/a','example 1');
+is(cp('/a/b//c/'),'/a/b/c','example 2');
+is(cp('/a/b/c/../..'),'/a','example 3');
+is(cp('/a/./b'),'/a/b','example 4');
+
+sub cp($i) {
+ my @p=$i.split('/').grep(/./).grep({$_ ne '.'});
+ my $d=1;
+ while ($d) {
+ $d=0;
+ for 1..@p.elems-1 -> $pi {
+ if (@p[$pi] eq '..') {
+ splice @p,$pi-1,2;
+ $d=1;
+ last;
+ }
+ }
+ }
+ return '/' ~ join('/',@p);
+}
diff --git a/challenge-112/roger-bell-west/raku/ch-2.p6 b/challenge-112/roger-bell-west/raku/ch-2.p6
new file mode 100755
index 0000000000..49c6b2c458
--- /dev/null
+++ b/challenge-112/roger-bell-west/raku/ch-2.p6
@@ -0,0 +1,18 @@
+#! /usr/bin/perl6
+
+use Test;
+
+plan 3;
+
+is(cs(3),3,'example 1');
+is(cs(4),5,'example 2');
+is(cs(20),10946,'example 3');
+
+sub cs($i) {
+ my ($a,$b,$c)=(0,1,0);
+ for 1..$i {
+ $c=$a+$b;
+ ($a,$b)=($b,$c);
+ }
+ return $c;
+}
diff --git a/challenge-112/roger-bell-west/ruby/ch-1.rb b/challenge-112/roger-bell-west/ruby/ch-1.rb
new file mode 100755
index 0000000000..e7b8ee5e56
--- /dev/null
+++ b/challenge-112/roger-bell-west/ruby/ch-1.rb
@@ -0,0 +1,39 @@
+#! /usr/bin/ruby
+
+def cp(i)
+ p=i.split('/').find_all {|i| i != '' && i != '.'}
+ d=true
+ while d
+ d=false
+ 1.upto(p.length-1) do |pi|
+ if p[pi] == '..' then
+ p=p[0..pi-2]+p[pi+1..-1]
+ d=true
+ break
+ end
+ end
+ end
+ return '/'+p.join('/')
+end
+
+require 'test/unit'
+
+class TestCp < Test::Unit::TestCase
+
+ def test_ex1
+ assert_equal('/a',cp('/a/'))
+ end
+
+ def test_ex2
+ assert_equal('/a/b/c',cp('/a/b//c/'))
+ end
+
+ def test_ex3
+ assert_equal('/a',cp('/a/b/c/../..'))
+ end
+
+ def test_ex4
+ assert_equal('/a/b',cp('/a/./b'))
+ end
+
+end
diff --git a/challenge-112/roger-bell-west/ruby/ch-2.rb b/challenge-112/roger-bell-west/ruby/ch-2.rb
new file mode 100755
index 0000000000..c4659f54ea
--- /dev/null
+++ b/challenge-112/roger-bell-west/ruby/ch-2.rb
@@ -0,0 +1,31 @@
+#! /usr/bin/ruby
+
+def cs(i)
+ a=0
+ b=1
+ c=0
+ 1.upto(i) do
+ c=a+b
+ a=b
+ b=c
+ end
+ return c
+end
+
+require 'test/unit'
+
+class TestCs < Test::Unit::TestCase
+
+ def test_ex1
+ assert_equal(3,cs(3))
+ end
+
+ def test_ex2
+ assert_equal(5,cs(4))
+ end
+
+ def test_ex3
+ assert_equal(10946,cs(20))
+ end
+
+end
diff --git a/challenge-112/roger-bell-west/rust/ch-1.rs b/challenge-112/roger-bell-west/rust/ch-1.rs
new file mode 100755
index 0000000000..2125410393
--- /dev/null
+++ b/challenge-112/roger-bell-west/rust/ch-1.rs
@@ -0,0 +1,40 @@
+#! /bin/sh
+//usr/bin/env rustc --test $0 -o ${0}x && ./${0}x; rm -f ${0}x ; exit
+
+#[test]
+fn test_ex1() {
+ assert_eq!(cp("/a/"),"/a");
+}
+
+#[test]
+fn test_ex2() {
+ assert_eq!(cp("/a/b//c"),"/a/b/c");
+}
+
+#[test]
+fn test_ex3() {
+ assert_eq!(cp("/a/b/c/../.."),"/a");
+}
+
+#[test]
+fn test_ex4() {
+ assert_eq!(cp("/a/./b"),"/a/b");
+}
+
+fn cp(i: &str) -> String {
+ let mut p=i.split("/").filter(|x| *x != "" && *x != ".").collect::<Vec<_>>();
+ let mut d=true;
+ while d {
+ d=false;
+ for pi in 1..p.len()-1 {
+ if p[pi] == ".." {
+ p=[&p[0..pi-2],&p[pi+1..p.len()-1]].concat();
+ d=true;
+ break;
+ }
+ }
+ }
+ let mut r="/".to_string();
+ r.push_str(&p.join("/"));
+ return r;
+}
diff --git a/challenge-112/roger-bell-west/rust/ch-2.rs b/challenge-112/roger-bell-west/rust/ch-2.rs
new file mode 100755
index 0000000000..e0a8f27aa1
--- /dev/null
+++ b/challenge-112/roger-bell-west/rust/ch-2.rs
@@ -0,0 +1,29 @@
+#! /bin/sh
+//usr/bin/env rustc --test $0 -o ${0}x && ./${0}x; rm -f ${0}x ; exit
+
+#[test]
+fn test_ex1() {
+ assert_eq!(cs(3),3);
+}
+
+#[test]
+fn test_ex2() {
+ assert_eq!(cs(4),5);
+}
+
+#[test]
+fn test_ex3() {
+ assert_eq!(cs(20),10946);
+}
+
+fn cs(i: u64) -> u64 {
+ let mut a: u64=0;
+ let mut b: u64=1;
+ let mut c: u64=0;
+ for _x in 0..i {
+ c=a+b;
+ a=b;
+ b=c;
+ }
+ return c;
+}