aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Bell_West <roger@firedrake.org>2021-05-17 12:59:43 +0100
committerRoger Bell_West <roger@firedrake.org>2021-05-17 12:59:43 +0100
commit0bdf5928c01ed343627fb572ba43ec2e77bd43f7 (patch)
treeec3629406fae82b6c03ff771b7af7e5adc90129b
parentc3cd45087006d3f63b05219b8280a25dc1ea7ba9 (diff)
downloadperlweeklychallenge-club-0bdf5928c01ed343627fb572ba43ec2e77bd43f7.tar.gz
perlweeklychallenge-club-0bdf5928c01ed343627fb572ba43ec2e77bd43f7.tar.bz2
perlweeklychallenge-club-0bdf5928c01ed343627fb572ba43ec2e77bd43f7.zip
Solutions for challenge #113
-rwxr-xr-xchallenge-113/roger-bell-west/perl/ch-1.pl26
-rwxr-xr-xchallenge-113/roger-bell-west/perl/ch-2.pl27
-rwxr-xr-xchallenge-113/roger-bell-west/python/ch-1.py27
-rwxr-xr-xchallenge-113/roger-bell-west/python/ch-2.py23
-rwxr-xr-xchallenge-113/roger-bell-west/raku/ch-1.p624
-rwxr-xr-xchallenge-113/roger-bell-west/raku/ch-2.p625
-rwxr-xr-xchallenge-113/roger-bell-west/ruby/ch-1.rb32
-rwxr-xr-xchallenge-113/roger-bell-west/ruby/ch-2.rb29
-rw-r--r--challenge-113/roger-bell-west/rust/ch-1.rs28
-rwxr-xr-xchallenge-113/roger-bell-west/rust/ch-2.rs25
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;
+}