aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKang-min Liu <gugod@gugod.org>2020-11-19 22:24:12 +0900
committerKang-min Liu <gugod@gugod.org>2020-11-20 09:23:47 +0900
commite4d77d91fa4bd3992558e2e9ccc34222e0771897 (patch)
treec1b681b7d6ad6e2b2304aed962f3297c1fe7173d
parent99eda52de5651692c44c918da84c608ec69351ce (diff)
downloadperlweeklychallenge-club-e4d77d91fa4bd3992558e2e9ccc34222e0771897.tar.gz
perlweeklychallenge-club-e4d77d91fa4bd3992558e2e9ccc34222e0771897.tar.bz2
perlweeklychallenge-club-e4d77d91fa4bd3992558e2e9ccc34222e0771897.zip
alternative solution.
-rw-r--r--challenge-087/gugod/raku/ch-1.raku47
1 files changed, 26 insertions, 21 deletions
diff --git a/challenge-087/gugod/raku/ch-1.raku b/challenge-087/gugod/raku/ch-1.raku
index dd5e35d4ec..dda0527a09 100644
--- a/challenge-087/gugod/raku/ch-1.raku
+++ b/challenge-087/gugod/raku/ch-1.raku
@@ -1,30 +1,35 @@
-sub MAIN {
- say longest-common-sequence([9,1,2,7,8,84]) // 0;
- say longest-common-sequence([2,1,3,9,7,8,4]) // 0;
+sub MAIN() {
+ say longest-consecutive-sequence([9,1,2,7,8,84]) // 0;
+ say longest-consecutive-sequence([2,1,3,9,7,8,4]) // 0;
+ say longest-consecutive-sequence([2,1,2,3,9,7,8,4]) // 0;
}
-sub longest-common-sequence(@N) {
- my %G;
- for @N.sort({ $^a <=> $^b }) -> $n {
- next if %G{$n}:exists;
- %G{$n} = %G{$n-1} // $n;
- }
+sub longest-consecutive-sequence(@N) {
+ my @m = @N.sort({ $^a <=> $^b });
+
+ my $seq_from = @m[0];
+ my $seq_until = @m[0];
+ my $longest_seq_from = @m[0];
+ my $longest_seq_until = @m[0];
+ my $longest_seq_length = 0;
- my $max = 0;
- my $group;
- for %G.keys -> $n {
- my $d = $n - %G{$n};
- if $d > $max {
- $max = $d;
- $group = $n;
+ for 1..@m.end -> $i {
+ my $n = @m[$i];
+ if $n - @m[$i-1] == 0|1 {
+ $seq_until = $n;
+ my $len = $seq_until - $seq_from;
+ if $longest_seq_length < $len {
+ $longest_seq_from = $seq_from;
+ $longest_seq_until = $seq_until;
+ $longest_seq_length = $len;
+ }
+ } else {
+ $seq_from = $n;
+ $seq_until = $n;
}
}
- if $max == 0 {
- return Nil;
- } else {
- return %G{$group} ... $group;
- }
+ return $longest_seq_length == 0 ?? Nil !! [$longest_seq_from...$longest_seq_until];
}