aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Bell_West <roger@firedrake.org>2021-07-19 13:56:03 +0100
committerRoger Bell_West <roger@firedrake.org>2021-07-19 13:56:03 +0100
commit6b112bb1931a60ebdec122eeee697b0d83a76ae2 (patch)
treea5b41b2e122590d2924801c70a0cb4dbb8067cb3
parent675c4ed9a3b441729b9558c051638027242ba77a (diff)
downloadperlweeklychallenge-club-6b112bb1931a60ebdec122eeee697b0d83a76ae2.tar.gz
perlweeklychallenge-club-6b112bb1931a60ebdec122eeee697b0d83a76ae2.tar.bz2
perlweeklychallenge-club-6b112bb1931a60ebdec122eeee697b0d83a76ae2.zip
Solutions for challenge #122
-rwxr-xr-xchallenge-122/roger-bell-west/perl/ch-1.pl21
-rwxr-xr-xchallenge-122/roger-bell-west/perl/ch-2.pl52
-rw-r--r--challenge-122/roger-bell-west/postscript/ch-1.ps44
-rwxr-xr-xchallenge-122/roger-bell-west/python/ch-1.py21
-rwxr-xr-xchallenge-122/roger-bell-west/python/ch-2.py53
-rwxr-xr-xchallenge-122/roger-bell-west/raku/ch-1.p619
-rwxr-xr-xchallenge-122/roger-bell-west/ruby/ch-1.rb23
-rwxr-xr-xchallenge-122/roger-bell-west/ruby/ch-2.rb57
-rwxr-xr-xchallenge-122/roger-bell-west/rust/ch-1.rs19
-rwxr-xr-xchallenge-122/roger-bell-west/rust/ch-2.rs58
10 files changed, 367 insertions, 0 deletions
diff --git a/challenge-122/roger-bell-west/perl/ch-1.pl b/challenge-122/roger-bell-west/perl/ch-1.pl
new file mode 100755
index 0000000000..d209bf2324
--- /dev/null
+++ b/challenge-122/roger-bell-west/perl/ch-1.pl
@@ -0,0 +1,21 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 1;
+
+is_deeply(aos([10, 20, 30, 40, 50, 60, 70, 80, 90]),[10, 15, 20, 25, 30, 35, 40, 45, 50],'example 1');
+
+sub aos {
+ my $m=shift;
+ my $n=0;
+ my $t=0;
+ my @o;
+ foreach my $i (@{$m}) {
+ $t+=$i;
+ $n++;
+ push @o,$t/$n;
+ }
+ return \@o;
+}
diff --git a/challenge-122/roger-bell-west/perl/ch-2.pl b/challenge-122/roger-bell-west/perl/ch-2.pl
new file mode 100755
index 0000000000..eb30ab32aa
--- /dev/null
+++ b/challenge-122/roger-bell-west/perl/ch-2.pl
@@ -0,0 +1,52 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 2;
+
+is_deeply(bp(4),[
+ [1,1,1,1],
+ [1,1,2],
+ [1,2,1],
+ [1,3],
+ [2,1,1],
+ [2,2],
+ [3,1],
+ ],'example 1');
+
+is_deeply(bp(5),[
+ [1,1,1,1,1],
+ [1,1,1,2],
+ [1,1,2,1],
+ [1,1,3],
+ [1,2,1,1],
+ [1,2,2],
+ [1,3,1],
+ [2,1,1,1],
+ [2,1,2],
+ [2,2,1],
+ [2,3],
+ [3,1,1],
+ [3,2],
+ ],'example 2');
+
+use List::Util qw(sum0 min);
+
+sub bp {
+ my $n=shift;
+ my @o;
+ my @p=([]);
+ while (my $s=pop @p) {
+ my $t=sum0(@{$s});
+ if ($t==$n) {
+ push @o,$s;
+ } else {
+ foreach my $i (1..min(3,$n-$t)) {
+ push @p,[@{$s},$i];
+ }
+ }
+ }
+ @o=reverse @o;
+ return \@o;
+}
diff --git a/challenge-122/roger-bell-west/postscript/ch-1.ps b/challenge-122/roger-bell-west/postscript/ch-1.ps
new file mode 100644
index 0000000000..05ae33116c
--- /dev/null
+++ b/challenge-122/roger-bell-west/postscript/ch-1.ps
@@ -0,0 +1,44 @@
+%! Not DSC compliant
+
+/aos {
+ /n 0 def
+ /t 0 def
+ dup length array /o exch def
+ {
+ n add /n exch def
+ o t
+ /t t 1 add def
+ n t div cvi put
+ } forall
+ o
+} def
+
+/str 50 string def
+/fs 12 def
+/Helvetica findfont
+fs scalefont setfont
+20 750 translate
+/line 0 def
+/testnum 1 def
+
+/disptest {
+ 0 line moveto testnum str cvs show (.) show
+ aos
+ /to exch def
+ /ti exch def
+ /pass true def
+ 0 1 ti length 1 sub {
+ dup ti exch get exch to exch get ne
+ { /pass false def exit } if
+ } for
+ pass { (Pass) } { (FAIL) } ifelse
+ 50 line moveto show
+ /line line fs 2 mul sub def
+ /testnum testnum 1 add def
+} def
+
+[ 10 15 20 25 30 35 40 45 50 ]
+[ 10 20 30 40 50 60 70 80 90 ]
+disptest
+
+showpage
diff --git a/challenge-122/roger-bell-west/python/ch-1.py b/challenge-122/roger-bell-west/python/ch-1.py
new file mode 100755
index 0000000000..773886135d
--- /dev/null
+++ b/challenge-122/roger-bell-west/python/ch-1.py
@@ -0,0 +1,21 @@
+#! /usr/bin/python3
+
+import unittest
+import re
+
+def aos(m):
+ n=0
+ t=0
+ o=list()
+ for i in m:
+ t+=i
+ n+=1
+ o.append(t/n)
+ return o
+
+class TestAos(unittest.TestCase):
+
+ def test_ex1(self):
+ self.assertEqual(aos([10, 20, 30, 40, 50, 60, 70, 80, 90]),[10, 15, 20, 25, 30, 35, 40, 45, 50],'example 1')
+
+unittest.main()
diff --git a/challenge-122/roger-bell-west/python/ch-2.py b/challenge-122/roger-bell-west/python/ch-2.py
new file mode 100755
index 0000000000..181032a9dc
--- /dev/null
+++ b/challenge-122/roger-bell-west/python/ch-2.py
@@ -0,0 +1,53 @@
+#! /usr/bin/python3
+
+import unittest
+import copy
+
+def bs(n):
+ o=list()
+ p=list()
+ p.append(list())
+ while len(p) > 0:
+ s=p.pop()
+ t=sum(s)
+ if t==n:
+ o.append(s)
+ else:
+ for i in range(1,1+min(3,n-t)):
+ q=copy.copy(s)
+ q.append(i)
+ p.append(q)
+ o.reverse()
+ return o
+
+class TestBs(unittest.TestCase):
+
+ def test_ex1(self):
+ self.assertEqual(bs(4),[
+ [1,1,1,1],
+ [1,1,2],
+ [1,2,1],
+ [1,3],
+ [2,1,1],
+ [2,2],
+ [3,1]
+ ],'example 1')
+
+ def test_ex2(self):
+ self.assertEqual(bs(5),[
+ [1,1,1,1,1],
+ [1,1,1,2],
+ [1,1,2,1],
+ [1,1,3],
+ [1,2,1,1],
+ [1,2,2],
+ [1,3,1],
+ [2,1,1,1],
+ [2,1,2],
+ [2,2,1],
+ [2,3],
+ [3,1,1],
+ [3,2]
+ ],'example 2')
+
+unittest.main()
diff --git a/challenge-122/roger-bell-west/raku/ch-1.p6 b/challenge-122/roger-bell-west/raku/ch-1.p6
new file mode 100755
index 0000000000..1fe1babf56
--- /dev/null
+++ b/challenge-122/roger-bell-west/raku/ch-1.p6
@@ -0,0 +1,19 @@
+#! /usr/bin/perl6
+
+use Test;
+
+plan 1;
+
+is-deeply(aos([10, 20, 30, 40, 50, 60, 70, 80, 90]),[10, 15, 20, 25, 30, 35, 40, 45, 50],'example 1');
+
+sub aos(@m) {
+ my $n=0;
+ my $t=0;
+ my @o;
+ for @m -> $i {
+ $t+=$i;
+ $n++;
+ push @o,floor($t/$n);
+ }
+ return @o;
+}
diff --git a/challenge-122/roger-bell-west/ruby/ch-1.rb b/challenge-122/roger-bell-west/ruby/ch-1.rb
new file mode 100755
index 0000000000..7ef095b1b8
--- /dev/null
+++ b/challenge-122/roger-bell-west/ruby/ch-1.rb
@@ -0,0 +1,23 @@
+#! /usr/bin/ruby
+
+def aos(m)
+ n=0
+ t=0
+ o=[]
+ m.each {|i|
+ t+=i
+ n+=1
+ o.push(t/n)
+ }
+ return o
+end
+
+require 'test/unit'
+
+class TestAos < Test::Unit::TestCase
+
+ def test_ex1
+ assert_equal([10, 15, 20, 25, 30, 35, 40, 45, 50],aos([10, 20, 30, 40, 50, 60, 70, 80, 90]))
+ end
+
+end
diff --git a/challenge-122/roger-bell-west/ruby/ch-2.rb b/challenge-122/roger-bell-west/ruby/ch-2.rb
new file mode 100755
index 0000000000..bee3384481
--- /dev/null
+++ b/challenge-122/roger-bell-west/ruby/ch-2.rb
@@ -0,0 +1,57 @@
+#! /usr/bin/ruby
+
+def bs(n)
+ o=[]
+ p=[[]]
+ while p.length() > 0 do
+ s=p.pop()
+ t=s.sum()
+ if t==n then
+ o.push(s)
+ else
+ 1.upto([3,n-t].min()) {|i|
+ q=s.dup
+ q.push(i)
+ p.push(q)
+ }
+ end
+ end
+ o.reverse!()
+ return o
+end
+
+require 'test/unit'
+
+class TestBs < Test::Unit::TestCase
+
+ def test_ex1
+ assert_equal([
+ [1,1,1,1],
+ [1,1,2],
+ [1,2,1],
+ [1,3],
+ [2,1,1],
+ [2,2],
+ [3,1]
+ ],bs(4))
+ end
+
+ def test_ex2
+ assert_equal([
+ [1,1,1,1,1],
+ [1,1,1,2],
+ [1,1,2,1],
+ [1,1,3],
+ [1,2,1,1],
+ [1,2,2],
+ [1,3,1],
+ [2,1,1,1],
+ [2,1,2],
+ [2,2,1],
+ [2,3],
+ [3,1,1],
+ [3,2]
+ ],bs(5))
+ end
+
+end
diff --git a/challenge-122/roger-bell-west/rust/ch-1.rs b/challenge-122/roger-bell-west/rust/ch-1.rs
new file mode 100755
index 0000000000..c68808dd57
--- /dev/null
+++ b/challenge-122/roger-bell-west/rust/ch-1.rs
@@ -0,0 +1,19 @@
+#! /bin/sh
+//usr/bin/env rustc --test $0 -o ${0}x && ./${0}x; rm -f ${0}x ; exit
+
+#[test]
+fn test_ex1() {
+ assert_eq!(aos(vec![10, 20, 30, 40, 50, 60, 70, 80, 90]),vec![10, 15, 20, 25, 30, 35, 40, 45, 50]);
+}
+
+fn aos (m: Vec<i64>) -> Vec<i64> {
+ let mut n=0;
+ let mut t=0;
+ let mut o=vec![];
+ for i in m {
+ t+=i;
+ n+=1;
+ o.push(t/n)
+ }
+ return o;
+}
diff --git a/challenge-122/roger-bell-west/rust/ch-2.rs b/challenge-122/roger-bell-west/rust/ch-2.rs
new file mode 100755
index 0000000000..5080e5002c
--- /dev/null
+++ b/challenge-122/roger-bell-west/rust/ch-2.rs
@@ -0,0 +1,58 @@
+#! /bin/sh
+//usr/bin/env rustc --test $0 -o ${0}x && ./${0}x; rm -f ${0}x ; exit
+
+#[test]
+fn test_ex1() {
+ assert_eq!(bp(4),vec![
+ vec![1,1,1,1],
+ vec![1,1,2],
+ vec![1,2,1],
+ vec![1,3],
+ vec![2,1,1],
+ vec![2,2],
+ vec![3,1],
+ ]);
+}
+
+#[test]
+fn test_ex2() {
+ assert_eq!(bp(5),vec![
+ vec![1,1,1,1,1],
+ vec![1,1,1,2],
+ vec![1,1,2,1],
+ vec![1,1,3],
+ vec![1,2,1,1],
+ vec![1,2,2],
+ vec![1,3,1],
+ vec![2,1,1,1],
+ vec![2,1,2],
+ vec![2,2,1],
+ vec![2,3],
+ vec![3,1,1],
+ vec![3,2],
+ ]);
+}
+
+fn bp (n: u32) -> Vec<Vec<u32>> {
+ let mut o=vec![];
+ let mut p=vec![vec![]];
+ while p.len() > 0 {
+ let s=p.pop().unwrap();
+ let t: u32=s.iter().sum();
+ if t==n {
+ o.push(s);
+ } else {
+ let mut mx=n-t;
+ if mx > 3 {
+ mx=3;
+ }
+ for i in 1..=mx {
+ let mut q=s.clone();
+ q.push(i);
+ p.push(q);
+ }
+ }
+ }
+ o.reverse();
+ return o;
+}