NAME

Set::Streak - Routines related to streaks (longest item appearance in consecutive sets)

VERSION

This document describes version 0.003 of Set::Streak (from Perl distribution Set-Streak), released on 2023-11-24.

FUNCTIONS

gen_longest_streaks_table

Usage:

gen_longest_streaks_table(%args) -> any

Generate ranking table of longest streaks.

This routine can be used to generate a ranking table of longest streaks, represented by sets. You supply a list (arrayref) of sets, each set representing a period. The routine will rank the items that appear the longest in consecutive sets (periods).

For example, let's generate a table for longest daily CPAN releases for November 2023 up until today (assume today is the Nov 5th), the input will be:

[
  [qw/PERLANCAR DART JJATRIA NERDVANA LEEJO CUKEBOT RSCHUPP JOYREX TANIGUCHI OODLER OLIVER JV/],     # period 1 (first): list of CPAN authors releasing something on Nov 1, 2023
  [qw/SKIM PERLANCAR BURAK BDFOY SUKRIA AJNN YANGAK CCELSO SREZIC/],                                 # period 2: list of CPAN authors releasing something on Nov 2, 2023
  [qw/JGNI DTUCKWELL SREZIC WOUTER LSKATZ SVW RAWLEYFOW DJERIUS PERLANCAR CRORAA EINHVERFR ASPOSE/], # period 3: list of CPAN authors releasing something on Nov 3, 2023
  [qw/JGNI LEONT LANCEW NKH MDOOTSON SREZIC PERLANCAR DROLSKY JOYREX JRM DAMI PRBRENAN DCHURCH/],    # period 4: list of CPAN authors releasing something on Nov 4, 2023
  [qw/JGNI JRM TEAM LICHTKIND JJATRIA JDEGUEST PERLANCAR SVW DRCLAW PLAIN SUKRIA RSCHUPP/],          # period 5 (current): list of CPAN authors releasing something on Nov 5, 2023
]

The result of the routine will be like:

[
  { item => "PERLANCAR", len => 5, start => 1, status => "ongoing" },
  { item => "SREZIC", len => 3, start => 2, status => "might-break" },
  { item => "JGNI", len => 3, start => 3, status => "ongoing" },
  { item => "JRM", len => 2, start => 4, status => "ongoing" },
  { item => "CUKEBOT", len => 1, start => 1, status => "broken" },
  { item => "DART", len => 1, start => 1, status => "broken" },
  { item => "JJATRIA", len => 1, start => 1, status => "broken" },
  ...
]

Sorting is done by len (descending) first, then by start (ascending), then by item (ascending).

This function is not exported by default, but exportable.

Arguments ('*' denotes required arguments):

  • exclude_broken => bool

    Whether to exclude broken streaks.

    Streak status is either: ongoing (item still appear in current period), might-break (does not yet appear in current period, but current period is assumed to have not ended yet, later update might still see item appearing), or broken (no longer appear after its beginning period sometime in the past periods).

    If you set this option to true, streaks that have the status of broken are not returned.

  • sets* => aoaos

    (No description)

Return value: (any)

HOMEPAGE

Please visit the project's homepage at https://metacpan.org/release/Set-Streak.

SOURCE

Source repository is at https://github.com/perlancar/perl-Set-Streak.

SEE ALSO

AUTHOR

perlancar <perlancar@cpan.org>

CONTRIBUTING

To contribute, you can send patches by email/via RT, or send pull requests on GitHub.

Most of the time, you don't need to build the distribution yourself. You can simply modify the code, then test via:

% prove -l

If you want to build the distribution (e.g. to try to install it locally on your system), you can install Dist::Zilla, Dist::Zilla::PluginBundle::Author::PERLANCAR, Pod::Weaver::PluginBundle::Author::PERLANCAR, and sometimes one or two other Dist::Zilla- and/or Pod::Weaver plugins. Any additional steps required beyond that are considered a bug and can be reported to me.

COPYRIGHT AND LICENSE

This software is copyright (c) 2023 by perlancar <perlancar@cpan.org>.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.

BUGS

Please report any bugs or feature requests on the bugtracker website https://rt.cpan.org/Public/Dist/Display.html?Name=Set-Streak

When submitting a bug or request, please include a test-file or a patch to an existing test-file that illustrates the bug or desired feature.