aboutsummaryrefslogtreecommitdiff
path: root/challenge-155
diff options
context:
space:
mode:
authorE7-87-83 <fungcheokyin@gmail.com>2022-03-10 10:09:55 +0800
committerE7-87-83 <fungcheokyin@gmail.com>2022-03-10 10:09:55 +0800
commitb9a0b36cdc72e2b6e43f24b6ed2c7ed193ebd3a0 (patch)
tree5c2c6ac3707f4e563de47897038c1ff2d7a5c08c /challenge-155
parent14e1dfc26558a275721d6cd79743944d81e8637f (diff)
downloadperlweeklychallenge-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.pl10
-rw-r--r--challenge-155/cheok-yin-fung/perl/temp.pl20
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]];
+}