App-numero2bgc
view release on metacpan or search on metacpan
use List::Util qw [ min max uniq ] ;
use Data::Dumper ;
use POSIX qw [floor ceil ] ;
my $M = $o{M} // 15 ; # 段éã®æ°
my ($v1,$v2,$v3) = split /,/, $o{r} //'' , 3 ; # -r ããæ½åºãå
¨ã¦ã¾ãã¯æ«å°¾1åãundefã®å ´åããã
sub numExtract ($) {
my @tmp = grep /$RE{num}{real}/o , @{$_[0]} ;
@tmp = grep { $v1 <= $_ && $_ <= $v2 } @tmp if defined $v1 ;
@tmp = sort { $a <=> $b } @tmp ;
@tmp = uniq @tmp if 0 ne ($o{u}//'') ;
return @tmp ;
}
undef $/ ;
my $text = <> ;
my @parts = split /($RE{num}{real})/o , $text , -1 ; # èªãã ããã¹ãããæ°å¤ã®é¨åã¨ãã以å¤ã«ãã©ãã©ã«ã
my @nums = numExtract \@parts ;
my @chop = ('-inf', map $nums[ $#nums * (2*$_-1)/(2*$M-2) ] , 1..$M-1 ) ; # <-- - $M==1ã®æ??
#say CYAN join ":" , @chop ;
my %n2c ;#= do{ my $c=0; map{while($chop[$c++]>$_){1}; say($_,":",$c-1) } uniq @nums }; # æ°å¤ãè²ã¬ãã«ã«å¤æããããã®ããã·ã¥
do { my $c = 0 ; # è²ã®æ®µéã®åæå¤
for ( uniq @nums ) {
$c++ while $c <= $#chop && $chop [ $c ] < $_ ; # <= 㯠< ã ã¨ä¸é½åã£ã½ãã
$n2c { $_ } = $c - 1 ;
}
} ;
#for ( sort {$a<=>$b} keys %n2c ) { say CYAN "$_ : $n2c{$_}"} ; exit ;
my %usedC ; #使ãããè²ãè¨é²
for ( @parts ) {
if ( /$RE{num}{real}/o ){
my $c ;
if ( defined $v1 and $_ < $v1 || $v2 < $_ ) {
do { print ; next } if 0 eq ( $v3 // '' ) ;
$c = $_ < $v1 ? 0 : $M - 1 ;
}
$c //= $n2c{$_} ;#say RED $c ;
my $R = ceil max 0 , min 5 , $c - ($M/2-.5) ;
my $G = max 0, ceil min 2 , ($M/2-.5) - abs ( ($M/2-.5) - $c ) ;
my $B = ceil max 0 , min 5, ($M/2-.5) - $c ;
($R,$B)=($B,$R) if $o{'~'} ;
my $color = "bold on_rgb$R$G$B" ;
$usedC { $color }++;
#print "$R$G$B";
#print "$c-$R$G$B" .color( 'reset' ) ;
#print "$_:$c-$R$G$B" .color( 'reset' ) ;
#print color( $color ) . "$_:$c-$R$G$B" .color( 'reset' ) ;
print color( "$color" ) . "$_" .color( 'reset' ) ;
} else {
print $_ ;
}
}
END {
exit if 0 eq ($o{2}//'') ;
#my @tmp = sort {$a <=> $b } values %n2c ;
#@tmp = uniq @tmp ;
#my $difc = scalar @tmp ;
my $difc = scalar keys %usedC ;
select STDERR ; # 以éã®åºå㯠STDERR ã¨ããã
print FAINT "$difc different background colors used ; " ;
#my $alv = scalar uniq @chop ;
#print STDERR FAINT "Different $alv are prepared ; " ;
print FAINT "Threadsholds = { " . join(" : ",@chop[1..$#chop])." } with the length $#chop." ;
say FAINT " ($0)" ;
} ; #exit ;
exit ;
## ãã«ãã¨ãã¼ã¸ã§ã³æ
å ±
sub HELP_MESSAGE {
use FindBin qw[ $Script ] ;
$ARGV[1] //= '' ;
open my $FH , '<' , $0 ;
while(<$FH>){
s/\$0/$Script/g ;
print $_ if $ARGV[1] eq 'opt' ? m/^\ +\-/ : s/^=head1// .. s/^=cut// ;
}
close $FH ;
exit 0 ;
}
=encoding utf8
=head1
$0
å
¥åã®ããã¹ããèªã¿åããæ°å¤ã®é¨åã (Regexp::Commons::number ã使ã£ã¦)
æ½åºãã¦ãèæ¯ã« ANSIã¨ã¹ã±ã¼ãã·ã¼ã±ã³ã¹ã«ããè²ãä»ããã
æå°å¤ã¯éãç·ãçµç±ãã¦ãæå¤§å¤ã¯èµ¤ã15段éã
(åºç¾æ°å¤ãuniqåããä¸ã§ã28åä½ç¹ãã¨ãã奿°çªç®ã®å¤14åãæ½åºãã¦ã
ãããé¾å¤ã¨ãã¦ãè²ã¯æ®µéçã«å¤åãããã)
é¾å¤ã«å¯¾ãã¦ãæ°å¤ã®è²ã¥ãã¯ãã以ä¸ãã§å¤å®ããæªæºãã«ããå¤å®ã§ã¯ãªãã
ãªãã·ã§ã³:
-u 0 : æ°å¤ã«å¯¾ã㦠uniq ã®å¦çãããªãã
-g L,U[,0] : çè²ããæ°å¤ç¯å²ãæå®ããã3çªç®ã«0ãå
¥ããã¨ãç¯å²å¤ã®æ°å¤ã¯çè²ãããªãã
-~ : è²ã®ã赤ã¨éã®å¾åãå転ããã
-M num ; numã¯è²ã®åæ°ãæå¤§15ã
-2 0 ; 2次æ
å ±ã®åºåã®æå¶
=cut
( run in 0.776 second using v1.01-cache-2.11-cpan-f56aa216473 )