diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2021-05-10 12:27:21 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-05-10 12:27:21 +0100 |
| commit | ce8ea1ef30f04a000ce2e37479deeffe62ee19ac (patch) | |
| tree | 54e8a1c7f9bd30fee3e4397b70a7569e727951e2 | |
| parent | 76c9c09c0b2deac8a801ad60f866cdcdb97caa8c (diff) | |
| parent | 1304dad6c048c415507ecd8484dc4bc8791457e8 (diff) | |
| download | perlweeklychallenge-club-ce8ea1ef30f04a000ce2e37479deeffe62ee19ac.tar.gz perlweeklychallenge-club-ce8ea1ef30f04a000ce2e37479deeffe62ee19ac.tar.bz2 perlweeklychallenge-club-ce8ea1ef30f04a000ce2e37479deeffe62ee19ac.zip | |
Merge pull request #4052 from Firedrake/rogerbw-challenge-112
Solutions for challenge #112
| -rwxr-xr-x | challenge-112/roger-bell-west/perl/ch-1.pl | 28 | ||||
| -rwxr-xr-x | challenge-112/roger-bell-west/perl/ch-2.pl | 20 | ||||
| -rwxr-xr-x | challenge-112/roger-bell-west/python/ch-1.py | 31 | ||||
| -rwxr-xr-x | challenge-112/roger-bell-west/python/ch-2.py | 26 | ||||
| -rwxr-xr-x | challenge-112/roger-bell-west/raku/ch-1.p6 | 26 | ||||
| -rwxr-xr-x | challenge-112/roger-bell-west/raku/ch-2.p6 | 18 | ||||
| -rwxr-xr-x | challenge-112/roger-bell-west/ruby/ch-1.rb | 39 | ||||
| -rwxr-xr-x | challenge-112/roger-bell-west/ruby/ch-2.rb | 31 | ||||
| -rwxr-xr-x | challenge-112/roger-bell-west/rust/ch-1.rs | 40 | ||||
| -rwxr-xr-x | challenge-112/roger-bell-west/rust/ch-2.rs | 29 |
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; +} |
