diff options
| author | Kang-min Liu <gugod@gugod.org> | 2020-11-19 22:24:12 +0900 |
|---|---|---|
| committer | Kang-min Liu <gugod@gugod.org> | 2020-11-20 09:23:47 +0900 |
| commit | e4d77d91fa4bd3992558e2e9ccc34222e0771897 (patch) | |
| tree | c1b681b7d6ad6e2b2304aed962f3297c1fe7173d | |
| parent | 99eda52de5651692c44c918da84c608ec69351ce (diff) | |
| download | perlweeklychallenge-club-e4d77d91fa4bd3992558e2e9ccc34222e0771897.tar.gz perlweeklychallenge-club-e4d77d91fa4bd3992558e2e9ccc34222e0771897.tar.bz2 perlweeklychallenge-club-e4d77d91fa4bd3992558e2e9ccc34222e0771897.zip | |
alternative solution.
| -rw-r--r-- | challenge-087/gugod/raku/ch-1.raku | 47 |
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]; } |
