diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-07-13 18:36:43 +0100 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-07-13 18:36:43 +0100 |
| commit | 1b635a0c9d17219c032de79ab03f7eeae6cd5d3c (patch) | |
| tree | 6c6bcf7fb1ad46ee8243f49b84a17f31f8b44042 /challenge-069 | |
| parent | 7bc24e44ee52b7deb0798387ff9260ca4c50214f (diff) | |
| download | perlweeklychallenge-club-1b635a0c9d17219c032de79ab03f7eeae6cd5d3c.tar.gz perlweeklychallenge-club-1b635a0c9d17219c032de79ab03f7eeae6cd5d3c.tar.bz2 perlweeklychallenge-club-1b635a0c9d17219c032de79ab03f7eeae6cd5d3c.zip | |
- Added solutions by Roger Bell_West.
Diffstat (limited to 'challenge-069')
| -rwxr-xr-x | challenge-069/roger-bell-west/perl/ch-2.pl | 47 | ||||
| -rwxr-xr-x | challenge-069/roger-bell-west/raku/ch-2.p6 | 41 |
2 files changed, 88 insertions, 0 deletions
diff --git a/challenge-069/roger-bell-west/perl/ch-2.pl b/challenge-069/roger-bell-west/perl/ch-2.pl new file mode 100755 index 0000000000..a254375183 --- /dev/null +++ b/challenge-069/roger-bell-west/perl/ch-2.pl @@ -0,0 +1,47 @@ +#! /usr/bin/perl + +use strict; +use warnings; + +use List::Util qw(min); + +my $s=30; +my $l=2**$s-1; + +my $pos=1; +my $seq=4; +while (1) { + my $p1=$seq-1; + my $n0=min($p1-$pos,$l-$pos); + print '0' x $n0; + $pos+=$n0; + if ($p1<=$l) { + print '1'; + $pos++; + } + if ($pos>$l) { + last; + } + $seq=nextseq($seq); +} +print "\n"; + +sub nextseq { + my $prev=shift; + my $c=$prev; + while (1) { + $c++; + my $t=$c-1; + while (1) { + my $r=int($t/2); + if ($t % 2 != 0) { + last; + } + $t=$r; + } + if ($t % 4 == 3) { + last; + } + } + return $c; +} diff --git a/challenge-069/roger-bell-west/raku/ch-2.p6 b/challenge-069/roger-bell-west/raku/ch-2.p6 new file mode 100755 index 0000000000..65a1befc84 --- /dev/null +++ b/challenge-069/roger-bell-west/raku/ch-2.p6 @@ -0,0 +1,41 @@ +#! /usr/bin/perl6 + +my $s=30; +my $l=2**$s-1; + +my $pos=1; +my $seq=4; +while (1) { + my $p1=$seq-1; + my $n0=min($p1-$pos,$l-$pos); + print '0' x $n0; + $pos+=$n0; + if ($p1 <= $l) { + print '1'; + $pos++; + } + if ($pos > $l) { + last; + } + $seq=nextseq($seq); +} +print "\n"; + +sub nextseq ($prev) { + my $c=$prev; + while (1) { + $c++; + my $t=$c-1; + while (1) { + my $r=truncate($t/2); + if ($t % 2 != 0) { + last; + } + $t=$r; + } + if ($t % 4 == 3) { + last; + } + } + return $c; +} |
