diff options
| author | wanderdoc <wanderdoc@googlemail.com> | 2021-03-21 14:58:18 +0100 |
|---|---|---|
| committer | wanderdoc <wanderdoc@googlemail.com> | 2021-03-21 14:58:18 +0100 |
| commit | 2dd9caae82e00ccbdca9d4b01b26a3ff97854d53 (patch) | |
| tree | 2db62ea0ea5fff7f1a680756de6b2ea9b0afc13d | |
| parent | e9ea0d8d7f3b84d7a6c204e8fa79f91cd1df7627 (diff) | |
| download | perlweeklychallenge-club-2dd9caae82e00ccbdca9d4b01b26a3ff97854d53.tar.gz perlweeklychallenge-club-2dd9caae82e00ccbdca9d4b01b26a3ff97854d53.tar.bz2 perlweeklychallenge-club-2dd9caae82e00ccbdca9d4b01b26a3ff97854d53.zip | |
Solution to task 1 challenge-104
| -rw-r--r-- | challenge-104/wanderdoc/perl/ch-1.pl | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/challenge-104/wanderdoc/perl/ch-1.pl b/challenge-104/wanderdoc/perl/ch-1.pl new file mode 100644 index 0000000000..bacb9e6dac --- /dev/null +++ b/challenge-104/wanderdoc/perl/ch-1.pl @@ -0,0 +1,36 @@ +#1perl +use strict; +use warnings FATAL => qw(all); + +=prompt +Write a script to generate first 50 members of FUSC Sequence. The sequence defined as below: +fusc(0) = 0 fusc(1) = 1 +for n > 1: +when n is even: fusc(n) = fusc(n / 2), +when n is odd: fusc(n) = fusc((n-1)/2) + fusc((n+1)/2) +=cut + + + + + +sub generate_fusc +{ + my $max = $_[0]; + my @arr; + my $i = - 1; + + return sub + { + $i++; + + if ( $i < 2 ) { $arr[$i] = $i; } + elsif ( $i % 2 ) { $arr[$i] = $arr[($i-1)/2] + $arr[($i+1)/2]; } + else { $arr[$i] = $arr[$i / 2]; } + return undef if $i > $max; + return [$i, $arr[$i]]; + } +} + +my $next = generate_fusc(50); +while ( my $item = $next->() ) { print join(": ", @$item), $/; }
\ No newline at end of file |
