aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xchallenge-141/roger-bell-west/perl/ch-1.pl42
-rwxr-xr-xchallenge-141/roger-bell-west/perl/ch-2.pl28
-rw-r--r--challenge-141/roger-bell-west/postscript/ch-1.ps66
-rw-r--r--challenge-141/roger-bell-west/postscript/ch-2.ps35
-rwxr-xr-xchallenge-141/roger-bell-west/python/ch-1.py36
-rwxr-xr-xchallenge-141/roger-bell-west/python/ch-2.py26
-rwxr-xr-xchallenge-141/roger-bell-west/raku/ch-1.p639
-rwxr-xr-xchallenge-141/roger-bell-west/raku/ch-2.p626
-rwxr-xr-xchallenge-141/roger-bell-west/ruby/ch-1.rb43
-rwxr-xr-xchallenge-141/roger-bell-west/ruby/ch-2.rb33
-rwxr-xr-xchallenge-141/roger-bell-west/rust/ch-1.rs39
-rwxr-xr-xchallenge-141/roger-bell-west/rust/ch-2.rs30
12 files changed, 443 insertions, 0 deletions
diff --git a/challenge-141/roger-bell-west/perl/ch-1.pl b/challenge-141/roger-bell-west/perl/ch-1.pl
new file mode 100755
index 0000000000..4853fc58d3
--- /dev/null
+++ b/challenge-141/roger-bell-west/perl/ch-1.pl
@@ -0,0 +1,42 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 1;
+
+is_deeply(divisors(8,10),[24,30,40,42,54,56,66,70,78,88],'example 1');
+
+sub factorcount {
+ my $n=shift;
+ if ($n==1) {
+ return 1;
+ }
+ my $f=2;
+ my $s=int(sqrt($n));
+ if ($s*$s == $n) {
+ $s--;
+ $f++;
+ }
+ foreach my $pf (2..$s) {
+ if ($n % $pf == 0) {
+ $f+=2;
+ }
+ }
+ return $f;
+}
+
+sub divisors {
+ my ($count,$n)=@_;
+ my $nn=$n;
+ my @a;
+ my $t=0;
+ while ($nn) {
+ $t++;
+ if (factorcount($t)==$count) {
+ push @a,$t;
+ $nn--;
+ }
+ }
+ return \@a;
+}
diff --git a/challenge-141/roger-bell-west/perl/ch-2.pl b/challenge-141/roger-bell-west/perl/ch-2.pl
new file mode 100755
index 0000000000..2d43ec2eff
--- /dev/null
+++ b/challenge-141/roger-bell-west/perl/ch-2.pl
@@ -0,0 +1,28 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 2;
+
+is(likenumber(1234,2),9,'example 1');
+is(likenumber(768,4),3,'example 2');
+
+sub likenumber {
+ my ($source,$factor)=@_;
+ my @s=split '',$source;
+ my $m=scalar @s;
+ my $n=0;
+ foreach my $mask (1..(1<<$m)-2) {
+ my $c=0;
+ foreach my $di (0..$m-1) {
+ if ($mask & 1<<$di) {
+ $c=$c*10+$s[$di];
+ }
+ }
+ if ($c % $factor == 0) {
+ $n++;
+ }
+ }
+ return $n;
+}
diff --git a/challenge-141/roger-bell-west/postscript/ch-1.ps b/challenge-141/roger-bell-west/postscript/ch-1.ps
new file mode 100644
index 0000000000..9c71ddf223
--- /dev/null
+++ b/challenge-141/roger-bell-west/postscript/ch-1.ps
@@ -0,0 +1,66 @@
+%!PS
+
+/aeq {
+ 2 dict begin
+ /a exch def
+ /b exch def
+ a length b length eq {
+ /e true def
+ 0 1 a length 1 sub {
+ dup a exch get
+ exch b exch get ne {
+ /e false def
+ exit
+ } if
+ } for
+ e
+ } {
+ false
+ } ifelse
+ end
+} bind def
+
+/apush { % [a b] c -> [a b c]
+ /t exch def
+ [ exch aload pop t ]
+} bind def
+
+/factorctr {
+ /n exch def
+ n 1 eq {
+ 1
+ } {
+ /f 2 def
+ /s n sqrt cvi def
+ s s mul n eq {
+ /s s 1 sub def
+ /f f 1 add def
+ } if
+ 2 1 s {
+ n exch mod 0 eq {
+ /f f 2 add def
+ } if
+ } for
+ f
+ } ifelse
+} bind def
+
+/divisors {
+ /nn exch def
+ /ctr exch def
+ /a 0 array def
+ /t 0 def
+ {
+ nn 0 le {
+ exit
+ } if
+ /t t 1 add def
+ t factorctr ctr eq {
+ /a a t apush def
+ /nn nn 1 sub def
+ } if
+ } loop
+ a
+} bind def
+
+8 10 divisors [ 24 30 40 42 54 56 66 70 78 88 ] aeq { (Pass) } { (FAIL) } ifelse =
diff --git a/challenge-141/roger-bell-west/postscript/ch-2.ps b/challenge-141/roger-bell-west/postscript/ch-2.ps
new file mode 100644
index 0000000000..2a6606f5b3
--- /dev/null
+++ b/challenge-141/roger-bell-west/postscript/ch-2.ps
@@ -0,0 +1,35 @@
+%!PS
+
+/apush { % [a b] c -> [a b c]
+ /t exch def
+ [ exch aload pop t ]
+} bind def
+
+/i2s {
+ dup log cvi 1 add string cvs
+} bind def
+
+/likenumber {
+ /factor exch def
+ /source exch def
+ /s source i2s def
+ /m s length def
+ /n 0 def
+ 1 1 1 m bitshift 2 sub {
+ /mask exch def
+ /c 0 def
+ 0 1 m 1 sub {
+ /di exch def
+ mask 1 di bitshift and 0 gt {
+ /c c 10 mul s di get cvi add def
+ } if
+ } for
+ c factor mod 0 eq {
+ /n n 1 add def
+ } if
+ } for
+ n
+} bind def
+
+1234 2 likenumber 9 eq { (Pass) } { (FAIL) } ifelse print ( ) print
+768 4 likenumber 3 eq { (Pass) } { (FAIL) } ifelse =
diff --git a/challenge-141/roger-bell-west/python/ch-1.py b/challenge-141/roger-bell-west/python/ch-1.py
new file mode 100755
index 0000000000..b1e8726449
--- /dev/null
+++ b/challenge-141/roger-bell-west/python/ch-1.py
@@ -0,0 +1,36 @@
+#! /usr/bin/python3
+
+import unittest
+
+from math import sqrt
+
+def factorcount(n):
+ if n==1:
+ return 1
+ f=2
+ s=int(sqrt(n))
+ if s*s==n:
+ s-=1
+ f+=1
+ for pf in range(2,s+1):
+ if n % pf == 0:
+ f += 2
+ return f
+
+def divisors(count,n):
+ nn=n
+ a=[]
+ t=0
+ while nn:
+ t+=1
+ if factorcount(t)==count:
+ a.append(t)
+ nn-=1
+ return a
+
+class TestDivisors(unittest.TestCase):
+
+ def test_ex1(self):
+ self.assertEqual(divisors(8,10),[24,30,40,42,54,56,66,70,78,88],'example 2')
+
+unittest.main()
diff --git a/challenge-141/roger-bell-west/python/ch-2.py b/challenge-141/roger-bell-west/python/ch-2.py
new file mode 100755
index 0000000000..1bcf983c5f
--- /dev/null
+++ b/challenge-141/roger-bell-west/python/ch-2.py
@@ -0,0 +1,26 @@
+#! /usr/bin/python3
+
+import unittest
+
+def likenumber(source,factor):
+ s=[int(i) for i in str(source)]
+ m=len(s)
+ n=0
+ for mask in range(1,(1<<m)-1):
+ c=0
+ for di in range(m):
+ if mask & 1<<di:
+ c=c*10+s[di]
+ if c % factor == 0:
+ n+=1
+ return n
+
+class TestLikenumber(unittest.TestCase):
+
+ def test_ex1(self):
+ self.assertEqual(likenumber(1234,2),9,'example 1')
+
+ def test_ex2(self):
+ self.assertEqual(likenumber(768,4),3,'example 2')
+
+unittest.main()
diff --git a/challenge-141/roger-bell-west/raku/ch-1.p6 b/challenge-141/roger-bell-west/raku/ch-1.p6
new file mode 100755
index 0000000000..aba82940bb
--- /dev/null
+++ b/challenge-141/roger-bell-west/raku/ch-1.p6
@@ -0,0 +1,39 @@
+#! /usr/bin/perl6
+
+use Test;
+
+plan 1;
+
+is-deeply(divisors(8,10),[24,30,40,42,54,56,66,70,78,88],'example 1');
+
+sub factorcount($n) {
+ if ($n==1) {
+ return 1;
+ }
+ my $f=2;
+ my $s=floor(sqrt($n));
+ if ($s*$s == $n) {
+ $s--;
+ $f+=1;
+ }
+ for (2..$s) -> $pf {
+ if ($n % $pf == 0) {
+ $f+=2;
+ }
+ }
+ return $f;
+}
+
+sub divisors($count,$n) {
+ my $nn=$n;
+ my @a;
+ my $t=0;
+ while ($nn) {
+ $t++;
+ if (factorcount($t)==$count) {
+ push @a,$t;
+ $nn--;
+ }
+ }
+ return @a;
+}
diff --git a/challenge-141/roger-bell-west/raku/ch-2.p6 b/challenge-141/roger-bell-west/raku/ch-2.p6
new file mode 100755
index 0000000000..982293ba2b
--- /dev/null
+++ b/challenge-141/roger-bell-west/raku/ch-2.p6
@@ -0,0 +1,26 @@
+#! /usr/bin/perl6
+
+use Test;
+
+plan 2;
+
+is(likenumber(1234,2),9,'example 1');
+is(likenumber(768,4),3,'example 2');
+
+sub likenumber($source,$factor) {
+ my @s=$source.comb;
+ my $m=@s.elems;
+ my $n=0;
+ for (1..(1 +< $m)-2) -> $mask {
+ my $c=0;
+ for (0..$m-1) -> $di {
+ if ($mask +& (1 +< $di)) {
+ $c=$c*10+@s[$di];
+ }
+ }
+ if ($c % $factor == 0) {
+ $n++;
+ }
+ }
+ return $n;
+}
diff --git a/challenge-141/roger-bell-west/ruby/ch-1.rb b/challenge-141/roger-bell-west/ruby/ch-1.rb
new file mode 100755
index 0000000000..ce0c339fb6
--- /dev/null
+++ b/challenge-141/roger-bell-west/ruby/ch-1.rb
@@ -0,0 +1,43 @@
+#! /usr/bin/ruby
+
+def factorcount(n)
+ if n==1 then
+ return 1
+ end
+ f=2
+ s=Math.sqrt(n).floor
+ if s*s==n then
+ s-=1
+ f+=1
+ end
+ 2.upto(s) do |pf|
+ if n % pf == 0 then
+ f+= 2
+ end
+ end
+ return f
+end
+
+def divisors(count,n)
+ nn=n
+ a=[]
+ t=0
+ while nn>0 do
+ t+=1
+ if factorcount(t)==count then
+ a.push(t)
+ nn-=1
+ end
+ end
+ return a
+end
+
+require 'test/unit'
+
+class TestDivisors < Test::Unit::TestCase
+
+ def test_ex1
+ assert_equal([24,30,40,42,54,56,66,70,78,88],divisors(8,10))
+ end
+
+end
diff --git a/challenge-141/roger-bell-west/ruby/ch-2.rb b/challenge-141/roger-bell-west/ruby/ch-2.rb
new file mode 100755
index 0000000000..b48d253329
--- /dev/null
+++ b/challenge-141/roger-bell-west/ruby/ch-2.rb
@@ -0,0 +1,33 @@
+#! /usr/bin/ruby
+
+def likenumber(source,factor)
+ s=source.to_s.split('').map {|i| i.to_i}
+ m=s.length
+ n=0
+ 1.upto((1<<m)-2) do |mask|
+ c=0
+ 0.upto(m-1) do |di|
+ if (mask & 1<<di)>0 then
+ c=c*10+s[di]
+ end
+ end
+ if c % factor == 0 then
+ n+=1
+ end
+ end
+ return n
+end
+
+require 'test/unit'
+
+class TestLikenumber < Test::Unit::TestCase
+
+ def test_ex1
+ assert_equal(9,likenumber(1234,2))
+ end
+
+ def test_ex2
+ assert_equal(3,likenumber(768,4))
+ end
+
+end
diff --git a/challenge-141/roger-bell-west/rust/ch-1.rs b/challenge-141/roger-bell-west/rust/ch-1.rs
new file mode 100755
index 0000000000..d1ea4d6669
--- /dev/null
+++ b/challenge-141/roger-bell-west/rust/ch-1.rs
@@ -0,0 +1,39 @@
+#! /bin/sh
+//usr/bin/env rustc --test $0 -o ${0}x && ./${0}x; rm -f ${0}x ; exit
+
+#[test]
+fn test_ex1() {
+ assert_eq!(divisors(8,10),vec![24,30,40,42,54,56,66,70,78,88]);
+}
+
+fn factorcount(n: u32) -> u32 {
+ if n==1 {
+ return 1;
+ }
+ let mut f=2;
+ let mut s=(n as f64).sqrt() as u32;
+ if s*s==n {
+ s-=1;
+ f+=1;
+ }
+ for pf in 2..=s {
+ if n % pf == 0 {
+ f+=2;
+ }
+ }
+ f
+}
+
+fn divisors(count: u32,n: u32) -> Vec<u32> {
+ let mut nn=n;
+ let mut a=vec![];
+ let mut t=0;
+ while nn>0 {
+ t+=1;
+ if factorcount(t)==count {
+ a.push(t);
+ nn-=1
+ }
+ }
+ a
+}
diff --git a/challenge-141/roger-bell-west/rust/ch-2.rs b/challenge-141/roger-bell-west/rust/ch-2.rs
new file mode 100755
index 0000000000..694f781072
--- /dev/null
+++ b/challenge-141/roger-bell-west/rust/ch-2.rs
@@ -0,0 +1,30 @@
+#! /bin/sh
+//usr/bin/env rustc --test $0 -o ${0}x && ./${0}x; rm -f ${0}x ; exit
+
+#[test]
+fn test_ex1() {
+ assert_eq!(likenumber(1234,2),9);
+}
+
+#[test]
+fn test_ex2() {
+ assert_eq!(likenumber(768,4),3);
+}
+
+fn likenumber(source: u32,factor: u32) -> u32 {
+ let s: Vec<u32>=source.to_string().chars().map(|i| i.to_digit(10).unwrap()).collect();
+ let m=s.len();
+ let mut n=0;
+ for mask in 1..((1<<m)-1) {
+ let mut c=0;
+ for di in 0..m {
+ if (mask & 1<<di) > 0 {
+ c=c*10+s[di];
+ }
+ }
+ if c % factor == 0 {
+ n+=1;
+ }
+ }
+ n
+}