From 38242d1235ccfeb3dd07e6250266f96769b312a0 Mon Sep 17 00:00:00 2001 From: Roger Bell_West Date: Mon, 7 Jun 2021 13:17:46 +0100 Subject: Solutions for challenge #116 --- challenge-116/roger-bell-west/perl/ch-1.pl | 38 ++++++++++++++++++++ challenge-116/roger-bell-west/perl/ch-2.pl | 23 ++++++++++++ challenge-116/roger-bell-west/python/ch-1.py | 42 ++++++++++++++++++++++ challenge-116/roger-bell-west/python/ch-2.py | 28 +++++++++++++++ challenge-116/roger-bell-west/raku/ch-1.p6 | 36 +++++++++++++++++++ challenge-116/roger-bell-west/raku/ch-2.p6 | 21 +++++++++++ challenge-116/roger-bell-west/ruby/ch-1.rb | 51 ++++++++++++++++++++++++++ challenge-116/roger-bell-west/ruby/ch-2.rb | 34 ++++++++++++++++++ challenge-116/roger-bell-west/rust/ch-1.rs | 53 ++++++++++++++++++++++++++++ challenge-116/roger-bell-west/rust/ch-2.rs | 31 ++++++++++++++++ 10 files changed, 357 insertions(+) create mode 100755 challenge-116/roger-bell-west/perl/ch-1.pl create mode 100755 challenge-116/roger-bell-west/perl/ch-2.pl create mode 100755 challenge-116/roger-bell-west/python/ch-1.py create mode 100755 challenge-116/roger-bell-west/python/ch-2.py create mode 100755 challenge-116/roger-bell-west/raku/ch-1.p6 create mode 100755 challenge-116/roger-bell-west/raku/ch-2.p6 create mode 100755 challenge-116/roger-bell-west/ruby/ch-1.rb create mode 100755 challenge-116/roger-bell-west/ruby/ch-2.rb create mode 100755 challenge-116/roger-bell-west/rust/ch-1.rs create mode 100755 challenge-116/roger-bell-west/rust/ch-2.rs diff --git a/challenge-116/roger-bell-west/perl/ch-1.pl b/challenge-116/roger-bell-west/perl/ch-1.pl new file mode 100755 index 0000000000..6981900498 --- /dev/null +++ b/challenge-116/roger-bell-west/perl/ch-1.pl @@ -0,0 +1,38 @@ +#! /usr/bin/perl + +use strict; +use warnings; + +use Test::More tests => 5; + +is_deeply(ns(1234),[1,2,3,4],'example 1'); +is_deeply(ns(91011),[9,10,11],'example 2'); +is_deeply(ns(10203),[10203],'example 3'); +is_deeply(ns(910911),[910,911],'example 4'); +is_deeply(ns(9109119),[9109119],'example 5'); + +sub ns { + my $n=shift; + my $l=length($n); + foreach my $sl (1..int($l/2)) { + my $i=$sl; + my @e=(substr($n,0,$sl)); + while (1) { + if ($l-$i == 0) { + last; + } + push @e,$e[-1]+1; + my $el=length($e[-1]); + if ($l-$i < $el || + substr($n,$i,$el) ne $e[-1]) { + @e=(); + last; + } + $i+=$el; + } + if (@e) { + return \@e; + } + } + return [$n]; +} diff --git a/challenge-116/roger-bell-west/perl/ch-2.pl b/challenge-116/roger-bell-west/perl/ch-2.pl new file mode 100755 index 0000000000..f7a983e4a6 --- /dev/null +++ b/challenge-116/roger-bell-west/perl/ch-2.pl @@ -0,0 +1,23 @@ +#! /usr/bin/perl + +use strict; +use warnings; + +use Test::More tests => 3; + +is(sos(34),1,'example 1'); +is(sos(50),1,'example 2'); +is(sos(52),0,'example 3'); + +sub sos { + my $n=shift; + my $t=0; + foreach (split '',$n) { + $t+=$_*$_; + } + my $s=int(sqrt($t)); + if ($s*$s==$t) { + return 1; + } + return 0; +} diff --git a/challenge-116/roger-bell-west/python/ch-1.py b/challenge-116/roger-bell-west/python/ch-1.py new file mode 100755 index 0000000000..5ae072ca37 --- /dev/null +++ b/challenge-116/roger-bell-west/python/ch-1.py @@ -0,0 +1,42 @@ +#! /usr/bin/python3 + +import unittest + +def ns(n): + ns=str(n) + l=len(ns) + for sl in range(1,int(l/2)+1): + i=sl + e=[int(ns[0:sl])] + while 1: + if l-i==0: + break + e.append(e[-1]+1) + es=str(e[-1]) + el=len(es) + if l-i < el or ns[i:i+el] != es: + e=[] + break + i+=el + if len(e)>0: + return e + return [n] + +class TestNs(unittest.TestCase): + + def test_ex1(self): + self.assertEqual(ns(1234),[1,2,3,4],'example 1') + + def test_ex2(self): + self.assertEqual(ns(91011),[9,10,11],'example 2') + + def test_ex3(self): + self.assertEqual(ns(10203),[10203],'example 3') + + def test_ex4(self): + self.assertEqual(ns(910911),[910,911],'example 4') + + def test_ex5(self): + self.assertEqual(ns(9109119),[9109119],'example 4') + +unittest.main() diff --git a/challenge-116/roger-bell-west/python/ch-2.py b/challenge-116/roger-bell-west/python/ch-2.py new file mode 100755 index 0000000000..cbe1ae5d13 --- /dev/null +++ b/challenge-116/roger-bell-west/python/ch-2.py @@ -0,0 +1,28 @@ +#! /usr/bin/python3 + +import unittest + +from math import sqrt + +def sos(n): + t=0 + for i in str(n): + ii=int(i) + t+=ii*ii + s=int(sqrt(t)) + if s*s == t: + return 1 + return 0 + +class TestSos(unittest.TestCase): + + def test_ex1(self): + self.assertEqual(sos(34),1,"example 1") + + def test_ex2(self): + self.assertEqual(sos(50),1,"example 2") + + def test_ex3(self): + self.assertEqual(sos(52),0,"example 3") + +unittest.main() diff --git a/challenge-116/roger-bell-west/raku/ch-1.p6 b/challenge-116/roger-bell-west/raku/ch-1.p6 new file mode 100755 index 0000000000..19f4802722 --- /dev/null +++ b/challenge-116/roger-bell-west/raku/ch-1.p6 @@ -0,0 +1,36 @@ +#! /usr/bin/perl6 + +use Test; + +plan 5; + +is-deeply(ns(1234),[1,2,3,4],'example 1'); +is-deeply(ns(91011),[9,10,11],'example 2'); +is-deeply(ns(10203),[10203],'example 3'); +is-deeply(ns(910911),[910,911],'example 4'); +is-deeply(ns(9109119),[9109119],'example 5'); + +sub ns($n) { + my $l=chars($n); + for 1..floor($l/2) -> $sl { + my $i=$sl; + my @e=(substr($n,0,$sl))+0; + while (1) { + if ($l-$i == 0) { + last; + } + push @e,@e[*-1]+1; + my $el=chars(@e[*-1]); + if ($l-$i < $el || + substr($n,$i,$el) ne @e[*-1]) { + @e=(); + last; + } + $i+=$el; + } + if (@e) { + return @e; + } + } + return [$n]; +} diff --git a/challenge-116/roger-bell-west/raku/ch-2.p6 b/challenge-116/roger-bell-west/raku/ch-2.p6 new file mode 100755 index 0000000000..5b727aa3b6 --- /dev/null +++ b/challenge-116/roger-bell-west/raku/ch-2.p6 @@ -0,0 +1,21 @@ +#! /usr/bin/perl6 + +use Test; + +plan 3; + +is(sos(34),1,'example 1'); +is(sos(50),1,'example 2'); +is(sos(52),0,'example 3'); + +sub sos($n) { + my $t=0; + for $n.comb() { + $t+=$_*$_; + } + my $s=floor(sqrt($t)); + if ($s*$s==$t) { + return 1; + } + return 0; +} diff --git a/challenge-116/roger-bell-west/ruby/ch-1.rb b/challenge-116/roger-bell-west/ruby/ch-1.rb new file mode 100755 index 0000000000..f5aced94f4 --- /dev/null +++ b/challenge-116/roger-bell-west/ruby/ch-1.rb @@ -0,0 +1,51 @@ +#! /usr/bin/ruby +# coding: utf-8 + +require 'test/unit' + +def ns(n) + ns=n.to_s + l=ns.length + 1.upto((l/2).to_i) {|sl| + i=sl + e=[ns[0..sl-1].to_i] + while 1 + if l-i==0 then + break + end + e.push(e[-1]+1); + es=e[-1].to_s; + el=es.length + if l-i < el || + ns[i..i+el-1] != es then + e=[] + break + end + i+=el + end + if e.length>0 then + return e + end + } + return [n] +end + +class TestNs < Test::Unit::TestCase + + def test_ex1 + assert_equal([1,2,3,4],ns(1234)) + end + def test_ex2 + assert_equal([9,10,11],ns(91011)) + end + def test_ex3 + assert_equal([10203],ns(10203)) + end + def test_ex4 + assert_equal([910,911],ns(910911)) + end + def test_ex5 + assert_equal([9109119],ns(9109119)) + end + +end diff --git a/challenge-116/roger-bell-west/ruby/ch-2.rb b/challenge-116/roger-bell-west/ruby/ch-2.rb new file mode 100755 index 0000000000..09bff45948 --- /dev/null +++ b/challenge-116/roger-bell-west/ruby/ch-2.rb @@ -0,0 +1,34 @@ +#! /usr/bin/ruby +# coding: utf-8 + +require 'test/unit' + +def sos(n) + t=0 + n.to_s.chars {|i| + ii=i.to_i + t+=ii*ii + } + s=Integer.sqrt(t) + if s*s==t then + return 1 + end + return 0 +end + + +class TestSos < Test::Unit::TestCase + + def test_ex1 + assert_equal(1,sos(34)) + end + + def test_ex2 + assert_equal(1,sos(50)) + end + + def test_ex3 + assert_equal(0,sos(52)) + end + +end diff --git a/challenge-116/roger-bell-west/rust/ch-1.rs b/challenge-116/roger-bell-west/rust/ch-1.rs new file mode 100755 index 0000000000..15f474eada --- /dev/null +++ b/challenge-116/roger-bell-west/rust/ch-1.rs @@ -0,0 +1,53 @@ +#! /bin/sh +//usr/bin/env rustc --test $0 -o ${0}x && ./${0}x; rm -f ${0}x ; exit + +#[test] +fn test_ex1() { + assert_eq!(ns(1234),vec![1,2,3,4]); +} + +#[test] +fn test_ex2() { + assert_eq!(ns(91011),vec![9,10,11]); +} + +#[test] +fn test_ex3() { + assert_eq!(ns(10203),vec![10203]); +} + +#[test] +fn test_ex4() { + assert_eq!(ns(910911),vec![910,911]); +} + +#[test] +fn test_ex5() { + assert_eq!(ns(9109119),vec![9109119]); +} + +fn ns (n: u32) -> Vec { + let ns=n.to_string(); + let l=ns.len(); + for sl in 1..l/2+1 { + let mut i=sl; + let mut e=vec![ns[0..sl].parse::().unwrap()]; + loop { + if l==i { + break; + } + e.push(e.last().unwrap()+1); + let es=e.last().unwrap().to_string(); + let el=es.len(); + if l-i < el || ns[i..i+el] != es { + e=vec![]; + break; + } + i+=el + } + if e.len()>0 { + return e + } + } + return vec![n]; +} diff --git a/challenge-116/roger-bell-west/rust/ch-2.rs b/challenge-116/roger-bell-west/rust/ch-2.rs new file mode 100755 index 0000000000..0d26a9a810 --- /dev/null +++ b/challenge-116/roger-bell-west/rust/ch-2.rs @@ -0,0 +1,31 @@ +#! /bin/sh +//usr/bin/env rustc --test $0 -o ${0}x && ./${0}x; rm -f ${0}x ; exit + +#[test] +fn test_ex1() { + assert_eq!(sos(34),1); +} + +#[test] +fn test_ex2() { + assert_eq!(sos(50),1); +} + +#[test] +fn test_ex3() { + assert_eq!(sos(52),0); +} + +fn sos (n: u32) -> u8 { + let mut t=0; + for i in n.to_string().chars() { + let ii=i.to_digit(10).unwrap(); + t+=ii*ii; + } + let s=(t as f64).sqrt() as u32; + if s*s == t { + return 1; + } else { + return 0; + } +} -- cgit