App-denomfind
view release on metacpan or search on metacpan
bin/denomfind view on Meta::CPAN
$cmd = "$0 -y0,3,4,5 -g290,20 -I -% 2.0 50.7 13.5 21.6 6.8" when '3' ;
# âã¯ã¯ãã³1åç®ã®ä¾. æ´æ°ã®ååãè¦ã¤ãããã®ãè¤æ°ãã忝ãåºåãé
ä»è³æã«253ã¨æ¸ããã¦ãããããã®æ°ããããåºåã
# 忍äºå
¥ã2åè¡ã£ã¦ãæä¸ä½ã1æ¡ãã¤ç¸®ããå ´åãæ³å®ãã¦ãããå¾ã£ã¦ã誤差ã表示ããã¨ãæå¤§ã®ããã¯0.05%ã§ãªã0.055%ã
$cmd = "$0 -y1.. -g230,50 -D-3% -Q -52 -% 48.2 26.9 23.1 21.6 20.0 12.2 6.7 5.9 2.4" when 'v1' ;
# âã¯ã¯ãã³2åç®ã®ä¾. æ´æ°ã®ååãè¦ã¤ãããªããã®ã3å以ä¸ã®åæ¯ãåºåãé
ä»è³æã®250ã¨ããæ°ãæ£ãããã§ããã¨åããã
$cmd = "$0 -y-3.. -g50 -D0 -Q -% 65.2 45.6 35.6 30.8 29.6 26.4 14.8 7.2 5.6 4.8 4.4" when 'v2' ;
# âã¯ã¯ãã³3åç®ã®ä¾. æ´æ°ã®ååãè¦ã¤ãããã®ãè¤æ°ãã忝ãåºåãé
ä»è³æã«åæ¯97ã¨ããã96ã3åæ··ãã£ãã¨ãèããããã
$cmd = "$0 -y2.. -D0 -Q -% 81.4 63.3 54.6 51.0 46.9 45.9 28.6 17.3 13.3 11.3 10.3" when 'v3' ;
# â ãã³ãã¤ã®ãå¹´çã®2018å¹´ã®èª¿æ»ã§ãå°å¦çãä¸å¦çãç·åã女åã®å ´å
$cmd = "$0 -y, -52 -g5 -D-3% -Q -% 39.9 30.4 29.5 18.0 17.2" when 'o1' ;
$cmd = "$0 -y, -52 -g5 -D-3% -Q -% 33.7 31.8 23.5 22.7 22.0" when 'o2' ;
$cmd = "$0 -y, -52 -g5 -D-3% -Q -% 37.5 36.2 27.3 18.8 18.5" when 'o3' ;
$cmd = "$0 -y, -52 -g5 -D-3% -Q -% 39.4 35.7 21.5 20.7 18.4" when 'o4' ;
## â https://www.nexer.co.jp ã表示ããè
ãéå¶ãããµã¤ãã®ãã¼ã¸ããã
# â https://trend-research.jp/3038/ ã®ãã©ã®ãããã®é »åº¦ã§..?ã
$cmd = "$0 -% 0.7 1.8 5.5 7.7 18.4 12.9 21.3 8.5 23.2" when 'n1' ;
# â https://prtimes.jp/main/html/rd/p/000000231.000087626.html æã
ãããã¾ã§ãªã?
$cmd = "$0 -D-2%,----------- -y-1.. -a0.07% -% 11.2 29.3 28.2 11.6 9.7 10.1" when 'n2' ;
$cmd = "$0 -g259,1 -a0.194% -D-3% -% 16.9 23.9 31.0 9.9 2.8 5.6" when 'n3' ; # -a ã§ååããªãã¨ãæ¢ç´¢ãã¦ããã
# ããããã¯èªåã§ç¨æããã¹ã©ã¤ãã«é¢ãã¦ã
$cmd = "$0 -y0.. -D5 -Q -g141,20 -% 2.0 13.5 21.6 6.8" when 's18' ;
$cmd = "$0 -y-1.. -D5 -52 -g20 -% 2.0 50.7 13.5 21.6 6.8" when 's19' ;
$cmd = "$0 -y-1.. -I -g20 -% 2.0 50.7 13.5 21.6 6.8" when 's20' ;
$cmd = "$0 -D5 -I -Q -g150,-inf -% 2.0 13.5 21.6" when 's21' ;
$cmd = "$0 -y1.. -g75,20 -D0,----- -Q -% 81.4 63.3 54.6 51.0 46.9 45.9 28.6 17.3 13.3 11.3 10.3" when 's24' ;
# æ©è½è¿½å ã«åããã¦ãã¹ããã¿ã¼ã³
$cmd = "$0 -M0 -D9 33.3% 50.0% 57.1%" when 'D9' ; # -% 以å¤ã«%ãç´æ¥æ°å¤ã«ä»ãããã¨ãå¯è½ã¨ããã%ãã&ã¸ã®èª¤åã«æ³¨æã
$cmd = "$0 -y, -L1 -% 3.2 59.0 17.5 20.3" when 'L1' ; # -L ã®å®è£
ã®ä¼´ããã¹ã
} for $o{T} ;
say STDERR BOLD ITALIC YELLOW " >> " , $cmd ;
system $cmd ;
exit ; # systemã§ exit ããã¯ãã ããéãã³ã¼ããå¢ãããã¨ãèããããã« exitã¨æ¸ããã
}
### ãã¹ã以å¤ã¯ããããéå§
$o{D} =~ s/,(.*)$// if exists $o{D};
my $Demp = $1 if defined $1 ; # // '-' ;
$o{D} //= 0 unless grep { m/[DIQ]/ } keys %o ;
$o{g} //= 12 ; # åå¾ãã忝ã®åæ°ã®æå¤§å¤ ãªããã³ã³ãåºåãã§ãåå¾åæ¯ã®éå§å¤(æå°å¤)ãæå®å¯è½ã
$o{a} =~ s/(^.*)%$/"$1"*"0.01"/e if exists $o{a} && $o{a} =~ /%$/ ; # -a ã®æå®ã % ã§çµããå ´åã®å¦ç
$o{y} //= '1..' ; # ä½ãåè£ãããã°è¡¨ç¤ºã¨ããã
do { pipe *STDIN , my $WH ; print {$WH} join "\n" , splice @ARGV , 0 } ;
my @nums = & readNums ; # $q ã¯ã-y ã®ãªãã·ã§ã³ã®ãã©ã¡ã¼ã¿ã§evalããéã«ãè£æçã«ä½¿ããã¨ãæå³ãã¦ããã
my $q = @nums ;
# ããã¯ãåã弿°ã§åã颿°ã2å(以ä¸)å¼ã³åºãã¨ããæå³ã§ãä¸å¹çã§åé·ã¨ãè¨ãããå¾ã§æ´çã..
my @ddg = map { & decDig ($_ ) } @nums ; # ä¸ããããå²åè¿ä¼¼å¤ãããããããå°æ°ç¹ä»¥ä¸ä½æ¡ã§ããã? dig digit
my $ymx = max ( exists $o{y} ? & yparse ( $o{y} ) : $q ) ; # y max # è¨ç®ãåé·.. ä½åº¦ãæ°ã«ãªããÆexp
my $roa = abs 1/$o{a} if exists $o{a} ; # reciprocal $o{a}
my $count = 0 ; # æ¢ç´¢ãã忝ã®åæ°
my $denom = do { $o{g} =~ s/(.+),// && $1 } || 1 ; #ãéå§ãã忝ã®å¤ $o{g} ãæ¸ãæããå ´åã«æ³¨æã
& main () ;
END{
exit unless $count ; # 1åãåæ¯ãæ¢ç´¢ãã¦ããªããªããããçµäºã
exit if 0 eq ($o{2}//'') ;
my $sum = 0 ; $sum = "$sum" + "$_" for @nums ;
my $bf = color 'bold faint white' ;
print STDERR $bf . scalar @nums . " ratios are given (sum=" . color('reset bold yellow').($sum) . $bf .")." if @nums > 1 ;
my $ud = [ 'down to','from','up to' ] -> [ ( $o{g} <=> 0 ) + 1 ] ; # 'from' ã¯ããªãç¡çç¢çã§ãããæ£å¸¸ãªä½¿ç¨ã®æ³å®å¤ã
$denom += $o{g} > 0 ? -1 : $o{g} < 0 ? 1 : 0 ; # 1åæ»ãã
say STDERR BOLD FAINT " $count denominators have found $ud $denom. ($Script)" ;
}
exit 0 ;
sub main ( ) {
my ( @nA , @nB ,@nC) ; # åºéã® éãã端A 㨠éãã端B , Cã1ã®å ´åã ããCã0ããéåºéã§ã2ãªãéåºéã
do { my($A,$B,$C)= realInt ($_) ; push @nA,$A ; push @nB,$B ; push @nC,$C } for @nums ;
do { # åºåã®1è¡ç®
my @seq = 1 .. $#nums+1 ;
my @out = qw[denom fit] ;
for ( @seq ) {
push @out , CYAN $nums[$_-1] if exists $o{D} ; # "f$_:".$nums[$_-1]
push @out , "numerators_$_" if $o{I} ; # unless $o{v} eq "0" ;
}
push @out , "dividends" if $o{Q} ;
push @out, BLUE "likelihood ratio" if ($o{L}//'') ne '0' ;
say join "\t" , map { UNDERLINE $_ } @out ;
} ;
$SIG{INT} = sub { say STDERR FAINT BOLD "\$denom=$denom" ; exit } ;
while ( $count < abs $o{g} ) { # continue ãããã¯ãç¨ãã¦ãããã¨ã«æ³¨æã
$o{g} < 0 ? last : next if $denom <= 0 ; # 忝$denomãè² ã®å ´åã¯ã¾ã 䏿ãåä½ã0ã®å ´åã¯åºéã¨ãã¦[0,0]ã«ãªããã¾ããã
if ( $o{g} > 0 && $denom > 0 ) { # ããæããä½ãåºåããªãã®ã«ãç¡éã«ã¼ãã¨ãªãäºæ
ã®åé¿
last if exists $o{a} && $ymx < $q && $denom -1 > $roa ;
last if $ymx < grep { length ($denom -1 ) - 1 >= $_ } @ddg ;
}
my $kosu = 0 ; # 該å½åæ°(ããã)
my @out = () ; # åºåæåå
my @nu = () ; # numerators ååã®æ°ã®éã¾ã ##
push @out , "$denom" ; # ã³ãã³(:)ã以åä»ä¸ãã¦ãã
for my $i ( 0 .. $#nums ) {
my ($mA,$mB,$mC) = ( "$nA[$i]" * "$denom" , "$nB[$i]" * "$denom" , $nC[$i] ) ; # ååã®æ°å¤ã«å¯¾å¿
my @int = numInts ( $mA , $mB , $mC ) ; #åºéã«å«ã¾ããæ´æ°ã®æå°ã¨æå¤§ãè¿å¤ã®è¦ç´ æ°ã¯1ã®å ´åã0ã®å ´åãããã
push @nu , $int[0]..$int[-1] if @int ;
$kosu ++ if @int ;
push @out , procD( \@int, $nums[$i] , $mA,$mB,$mC ) if exists $o{D} ;
push @out , do{ my $str=§($mA,$mB,$mC) ; @int ? GREEN $str : $str } if $o{I} ;
}
sub sect($$$){
return $_[0] < $_[1] ? "[$_[0] $_[1])" : "($_[1] $_[0]]" if $_[2] == 1 ;
return $_[2] ? "[$_[0] $_[1]]" : "($_[0] $_[1])" ; #unless $_[2] & 2 ;
} ;
next unless yfilter ( $kosu ) ;
state $den1 = $denom ; #print RED $den1;
my $t = scalar @nums - $kosu ;
$kosu = $t==0 ? BRIGHT_RED BOLD $kosu : $t==1 ? YELLOW BOLD $kosu : $t==2 ? $kosu : FAINT $kosu ;
splice @out , 1 , 0 , $kosu ; # åºåé
åæååã«ãåæ°è¡¨è¨ãæ¿å
¥ã
push @out , procQ( @nu ) if $o{Q} ; # ( $o{Q} ) { }
splice @out , @out, 0 , BLUE sprintf '%0.5g', ($den1 / $denom ) ** ( scalar @nums - ($o{L}//0) ) if ($o{L}//'') ne '0' ;
( $o{M} // '' ) eq 0? next : ($out[0] .= '.') if @nu && bgcd ($denom, @nu) > 1 ; # 忝ã«ããªãªããä»å ã
say join "\t" , map { $_ // '' } @out ;
$count ++ ;
} continue {
$denom += $o{g} < 0 ? -1 : 1 ;
( run in 1.925 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )