diff options
| -rwxr-xr-x | challenge-133/roger-bell-west/perl/ch-1.pl | 24 | ||||
| -rwxr-xr-x | challenge-133/roger-bell-west/perl/ch-2.pl | 60 | ||||
| -rw-r--r-- | challenge-133/roger-bell-west/postscript/ch-1.ps | 22 | ||||
| -rw-r--r-- | challenge-133/roger-bell-west/postscript/ch-2.ps | 82 | ||||
| -rwxr-xr-x | challenge-133/roger-bell-west/python/ch-1.py | 29 | ||||
| -rwxr-xr-x | challenge-133/roger-bell-west/python/ch-2.py | 50 | ||||
| -rwxr-xr-x | challenge-133/roger-bell-west/raku/ch-1.p6 | 23 | ||||
| -rwxr-xr-x | challenge-133/roger-bell-west/raku/ch-2.p6 | 61 | ||||
| -rwxr-xr-x | challenge-133/roger-bell-west/ruby/ch-1.rb | 36 | ||||
| -rwxr-xr-x | challenge-133/roger-bell-west/ruby/ch-2.rb | 63 | ||||
| -rwxr-xr-x | challenge-133/roger-bell-west/rust/ch-1.rs | 35 | ||||
| -rwxr-xr-x | challenge-133/roger-bell-west/rust/ch-2.rs | 58 |
12 files changed, 543 insertions, 0 deletions
diff --git a/challenge-133/roger-bell-west/perl/ch-1.pl b/challenge-133/roger-bell-west/perl/ch-1.pl new file mode 100755 index 0000000000..fae7ff77e4 --- /dev/null +++ b/challenge-133/roger-bell-west/perl/ch-1.pl @@ -0,0 +1,24 @@ +#! /usr/bin/perl + +use strict; + +use Test::More tests => 4; + +is(isqrt(10),3,'example 1'); +is(isqrt(27),5,'example 1'); +is(isqrt(85),9,'example 1'); +is(isqrt(101),10,'example 1'); + +sub isqrt { + my $n=shift; + my $k=$n>>1; + my $x=1; + while ($x) { + my $k1=($k+$n/$k) >> 1; + if ($k1 >= $k) { + $x=0; + } + $k=$k1; + } + return $k; +} diff --git a/challenge-133/roger-bell-west/perl/ch-2.pl b/challenge-133/roger-bell-west/perl/ch-2.pl new file mode 100755 index 0000000000..9807971ee7 --- /dev/null +++ b/challenge-133/roger-bell-west/perl/ch-2.pl @@ -0,0 +1,60 @@ +#! /usr/bin/perl + +use strict; + +use Test::More tests => 1; + +is_deeply(smith(10),[4, 22, 27, 58, 85, 94, 121, 166, 202, 265,],'example 1'); + +use integer; + +sub smith { + my $count=shift; + my @o; + my $c=1; + while (1) { + $c++; + my @ff=factor($c); + if (scalar @ff == 1) { + next; + } + if (sumofdigits($c)==sumofdigits(@ff)) { + push @o,$c; + $count--; + if ($count <= 0) { + last; + } + } + } + return \@o; +} + +sub factor { + my $n=0+shift; + my @f; + my $ft=2; + while ($n > 1) { + if ($n % $ft == 0) { + push @f,$ft; + $n /= $ft; + } else { + $ft++; + if ($ft % 2 == 0) { + $ft++; + } + } + } + return @f; +} + +sub sumofdigits { + my $s=0; + foreach my $k (@_) { + my $l=$k+0; + while ($l > 0) { + $s+=$l % 10; + $l /= 10; + } + } + return $s; +} diff --git a/challenge-133/roger-bell-west/postscript/ch-1.ps b/challenge-133/roger-bell-west/postscript/ch-1.ps new file mode 100644 index 0000000000..0640c20350 --- /dev/null +++ b/challenge-133/roger-bell-west/postscript/ch-1.ps @@ -0,0 +1,22 @@ +% + +/isqrt { + /n exch def + /k n -1 bitshift def + /x false def + { + /k1 k n k idiv add -1 bitshift def + k1 k ge { + /x true def + } if + /k k1 def + x { exit } if + } loop + k +} def + +(test isqrt) = +10 isqrt 3 eq { (Pass) } { (Fail) } ifelse print ( ) print +27 isqrt 5 eq { (Pass) } { (Fail) } ifelse print ( ) print +85 isqrt 9 eq { (Pass) } { (Fail) } ifelse print ( ) print +101 isqrt 10 eq { (Pass) } { (Fail) } ifelse = diff --git a/challenge-133/roger-bell-west/postscript/ch-2.ps b/challenge-133/roger-bell-west/postscript/ch-2.ps new file mode 100644 index 0000000000..ac33b436b7 --- /dev/null +++ b/challenge-133/roger-bell-west/postscript/ch-2.ps @@ -0,0 +1,82 @@ +%!PS + +/sumofdigits { + /sum 0 def + { + { + dup 0 eq { pop exit } if + dup 10 mod sum add /sum exch def + 10 idiv + } loop + } forall + sum +} def + +(test sod) = +[ 2 ] sumofdigits +2 eq { (Pass) } { (Fail) } ifelse print ( ) print +[ 11 ] sumofdigits +2 eq { (Pass) } { (Fail) } ifelse print ( ) print +[ 66 ] sumofdigits +12 eq { (Pass) } { (Fail) } ifelse = + +/factor { + /ft 2 def + dup array /f exch def + /fi 0 def + { + dup ft mod 0 eq { + f fi ft put + /fi fi 1 add def + ft idiv + } { + /ft ft 1 add def + ft 2 mod 0 eq { + /ft ft 1 add def + } if + } ifelse + dup 1 le { pop exit } if + } loop + fi array /out exch def + 0 1 fi 1 sub { + /i exch def + out i f i get put + } for + out +} def + +(test factor) = +2 factor == +10 factor == +666 factor == + +/smith { + /count exch def + /c 1 def + { + /c c 1 add def + /ff c factor def + ff length 1 ne { + ff sumofdigits [ c ] sumofdigits eq { + c + /count count 1 sub def + count 0 le { + exit + } if + } if + } if + } loop +} def + +(test 1) = +10 smith +265 eq { (Pass) } { (Fail) } ifelse print ( ) print +202 eq { (Pass) } { (Fail) } ifelse print ( ) print +166 eq { (Pass) } { (Fail) } ifelse print ( ) print +121 eq { (Pass) } { (Fail) } ifelse print ( ) print +94 eq { (Pass) } { (Fail) } ifelse print ( ) print +85 eq { (Pass) } { (Fail) } ifelse print ( ) print +58 eq { (Pass) } { (Fail) } ifelse print ( ) print +27 eq { (Pass) } { (Fail) } ifelse print ( ) print +22 eq { (Pass) } { (Fail) } ifelse print ( ) print +4 eq { (Pass) } { (Fail) } ifelse = diff --git a/challenge-133/roger-bell-west/python/ch-1.py b/challenge-133/roger-bell-west/python/ch-1.py new file mode 100755 index 0000000000..64a90692de --- /dev/null +++ b/challenge-133/roger-bell-west/python/ch-1.py @@ -0,0 +1,29 @@ +#! /usr/bin/python3 + +import unittest + +def isqrt(n): + k=n >> 1 + x=True + while x: + k1=(k+int(n/k)) >> 1 + if k1 >= k: + x=0 + k=k1 + return k + +class TestIsqrt(unittest.TestCase): + + def test_ex1(self): + self.assertEqual(isqrt(10),3,'example 1') + + def test_ex2(self): + self.assertEqual(isqrt(27),5,'example 2') + + def test_ex3(self): + self.assertEqual(isqrt(85),9,'example 3') + + def test_ex4(self): + self.assertEqual(isqrt(101),10,'example 4') + +unittest.main() diff --git a/challenge-133/roger-bell-west/python/ch-2.py b/challenge-133/roger-bell-west/python/ch-2.py new file mode 100755 index 0000000000..85ffab558c --- /dev/null +++ b/challenge-133/roger-bell-west/python/ch-2.py @@ -0,0 +1,50 @@ +#! /usr/bin/python3 + +import unittest + +def sumofdigits(kk): + s=int(0) + for k in kk: + l=int(k) + while (l>0): + s+=l % 10 + l = int(l/10) + return s + +def factor(nn): + f=[] + ft=2 + n=nn + while n>1: + dm=divmod(n,ft) + if dm[1] == 0: + f.append(ft) + n = dm[0] + else: + ft += 1 + if ft % 2 == 0: + ft += 1 + return f + +def smith(ccount): + lcount=ccount + o=[] + c=1 + while (1): + c += 1 + ff=factor(c) + if len(ff)==1: + continue + if sumofdigits([c])==sumofdigits(ff): + o.append(c) + lcount -= 1 + if lcount<=0: + break + return o + +class TestSmith(unittest.TestCase): + + def test_ex1(self): + self.assertEqual(smith(10),[4, 22, 27, 58, 85, 94, 121, 166, 202, 265],'example 1') + +unittest.main() diff --git a/challenge-133/roger-bell-west/raku/ch-1.p6 b/challenge-133/roger-bell-west/raku/ch-1.p6 new file mode 100755 index 0000000000..dc2674ba08 --- /dev/null +++ b/challenge-133/roger-bell-west/raku/ch-1.p6 @@ -0,0 +1,23 @@ +#! /usr/bin/perl6 + +use Test; + +plan 4; + +is(isqrt(10),3,'example 1'); +is(isqrt(27),5,'example 1'); +is(isqrt(85),9,'example 1'); +is(isqrt(101),10,'example 1'); + +sub isqrt($n) { + my $k=$n +> 1; + my $x=1; + while ($x) { + my $k1=($k+$n/$k) +> 1; + if ($k1 >= $k) { + $x=0; + } + $k=$k1; + } + return $k; +} diff --git a/challenge-133/roger-bell-west/raku/ch-2.p6 b/challenge-133/roger-bell-west/raku/ch-2.p6 new file mode 100755 index 0000000000..08728f03db --- /dev/null +++ b/challenge-133/roger-bell-west/raku/ch-2.p6 @@ -0,0 +1,61 @@ +#! /usr/bin/perl6 + +use Test; + +plan 1; + +is-deeply(smith(10), + [4, 22, 27, 58, 85, 94, 121, 166, 202, 265,], + 'example 1' + ); + +sub smith($ccount) { + my $count=$ccount; + my @o; + my $c=1; + while (1) { + $c++; + my @ff=factor($c); + if (@ff.elems == 1) { + next; + } + if (sumofdigits(($c,))==sumofdigits(@ff)) { + push @o,$c; + $count--; + if ($count <= 0) { + last; + } + } + } + return @o; +} + +sub factor($nn) { + my $n=$nn; + my @f; + my $ft=2; + while ($n > 1) { + if ($n % $ft == 0) { + push @f,$ft; + $n /= $ft; + } else { + $ft++; + if ($ft % 2 == 0) { + $ft++; + } + } + } + return @f; +} + +sub sumofdigits(@l) { + my $s=0; + for @l -> $k { + my $l=$k+0; + while ($l > 0) { + $s+=$l % 10; + $l=floor($l/10); + } + } + return $s; +} diff --git a/challenge-133/roger-bell-west/ruby/ch-1.rb b/challenge-133/roger-bell-west/ruby/ch-1.rb new file mode 100755 index 0000000000..3c780d5c5c --- /dev/null +++ b/challenge-133/roger-bell-west/ruby/ch-1.rb @@ -0,0 +1,36 @@ +#! /usr/bin/ruby + +def isqrt(n) + k = n >> 1 + x = true + while x do + k1=(k+(n/k).to_int) >> 1 + if k1 >= k then + x=false + end + k=k1 + end + return k +end + +require 'test/unit' + +class TestIsqrt < Test::Unit::TestCase + + def test_ex1 + assert_equal(3,isqrt(10)) + end + + def test_ex2 + assert_equal(5,isqrt(27)) + end + + def test_ex3 + assert_equal(9,isqrt(85)) + end + + def test_ex4 + assert_equal(10,isqrt(101)) + end + +end diff --git a/challenge-133/roger-bell-west/ruby/ch-2.rb b/challenge-133/roger-bell-west/ruby/ch-2.rb new file mode 100755 index 0000000000..271ffad94b --- /dev/null +++ b/challenge-133/roger-bell-west/ruby/ch-2.rb @@ -0,0 +1,63 @@ +#! /usr/bin/ruby + +def sumofdigits(kk) + s=0 + kk.each do |k| + l=k + while l>0 do + s+=l % 10 + l=(l/10).to_int + end + end + return s +end + +def factor(nn) + n=nn + f=[] + ft=2 + while n>1 do + dm=n.divmod(ft) + if dm[1] == 0 then + f.push(ft) + n = dm[0] + else + ft += 1 + if ft % 2 == 0 then + ft += 1 + end + end + end + return f +end + +def smith(ccount) + count=ccount + o=[] + c=1 + while 1 do + c += 1 + ff=factor(c) + if ff.length==1 then + next + end + if sumofdigits([c]) == sumofdigits(ff) then + o.push(c) + count -= 1 + if count <= 0 then + break + end + end + end + return o +end + +require 'test/unit' + +class TestSmith < Test::Unit::TestCase + + def test_ex1 + assert_equal([4, 22, 27, 58, 85, 94, 121, 166, 202, 265],smith(10)) + end + +end diff --git a/challenge-133/roger-bell-west/rust/ch-1.rs b/challenge-133/roger-bell-west/rust/ch-1.rs new file mode 100755 index 0000000000..b3ba6a9e6b --- /dev/null +++ b/challenge-133/roger-bell-west/rust/ch-1.rs @@ -0,0 +1,35 @@ +#! /bin/sh +//usr/bin/env rustc --test $0 -o ${0}x && ./${0}x; rm -f ${0}x ; exit + +#[test] +fn test_ex1() { + assert_eq!(isqrt(10),3); +} + +#[test] +fn test_ex2() { + assert_eq!(isqrt(27),5); +} + +#[test] +fn test_ex3() { + assert_eq!(isqrt(85),9); +} + +#[test] +fn test_ex4() { + assert_eq!(isqrt(101),10); +} + +fn isqrt(n: u32) -> u32 { + let mut k=n >> 1; + let mut x=true; + while x { + let k1=(k+n/k) >> 1; + if k1 >= k { + x=false; + } + k=k1; + } + k +} diff --git a/challenge-133/roger-bell-west/rust/ch-2.rs b/challenge-133/roger-bell-west/rust/ch-2.rs new file mode 100755 index 0000000000..fa65654aa7 --- /dev/null +++ b/challenge-133/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!(smith(10),vec![4, 22, 27, 58, 85, 94, 121, 166, 202, 265]); +} + +fn smith(ccount: u32) -> Vec<u32> { + let mut count=ccount; + let mut o=vec![]; + let mut c=1; + loop { + c+= 1; + let ff=factor(c); + if ff.len()==1 { + continue; + } + if sumofdigits(vec![c]) == sumofdigits(ff) { + o.push(c); + count-= 1; + if count<=0 { + break; + } + } + } + o +} + +fn factor (nn: u32) -> Vec<u32> { + let mut n=nn; + let mut f=vec![]; + let mut ft=2; + while n>1 { + if n % ft == 0 { + f.push(ft); + n /= ft; + } else { + ft+= 1; + if ft%2 == 0 { + ft+= 1; + } + } + } + f +} + +fn sumofdigits(kk: Vec<u32>) -> u32 { + let mut s=0; + for k in kk { + let mut l=k; + while l>0 { + s+=l % 10; + l /= 10; + } + } + s +} |
