Shuffled input is important
Yes, good catch! The GRT makes each comparison faster, but it seems like the number of comparisons is far lower for already sorted or nearly sorted input. It looks like the pack method is better no matter what because with this (and a list from -50 to 250):
vr_map => sub { # https://www.perlmonks.org/?node_id=1229415
my @list = @input;
@list = unpack 'i*', pack 'I*', sort { $a <=> $b }
map { ~$_ } @list; # Doesn't even give the cor
+rect answer, there's an offset of 1
Compare(\@list,\@output) or die "@list" if DO_CHECK;
},
your implementation is still noticeably faster (my version falls behind pretty fast on a non-sorted list):
Rate Eily vr_map grepfirst sortfirst vr
Eily 5208/s -- -53% -64% -67% -71%
vr_map 11021/s 112% -- -25% -31% -38%
grepfirst 14623/s 181% 33% -- -8% -17%
sortfirst 15977/s 207% 45% 9% -- -10%
vr 17701/s 240% 61% 21% 11% --