diff options
| -rwxr-xr-x | challenge-141/roger-bell-west/perl/ch-1.pl | 42 | ||||
| -rwxr-xr-x | challenge-141/roger-bell-west/perl/ch-2.pl | 28 | ||||
| -rw-r--r-- | challenge-141/roger-bell-west/postscript/ch-1.ps | 66 | ||||
| -rw-r--r-- | challenge-141/roger-bell-west/postscript/ch-2.ps | 35 | ||||
| -rwxr-xr-x | challenge-141/roger-bell-west/python/ch-1.py | 36 | ||||
| -rwxr-xr-x | challenge-141/roger-bell-west/python/ch-2.py | 26 | ||||
| -rwxr-xr-x | challenge-141/roger-bell-west/raku/ch-1.p6 | 39 | ||||
| -rwxr-xr-x | challenge-141/roger-bell-west/raku/ch-2.p6 | 26 | ||||
| -rwxr-xr-x | challenge-141/roger-bell-west/ruby/ch-1.rb | 43 | ||||
| -rwxr-xr-x | challenge-141/roger-bell-west/ruby/ch-2.rb | 33 | ||||
| -rwxr-xr-x | challenge-141/roger-bell-west/rust/ch-1.rs | 39 | ||||
| -rwxr-xr-x | challenge-141/roger-bell-west/rust/ch-2.rs | 30 |
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 +} |
