diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2021-06-08 10:48:57 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-06-08 10:48:57 +0100 |
| commit | e254e8a0d160ce938bd9af471dce05d2fdcc49aa (patch) | |
| tree | af2220a2bdd77b21bef3077fa767475072d78ee0 /challenge-116 | |
| parent | 6c5da9f86d3e871257533368cea3f2a98a895a6b (diff) | |
| parent | 27620f26cd32fe8e55bed679bbbb594c40e55094 (diff) | |
| download | perlweeklychallenge-club-e254e8a0d160ce938bd9af471dce05d2fdcc49aa.tar.gz perlweeklychallenge-club-e254e8a0d160ce938bd9af471dce05d2fdcc49aa.tar.bz2 perlweeklychallenge-club-e254e8a0d160ce938bd9af471dce05d2fdcc49aa.zip | |
Merge pull request #4228 from PerlBoy1967/branch-for-challenge-116
Task 1 & 2
Diffstat (limited to 'challenge-116')
| -rwxr-xr-x | challenge-116/perlboy1967/perl/ch-1.pl | 49 | ||||
| -rwxr-xr-x | challenge-116/perlboy1967/perl/ch-2.pl | 63 |
2 files changed, 112 insertions, 0 deletions
diff --git a/challenge-116/perlboy1967/perl/ch-1.pl b/challenge-116/perlboy1967/perl/ch-1.pl new file mode 100755 index 0000000000..2dc60805c7 --- /dev/null +++ b/challenge-116/perlboy1967/perl/ch-1.pl @@ -0,0 +1,49 @@ +#!/usr/bin/perl + +# Perl Weekly Challenge - 116 +# - https://perlweeklychallenge.org/blog/perl-weekly-challenge-116/#TASK1 +# +# Task 1 - Number Sequence +# +# Author: Niels 'PerlBoy' van Dijke + +use v5.16; +use strict; +use warnings; + +use POSIX qw(ceil); + +use Test::More; + +my %tests = ( + '1234' => 1, + '91011' => 1, + '102030' => 0, + '102103104' => 1, + '123456123458' => 0, + '8910111213141589101112131416' => 1, +); + +foreach my $test (sort keys %tests) { + printf "$test\n" unless is(isNumberSequence($test),$tests{$test}); +} + +done_testing(); + +sub isNumberSequence { + my ($n) = @_; + + my $len = 1; + + do { + my ($startNumber,$l) = (substr($n,0,$len),$len); + my ($next,$s) = ($startNumber+1); + while ($s = substr($n,$l) and $s =~ m#^$next#) { + return 1 if ($' eq ''); + $l += length($next++); + } + $len++; + } while ($len <= ceil(length($n)/2)); + + return 0; +} diff --git a/challenge-116/perlboy1967/perl/ch-2.pl b/challenge-116/perlboy1967/perl/ch-2.pl new file mode 100755 index 0000000000..5114e7f93c --- /dev/null +++ b/challenge-116/perlboy1967/perl/ch-2.pl @@ -0,0 +1,63 @@ +#!/usr/bin/perl + +# Perl Weekly Challenge - 116 +# - https://perlweeklychallenge.org/blog/perl-weekly-challenge-116/#TASK2 +# +# Task 2 - Sum of Squares +# +# Author: Niels 'PerlBoy' van Dijke + +use v5.16; +use strict; +use warnings; + +use List::Util qw(sum); + +use Test::More; + +# Prototype(s) +sub isSumOfSquares($); + +my %tests = ( + 34 => 1, + 50 => 1, + 52 => 0, + 2021 => 1, + 1234563 => 1, +); + +my %iSqr = (0,0); + +foreach my $test (sort keys %tests) { + is(isSumOfSquares($test),$tests{$test}); +} + +done_testing; + + +sub isSumOfSquares($) { + my ($n) = @_; + + return isIntSqr(sum(map{$_**2}split(//,$n))); +} + + +sub isIntSqr ($) { + my ($i) = @_; + + state $maxSqr //= $iSqr{0}; + + return 1 if (defined $iSqr{$i}); + return 0 if ($maxSqr > $i); + + my ($m,$sqr) = ($iSqr{$maxSqr}); + do { + $sqr = ++$m**2; + $iSqr{$sqr} = $m; + } while ($iSqr{$sqr} <= $i); + + $maxSqr = $sqr; + + return 1 if (defined $iSqr{$i}); + return 0; +} |
