aboutsummaryrefslogtreecommitdiff
path: root/challenge-109
diff options
context:
space:
mode:
Diffstat (limited to 'challenge-109')
-rwxr-xr-xchallenge-109/roger-bell-west/perl/ch-1.pl20
-rwxr-xr-xchallenge-109/roger-bell-west/perl/ch-2.pl31
-rwxr-xr-xchallenge-109/roger-bell-west/python/ch-1.py20
-rwxr-xr-xchallenge-109/roger-bell-west/python/ch-2.py26
-rwxr-xr-xchallenge-109/roger-bell-west/raku/ch-1.p620
-rwxr-xr-xchallenge-109/roger-bell-west/raku/ch-2.p627
-rwxr-xr-xchallenge-109/roger-bell-west/ruby/ch-1.rb19
-rwxr-xr-xchallenge-109/roger-bell-west/ruby/ch-2.rb29
-rwxr-xr-xchallenge-109/roger-bell-west/rust/ch-1.rs21
-rw-r--r--challenge-109/roger-bell-west/rust/ch-2.rs29
10 files changed, 242 insertions, 0 deletions
diff --git a/challenge-109/roger-bell-west/perl/ch-1.pl b/challenge-109/roger-bell-west/perl/ch-1.pl
new file mode 100755
index 0000000000..d9c2df80ba
--- /dev/null
+++ b/challenge-109/roger-bell-west/perl/ch-1.pl
@@ -0,0 +1,20 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+
+use List::Util qw(sum);
+
+use Test::More tests => 1;
+
+is_deeply(chowla(20),[0, 0, 0, 2, 0, 5, 0, 6, 3, 7, 0, 15, 0, 9, 8, 14, 0, 20, 0, 21],'example 1');
+
+sub chowla {
+ my $count=shift;
+ my @a;
+ foreach my $n (1..$count) {
+ push @a,sum(0,grep {$n % $_ == 0} (2..int($n/2)));
+ }
+ return \@a;
+}
+
diff --git a/challenge-109/roger-bell-west/perl/ch-2.pl b/challenge-109/roger-bell-west/perl/ch-2.pl
new file mode 100755
index 0000000000..a2494b6e0d
--- /dev/null
+++ b/challenge-109/roger-bell-west/perl/ch-2.pl
@@ -0,0 +1,31 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+
+use Algorithm::Permute;
+
+use Test::More tests => 3;
+
+{
+ my @q=@{foursquare(1..7)};
+ is($q[0],$q[2]+$q[3],'test 1');
+ is($q[1]+$q[2],$q[4]+$q[5],'test 2');
+ is($q[3]+$q[4],$q[6],'test 3');
+}
+
+sub foursquare {
+ my @in=@_;
+ my @sol;
+ Algorithm::Permute::permute {
+ my $b=$in[1]+$in[2]+$in[3];
+ if ($in[0]+$in[1]==$b) {
+ my $c=$in[3]+$in[4]+$in[5];
+ if ($b==$c && $c == $in[5]+$in[6]) {
+ @sol=@in;
+ }
+ }
+ } @in;
+ return \@sol;
+}
+
diff --git a/challenge-109/roger-bell-west/python/ch-1.py b/challenge-109/roger-bell-west/python/ch-1.py
new file mode 100755
index 0000000000..52daa1c69d
--- /dev/null
+++ b/challenge-109/roger-bell-west/python/ch-1.py
@@ -0,0 +1,20 @@
+#! /usr/bin/python3
+
+import unittest
+
+def chowla(count):
+ a=[]
+ for n in range(1,count+1):
+ s=0
+ for i in range(2,n):
+ if n % i == 0:
+ s += i
+ a.append(s)
+ return a
+
+class TestChowla(unittest.TestCase):
+
+ def test_ex1(self):
+ self.assertEqual(chowla(20),[0, 0, 0, 2, 0, 5, 0, 6, 3, 7, 0, 15, 0, 9, 8, 14, 0, 20, 0, 21],'example 1')
+
+unittest.main()
diff --git a/challenge-109/roger-bell-west/python/ch-2.py b/challenge-109/roger-bell-west/python/ch-2.py
new file mode 100755
index 0000000000..83c0586833
--- /dev/null
+++ b/challenge-109/roger-bell-west/python/ch-2.py
@@ -0,0 +1,26 @@
+#! /usr/bin/python3
+
+import unittest
+
+from itertools import permutations
+
+def foursquare(src):
+ sol=[]
+ for t in permutations(src):
+ b=t[1]+t[2]+t[3]
+ if t[0]+t[1]==b:
+ c=t[3]+t[4]+t[5]
+ if b==c and c == t[5]+t[6]:
+ sol=t
+ break
+ return sol
+
+class TestFoursquare(unittest.TestCase):
+
+ def test_ex1(self):
+ q=foursquare([1,2,3,4,5,6,7])
+ self.assertEqual(q[0],q[2]+q[3],'test 1')
+ self.assertEqual(q[1]+q[2],q[4]+q[5],'test 2')
+ self.assertEqual(q[3]+q[4],q[6],'test 3')
+
+unittest.main()
diff --git a/challenge-109/roger-bell-west/raku/ch-1.p6 b/challenge-109/roger-bell-west/raku/ch-1.p6
new file mode 100755
index 0000000000..ea5d3662ec
--- /dev/null
+++ b/challenge-109/roger-bell-west/raku/ch-1.p6
@@ -0,0 +1,20 @@
+#! /usr/bin/perl6
+
+use Test;
+
+plan 1;
+
+is-deeply(chowla(20),[0, 0, 0, 2, 0, 5, 0, 6, 3, 7, 0, 15, 0, 9, 8, 14, 0, 20, 0, 21],'example 1');
+
+sub chowla($count) {
+ my @a;
+ for 1..$count -> $n {
+ push @a,sum(gather {
+ take 0;
+ for (2..floor($n/2)) {
+ take $_ if $n %% $_
+ }
+ });
+ }
+ return @a;
+}
diff --git a/challenge-109/roger-bell-west/raku/ch-2.p6 b/challenge-109/roger-bell-west/raku/ch-2.p6
new file mode 100755
index 0000000000..e4574fe2cc
--- /dev/null
+++ b/challenge-109/roger-bell-west/raku/ch-2.p6
@@ -0,0 +1,27 @@
+#! /usr/bin/perl6
+
+use Test;
+
+plan 3;
+
+{
+ my @q=foursquare(1..7);
+ is(@q[0],@q[2]+@q[3],'test 1');
+ is(@q[1]+@q[2],@q[4]+@q[5],'test 2');
+ is(@q[3]+@q[4],@q[6],'test 3');
+}
+
+sub foursquare(@in) {
+ my @sol;
+ for @in.permutations -> @t {
+ my $b=@t[1]+@t[2]+@t[3];
+ if (@t[0]+@t[1]==$b) {
+ my $c=@t[3]+@t[4]+@t[5];
+ if ($b==$c && $c == @t[5]+@t[6]) {
+ @sol=@t;
+ last;
+ }
+ }
+ }
+ return @sol;
+}
diff --git a/challenge-109/roger-bell-west/ruby/ch-1.rb b/challenge-109/roger-bell-west/ruby/ch-1.rb
new file mode 100755
index 0000000000..5c6699c116
--- /dev/null
+++ b/challenge-109/roger-bell-west/ruby/ch-1.rb
@@ -0,0 +1,19 @@
+#! /usr/bin/ruby
+
+def chowla(count)
+ a=[]
+ 1.upto(count) do |n|
+ a.push(2.upto((n/2).floor).select{|i| n % i == 0}.sum)
+ end
+ return a
+end
+
+require 'test/unit'
+
+class TestChowla < Test::Unit::TestCase
+
+ def test_ex1
+ assert_equal([0, 0, 0, 2, 0, 5, 0, 6, 3, 7, 0, 15, 0, 9, 8, 14, 0, 20, 0, 21],chowla(20))
+ end
+
+end
diff --git a/challenge-109/roger-bell-west/ruby/ch-2.rb b/challenge-109/roger-bell-west/ruby/ch-2.rb
new file mode 100755
index 0000000000..ad294d792c
--- /dev/null
+++ b/challenge-109/roger-bell-west/ruby/ch-2.rb
@@ -0,0 +1,29 @@
+#! /usr/bin/ruby
+
+def foursquare(src)
+ sol=[]
+ src.permutation do |t|
+ b=t[1]+t[2]+t[3]
+ if t[0]+t[1]==b then
+ c=t[3]+t[4]+t[5]
+ if b==c && c == t[5]+t[6] then
+ sol=t
+ break
+ end
+ end
+ end
+ return sol
+end
+
+require 'test/unit'
+
+class TestFoursquare < Test::Unit::TestCase
+
+ def test_ex1
+ q=foursquare([1,2,3,4,5,6,7])
+ assert_equal(q[0],q[2]+q[3])
+ assert_equal(q[1]+q[2],q[4]+q[5])
+ assert_equal(q[3]+q[4],q[6])
+ end
+
+end
diff --git a/challenge-109/roger-bell-west/rust/ch-1.rs b/challenge-109/roger-bell-west/rust/ch-1.rs
new file mode 100755
index 0000000000..c9776825b0
--- /dev/null
+++ b/challenge-109/roger-bell-west/rust/ch-1.rs
@@ -0,0 +1,21 @@
+#! /bin/sh
+//usr/bin/env rustc --test $0 -o ${0}x && ./${0}x; rm -f ${0}x ; exit
+
+#[test]
+fn test_ex1() {
+ assert_eq!(chowla(20),vec![0, 0, 0, 2, 0, 5, 0, 6, 3, 7, 0, 15, 0, 9, 8, 14, 0, 20, 0, 21]);
+}
+
+fn chowla(count: usize) -> Vec<usize> {
+ let mut a: Vec<usize>=vec![];
+ for n in 1..=count {
+ let mut s=0;
+ for i in 2..=n/2 {
+ if n % i == 0 {
+ s += i
+ }
+ }
+ a.push(s);
+ }
+ return a;
+}
diff --git a/challenge-109/roger-bell-west/rust/ch-2.rs b/challenge-109/roger-bell-west/rust/ch-2.rs
new file mode 100644
index 0000000000..a7f46258c0
--- /dev/null
+++ b/challenge-109/roger-bell-west/rust/ch-2.rs
@@ -0,0 +1,29 @@
+use permutohedron::LexicalPermutation;
+
+#[test]
+fn test_ex1() {
+ let q=foursquare((1..=7).collect::<Vec<i32>>());
+ assert_eq!(q[0],q[2]+q[3]);
+ assert_eq!(q[1]+q[2],q[4]+q[5]);
+ assert_eq!(q[3]+q[4],q[6]);
+}
+
+fn foursquare(src: Vec<i32>) -> Vec<i32> {
+ let mut t=src;
+ let mut sol: Vec<i32>=vec![];
+ t.sort();
+ loop {
+ let b=t[1]+t[2]+t[3];
+ if t[0]+t[1]==b {
+ let c=t[3]+t[4]+t[5];
+ if b==c && c == t[5]+t[6] {
+ sol=t;
+ break;
+ }
+ }
+ if !t.next_permutation() {
+ break;
+ }
+ }
+ return sol;
+}