diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2021-05-18 10:33:05 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-05-18 10:33:05 +0100 |
| commit | 4be5fef5f7faf4a07b8c998c7b429458ab2bb708 (patch) | |
| tree | e9f4b68b26669db98839a23cbd0014908b97a85d /challenge-113 | |
| parent | 2584e027089942d80cec812f81d7ca5af3e13567 (diff) | |
| parent | 0bdf5928c01ed343627fb572ba43ec2e77bd43f7 (diff) | |
| download | perlweeklychallenge-club-4be5fef5f7faf4a07b8c998c7b429458ab2bb708.tar.gz perlweeklychallenge-club-4be5fef5f7faf4a07b8c998c7b429458ab2bb708.tar.bz2 perlweeklychallenge-club-4be5fef5f7faf4a07b8c998c7b429458ab2bb708.zip | |
Merge pull request #4097 from Firedrake/rogerbw-challenge-113
Solutions for challenge #113
Diffstat (limited to 'challenge-113')
| -rwxr-xr-x | challenge-113/roger-bell-west/perl/ch-1.pl | 26 | ||||
| -rwxr-xr-x | challenge-113/roger-bell-west/perl/ch-2.pl | 27 | ||||
| -rwxr-xr-x | challenge-113/roger-bell-west/python/ch-1.py | 27 | ||||
| -rwxr-xr-x | challenge-113/roger-bell-west/python/ch-2.py | 23 | ||||
| -rwxr-xr-x | challenge-113/roger-bell-west/raku/ch-1.p6 | 24 | ||||
| -rwxr-xr-x | challenge-113/roger-bell-west/raku/ch-2.p6 | 25 | ||||
| -rwxr-xr-x | challenge-113/roger-bell-west/ruby/ch-1.rb | 32 | ||||
| -rwxr-xr-x | challenge-113/roger-bell-west/ruby/ch-2.rb | 29 | ||||
| -rw-r--r-- | challenge-113/roger-bell-west/rust/ch-1.rs | 28 | ||||
| -rwxr-xr-x | challenge-113/roger-bell-west/rust/ch-2.rs | 25 |
10 files changed, 266 insertions, 0 deletions
diff --git a/challenge-113/roger-bell-west/perl/ch-1.pl b/challenge-113/roger-bell-west/perl/ch-1.pl new file mode 100755 index 0000000000..6e2769f7a2 --- /dev/null +++ b/challenge-113/roger-bell-west/perl/ch-1.pl @@ -0,0 +1,26 @@ +#! /usr/bin/perl + +use strict; +use warnings; + +use Test::More tests => 2; + +is(ri(25,7),0,'example 1'); +is(ri(24,7),1,'example 2'); + +sub ri { + my ($n,$d)=@_; + my @e=grep /$d/,(1..$n); + foreach my $i (1..(1<<(scalar @e))-1) { + my $s=0; + foreach my $ii (0..$#e) { + if (1<<$ii & $i) { + $s+=$e[$ii]; + } + } + if ($s==$n) { + return 1; + } + } + return 0; +} diff --git a/challenge-113/roger-bell-west/perl/ch-2.pl b/challenge-113/roger-bell-west/perl/ch-2.pl new file mode 100755 index 0000000000..d7d8004355 --- /dev/null +++ b/challenge-113/roger-bell-west/perl/ch-2.pl @@ -0,0 +1,27 @@ +#! /usr/bin/perl + +use strict; +use warnings; + +use Test::More tests => 1; + +is_deeply(rbt([1,2,3,4,-1,5,6,-1,7]),[27,26,25,24,-1,23,22,-1,21],'example 1'); + +sub rbt { + my $ti=shift; + my $s=0; + foreach my $n (@{$ti}) { + if ($n>=0) { + $s+=$n; + } + } + my @to; + foreach my $n (@{$ti}) { + if ($n>=0) { + push @to,$s-$n; + } else { + push @to,$n; + } + } + return \@to; +} diff --git a/challenge-113/roger-bell-west/python/ch-1.py b/challenge-113/roger-bell-west/python/ch-1.py new file mode 100755 index 0000000000..4252d22ba5 --- /dev/null +++ b/challenge-113/roger-bell-west/python/ch-1.py @@ -0,0 +1,27 @@ +#! /usr/bin/python3 + +import unittest +import re + +def ri(n,d): + dd=re.compile(".*"+str(d)+".*") + e=[i for i in range(1,n+1) if re.match(dd,str(i))] + for i in range(1,1<<len(e)): + s=0 + for ii in range(len(e)): + if 1<<ii & i: + s += e[ii] + if s==n: + return 1 + return 0 + +class TestRi(unittest.TestCase): + + def test_ex1(self): + self.assertEqual(ri(25,7),0,'example 1') + + def test_ex2(self): + self.assertEqual(ri(24,7),1,'example 2') + + +unittest.main() diff --git a/challenge-113/roger-bell-west/python/ch-2.py b/challenge-113/roger-bell-west/python/ch-2.py new file mode 100755 index 0000000000..48a01cb2b0 --- /dev/null +++ b/challenge-113/roger-bell-west/python/ch-2.py @@ -0,0 +1,23 @@ +#! /usr/bin/python3 + +import unittest + +def rbt(ti): + s=0 + for n in ti: + if n>0: + s += n + to=list() + for n in ti: + if n>0: + to.append(s-n) + else: + to.append(n) + return to + +class TestRbt(unittest.TestCase): + + def test_ex1(self): + self.assertEqual(rbt([1,2,3,4,-1,5,6,-1,7]),[27,26,25,24,-1,23,22,-1,21],'example 1') + +unittest.main() diff --git a/challenge-113/roger-bell-west/raku/ch-1.p6 b/challenge-113/roger-bell-west/raku/ch-1.p6 new file mode 100755 index 0000000000..99a72b99b6 --- /dev/null +++ b/challenge-113/roger-bell-west/raku/ch-1.p6 @@ -0,0 +1,24 @@ +#! /usr/bin/perl6 + +use Test; + +plan 2; + +is(ri(25,7),0,'example 1'); +is(ri(24,7),1,'example 2'); + +sub ri($n,$d) { + my @e=grep /$d/,(1..$n); + for 1..1+<@e.elems-1 -> $i { + my $s=0; + for 0..@e.elems-1 -> $ii { + if (1+<$ii +& $i) { + $s+=@e[$ii]; + } + } + if ($s==$n) { + return 1; + } + } + return 0; +} diff --git a/challenge-113/roger-bell-west/raku/ch-2.p6 b/challenge-113/roger-bell-west/raku/ch-2.p6 new file mode 100755 index 0000000000..d416e0c7a7 --- /dev/null +++ b/challenge-113/roger-bell-west/raku/ch-2.p6 @@ -0,0 +1,25 @@ +#! /usr/bin/perl6 + +use Test; + +plan 1; + +is-deeply(rbt([1,2,3,4,-1,5,6,-1,7]),[27,26,25,24,-1,23,22,-1,21],'example 1'); + +sub rbt(@ti) { + my $s=0; + for @ti -> $n { + if ($n>=0) { + $s+=$n; + } + } + my @to; + for @ti -> $n { + if ($n>=0) { + push @to,$s-$n; + } else { + push @to,$n; + } + } + return @to; +}
\ No newline at end of file diff --git a/challenge-113/roger-bell-west/ruby/ch-1.rb b/challenge-113/roger-bell-west/ruby/ch-1.rb new file mode 100755 index 0000000000..3e95e669b2 --- /dev/null +++ b/challenge-113/roger-bell-west/ruby/ch-1.rb @@ -0,0 +1,32 @@ +#! /usr/bin/ruby + +def ri(n,d) + dd=Regexp.new(d.to_s) + e=1.upto(n).find_all {|i| i.to_s =~ dd} + 1.upto(1<<e.length()-1) { |i| + s=0 + 0.upto(e.length()-1) { |ii| + if 1<<ii & i then + s += e[ii] + end + } + if s==n then + return 1 + end + } + return 0 +end + +require 'test/unit' + +class TestRi < Test::Unit::TestCase + + def test_ex1 + assert_equal(0,ri(25,7)) + end + + def test_ex2 + assert_equal(1,ri(24,7)) + end + +end diff --git a/challenge-113/roger-bell-west/ruby/ch-2.rb b/challenge-113/roger-bell-west/ruby/ch-2.rb new file mode 100755 index 0000000000..0ffa3906b4 --- /dev/null +++ b/challenge-113/roger-bell-west/ruby/ch-2.rb @@ -0,0 +1,29 @@ +#! /usr/bin/ruby + +def rbt(ti) + s=0 + ti.each {|n| + if n>0 then + s += n + end + } + to=[] + ti.each {|n| + if n>0 then + to.push(s-n) + else + to.push(n) + end + } + return to +end + +require 'test/unit' + +class TestRbt < Test::Unit::TestCase + + def test_ex1 + assert_equal([27,26,25,24,-1,23,22,-1,21],rbt([1,2,3,4,-1,5,6,-1,7])) + end + +end diff --git a/challenge-113/roger-bell-west/rust/ch-1.rs b/challenge-113/roger-bell-west/rust/ch-1.rs new file mode 100644 index 0000000000..d930b4d363 --- /dev/null +++ b/challenge-113/roger-bell-west/rust/ch-1.rs @@ -0,0 +1,28 @@ +use regex::Regex; + +#[test] +fn test_ex1() { + assert_eq!(ri(25,7),0); +} + +#[test] +fn test_ex2() { + assert_eq!(ri(24,7),1); +} + +fn ri(n: u64,d:u64) -> u8 { + let dd=Regex::new(&d.to_string()).unwrap(); + let e=(1..=n).filter(|i| dd.is_match(&i.to_string())).collect::<Vec<u64>>(); + for i in 1..1<<e.len() { + let mut s=0; + for ii in 0..e.len() { + if (1 << ii & i) > 0 { + s += e[ii] + } + } + if s==n { + return 1; + } + } + return 0; +} diff --git a/challenge-113/roger-bell-west/rust/ch-2.rs b/challenge-113/roger-bell-west/rust/ch-2.rs new file mode 100755 index 0000000000..5a423fbc9a --- /dev/null +++ b/challenge-113/roger-bell-west/rust/ch-2.rs @@ -0,0 +1,25 @@ +#! /bin/sh +//usr/bin/env rustc --test $0 -o ${0}x && ./${0}x; rm -f ${0}x ; exit + +#[test] +fn test_ex1() { + assert_eq!(rbt(vec![1,2,3,4,-1,5,6,-1,7]),vec![27,26,25,24,-1,23,22,-1,21]); +} + +fn rbt (ti: Vec<i64>) -> Vec<i64> { + let mut s: i64=0; + for n in &ti { + if *n>0 { + s += n; + } + } + let mut to=vec![]; + for n in ti { + if n>0 { + to.push(s-n); + } else { + to.push(n); + } + } + return to; +} |
