diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2021-07-20 14:21:19 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-07-20 14:21:19 +0100 |
| commit | 5119e62a344c7812c91c01098e0ecbf40aa47f4f (patch) | |
| tree | b24071189af1bc686b960ecb7b424beac7e8bbe6 | |
| parent | 0b32f660077b74ba875d644a904b20409fa89500 (diff) | |
| parent | 6b112bb1931a60ebdec122eeee697b0d83a76ae2 (diff) | |
| download | perlweeklychallenge-club-5119e62a344c7812c91c01098e0ecbf40aa47f4f.tar.gz perlweeklychallenge-club-5119e62a344c7812c91c01098e0ecbf40aa47f4f.tar.bz2 perlweeklychallenge-club-5119e62a344c7812c91c01098e0ecbf40aa47f4f.zip | |
Merge pull request #4559 from Firedrake/rogerbw-challenge-122
Solutions for challenge #122
| -rwxr-xr-x | challenge-122/roger-bell-west/perl/ch-1.pl | 21 | ||||
| -rwxr-xr-x | challenge-122/roger-bell-west/perl/ch-2.pl | 52 | ||||
| -rw-r--r-- | challenge-122/roger-bell-west/postscript/ch-1.ps | 44 | ||||
| -rwxr-xr-x | challenge-122/roger-bell-west/python/ch-1.py | 21 | ||||
| -rwxr-xr-x | challenge-122/roger-bell-west/python/ch-2.py | 53 | ||||
| -rwxr-xr-x | challenge-122/roger-bell-west/raku/ch-1.p6 | 19 | ||||
| -rwxr-xr-x | challenge-122/roger-bell-west/ruby/ch-1.rb | 23 | ||||
| -rwxr-xr-x | challenge-122/roger-bell-west/ruby/ch-2.rb | 57 | ||||
| -rwxr-xr-x | challenge-122/roger-bell-west/rust/ch-1.rs | 19 | ||||
| -rwxr-xr-x | challenge-122/roger-bell-west/rust/ch-2.rs | 58 |
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; +} |
