diff options
| author | 冯昶 <fengchang@novel-supertv.com> | 2019-08-10 15:16:10 +0800 |
|---|---|---|
| committer | 冯昶 <fengchang@novel-supertv.com> | 2019-08-10 15:16:10 +0800 |
| commit | e4495f7320fff9c79889afa1818d591bad5e410d (patch) | |
| tree | c459433700dddff78199750c65a976f2bfa798bc /challenge-020 | |
| parent | cdeda343bd6f44b567fc100cece604b721e7f4ea (diff) | |
| download | perlweeklychallenge-club-e4495f7320fff9c79889afa1818d591bad5e410d.tar.gz perlweeklychallenge-club-e4495f7320fff9c79889afa1818d591bad5e410d.tar.bz2 perlweeklychallenge-club-e4495f7320fff9c79889afa1818d591bad5e410d.zip | |
#020 solutions
Diffstat (limited to 'challenge-020')
| -rwxr-xr-x | challenge-020/feng-chang/perl5/ch-1.pl | 35 | ||||
| -rwxr-xr-x | challenge-020/feng-chang/perl5/ch-2.pl | 47 | ||||
| -rwxr-xr-x | challenge-020/feng-chang/perl6/ch-1.p6 | 3 | ||||
| -rwxr-xr-x | challenge-020/feng-chang/perl6/ch-2.p6 | 11 |
4 files changed, 96 insertions, 0 deletions
diff --git a/challenge-020/feng-chang/perl5/ch-1.pl b/challenge-020/feng-chang/perl5/ch-1.pl new file mode 100755 index 0000000000..b34ce16cdb --- /dev/null +++ b/challenge-020/feng-chang/perl5/ch-1.pl @@ -0,0 +1,35 @@ +#!/bin/env perl + +use Modern::Perl; + +die "usage: $0 <string>\n" unless $ARGV[0]; + +say 'Solution 1:'; +{ + my @a; + my $last_char = ''; + my $s = ''; + for my $c (split //, $ARGV[0]) { + if ($c eq $last_char) { + $s .= $c; + } else { + push(@a, $s) if $s; + $s = $last_char = $c; + } + } + push(@a, $s) if $s; + + say join ' ', @a; +} + +say 'Solution 2:'; +{ + my @a; + my $i = 1; + for my $s ($ARGV[0] =~ m/((.)\2*)/g) { + push(@a, $s) if $i; + $i = 1 - $i; + } + + say join ' ', @a; +} diff --git a/challenge-020/feng-chang/perl5/ch-2.pl b/challenge-020/feng-chang/perl5/ch-2.pl new file mode 100755 index 0000000000..5d68276e7c --- /dev/null +++ b/challenge-020/feng-chang/perl5/ch-2.pl @@ -0,0 +1,47 @@ +#!/bin/env perl + +use Modern::Perl; +use integer; + +my $i = 0; +my %sods; +my $cnt = 0; + +while (1) { + $sods{ $i } = sod($i) unless defined $sods{ $i }; + my $v = $sods{ $i }; + + if ($v > $i) { + $sods{ $v } = sod($v) unless defined $sods{ $v }; + if ($i == $sods{ $v }) { + say "$i $v"; + last if ++$cnt == 5; + } + } + + ++$i; +} + +# sum of proper divisors +sub sod { + my $n = shift; + + my $sum = 0; + my @a = (1) x ($n/2 + 1); + + for (my $i = 1; $i < $n/2 + 1; ++$i) { + next unless $a[$i]; + + if ($n % $i) { + my $j = $i; + while ($j <= $n/2 + 1) { + $a[$j] = 0; + $j += $i; + } + } else { + $sum += $i; + } + } + + return $sum; +} diff --git a/challenge-020/feng-chang/perl6/ch-1.p6 b/challenge-020/feng-chang/perl6/ch-1.p6 new file mode 100755 index 0000000000..5e737a5950 --- /dev/null +++ b/challenge-020/feng-chang/perl6/ch-1.p6 @@ -0,0 +1,3 @@ +#!/bin/env perl6 + +sub MAIN($str = 'ABBCDEEF') { $str.comb(/(.)$0*/).say } diff --git a/challenge-020/feng-chang/perl6/ch-2.p6 b/challenge-020/feng-chang/perl6/ch-2.p6 new file mode 100755 index 0000000000..a7fd1d71cb --- /dev/null +++ b/challenge-020/feng-chang/perl6/ch-2.p6 @@ -0,0 +1,11 @@ +#!/bin/env perl6 + +my @a = (0..∞).map: { sod($_) }; +my @b = (0..∞).grep: { @a[$_] > $_ and @a[@a[$_]] == $_ }; + +say(@b[0], ' ', @a[@b[0]]); + +# sum of proper divisors +sub sod(UInt $n) { + [+] (1 .. $n/2).grep: { $n %% $_ } +} |
