diff options
| author | E7-87-83 <fungcheokyin@gmail.com> | 2022-03-10 10:09:55 +0800 |
|---|---|---|
| committer | E7-87-83 <fungcheokyin@gmail.com> | 2022-03-10 10:09:55 +0800 |
| commit | b9a0b36cdc72e2b6e43f24b6ed2c7ed193ebd3a0 (patch) | |
| tree | 5c2c6ac3707f4e563de47897038c1ff2d7a5c08c /challenge-155 | |
| parent | 14e1dfc26558a275721d6cd79743944d81e8637f (diff) | |
| download | perlweeklychallenge-club-b9a0b36cdc72e2b6e43f24b6ed2c7ed193ebd3a0.tar.gz perlweeklychallenge-club-b9a0b36cdc72e2b6e43f24b6ed2c7ed193ebd3a0.tar.bz2 perlweeklychallenge-club-b9a0b36cdc72e2b6e43f24b6ed2c7ed193ebd3a0.zip | |
better expression for
Diffstat (limited to 'challenge-155')
| -rw-r--r-- | challenge-155/cheok-yin-fung/perl/ch-2.pl | 10 | ||||
| -rw-r--r-- | challenge-155/cheok-yin-fung/perl/temp.pl | 20 |
2 files changed, 24 insertions, 6 deletions
diff --git a/challenge-155/cheok-yin-fung/perl/ch-2.pl b/challenge-155/cheok-yin-fung/perl/ch-2.pl index d8f2549716..02e63559ad 100644 --- a/challenge-155/cheok-yin-fung/perl/ch-2.pl +++ b/challenge-155/cheok-yin-fung/perl/ch-2.pl @@ -4,7 +4,7 @@ use v5.22.0; use warnings; -use List::Util qw/any/; +use List::Util qw/any sum/; =pod for command-line input: @@ -47,14 +47,12 @@ sub pisano_period { die "(Some of) Parameters are too large.\n" if $N**$t + $t - 1 > 8_000_000; - my $ori_seqstate = [map {$_ % $N} @$seq]; + @$seq = map {$_ % $N} @$seq; + my $ori_seqstate = [@$seq]; my $new_seqstate = [@$ori_seqstate]; my $count = 0; do { - my $new_val = 0; - for my $i (0..$t-1) { - $new_val += $new_seqstate->[$i]*$rec->[$i]; - } + my $new_val = sum map {$rec->[$_]*$new_seqstate->[$_]} (0..$t-1); $new_val = $new_val % $N; push @{$seq}, $new_val; shift @{$new_seqstate}; diff --git a/challenge-155/cheok-yin-fung/perl/temp.pl b/challenge-155/cheok-yin-fung/perl/temp.pl new file mode 100644 index 0000000000..b17b36f174 --- /dev/null +++ b/challenge-155/cheok-yin-fung/perl/temp.pl @@ -0,0 +1,20 @@ +sub pisano_period { + my ($N, $t, $rec, $seq) = @_; + die "(Some of) Parameters are too large.\n" + if $N**$t + $t - 1 > 8_000_000; + + my $ori_seqstate = [map {$_ % $N} @$seq]; + my $new_seqstate = [@$ori_seqstate]; + my $count = 0; + do { + my $new_val = sum map {$rec->[$_]*$new->[$_]} (0..$t-1); + $new_val = $new_val % $N; + push @{$seq}, $new_val; + shift @{$new_seqstate}; + push @{$new_seqstate}, $new_val; + $count++; + die "Patterns not found\n" if $count > $N**$t + $t; + } while (!cmp_num_arr($new_seqstate, $ori_seqstate)); + + return [@$seq[0..$count-1]]; +} |
