Acme-Selection-RarestFirst

 view release on metacpan or  search on metacpan

lib/Acme/Selection/RarestFirst.pm  view on Meta::CPAN

        }
    }

    method pick ( $my_bitfield, $priorities //= () ) {
        my @candidates;
        for ( my $i = 0; $i < $size; $i++ ) {
            next if $my_bitfield->get($i);
            next if defined $priorities && ( $priorities->[$i] // 1 ) <= 0;
            push @candidates, $i;
        }
        return undef unless @candidates;

        # Sort by:
        # 1. User priority (higher first)
        # 2. Availability (lowest first)
        # 3. Random tie-break (achieved by shuffling before sort)
        @candidates = shuffle @candidates;
        @candidates = sort {
            my $p_a     = $priorities ? ( $priorities->[$a] // 1 ) : 1;
            my $p_b     = $priorities ? ( $priorities->[$b] // 1 ) : 1;
            my $avail_a = $availability[$a] // 0;



( run in 3.972 seconds using v1.01-cache-2.11-cpan-d80b1682f3f )