From b9a0b36cdc72e2b6e43f24b6ed2c7ed193ebd3a0 Mon Sep 17 00:00:00 2001 From: E7-87-83 Date: Thu, 10 Mar 2022 10:09:55 +0800 Subject: better expression for --- challenge-155/cheok-yin-fung/perl/ch-2.pl | 10 ++++------ challenge-155/cheok-yin-fung/perl/temp.pl | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+), 6 deletions(-) create mode 100644 challenge-155/cheok-yin-fung/perl/temp.pl 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]]; +} -- cgit