App-saikoro
view release on metacpan or search on metacpan
#!/usr/bin/perl
use 5.014 ; use warnings ;
use Getopt::Std ; getopts 'i:~.:2:g:s:y:' => \my %o ; #or HELP_MESSAGE () ;
use Term::ANSIColor qw[ :constants ] ; $Term::ANSIColor::AUTORESET = 1 ;
use feature qw [ say ] ;
# ä¹±æ°ãçæãã颿°è¨å®
sub rand_gen ( ) ;
my $osep = $o{i} // "\t" ; # åºåã®æ¨ªæ¹åã®åºåãæå
my ($r,$c) ; # åæ° ã¨ è¡æ°
my ($d,$u) ; # ä¸é 㨠ä¸é
& init ;
& main ;
& info ;
exit 0 ;
sub init ( ) {
# ä¹±æ°ã·ã¼ãã®æå®
$o{s} = defined $o{s} ? srand $o{s} : srand ;
# åæ°ã¨è¡æ°
( $r, $c ) = split /[,x]+/o , $o{g} // '' , 2 ;
$c //= 1 ; # åæ°ã®æªæå®å¤
$r //= 12 ; # è¡æ°ã®æªæå®å¤
( $r, $c ) = ( $c, $r ) if $o{'~'} ;
# çæããä¹±æ°ã®ç¯å²
( $d , $u ) = split /(?:,|\.\.)/ , $o{y} // '' , 2 ;
$d //= 6 ; # ããããã®ç®ã®æå¤§å¤ æ°ã®æå®ã1åããªãå ´åãããã
($d,$u) = (defined$o{'.'}?0:1, $d) if ! defined $u ; # ç¯å²æå®ãd..uã®å½¢å¼ã§ç¡ããªã -uã®ã¦ããã©ã¼ã æå®ã«å¾ã0..nã¾ãã¯1..n
# 使ç¨ããä¹±æ°çæé¢æ°ã®è¨å®
* rand_gen = defined $o{'.'}? * rand_gen_unif_fmt : * rand_gen_int ;
sub rand_gen_int { state $base=$d; state $range = $u-$d+1 ; $base + int rand $range } ;
sub rand_gen_unif { state $base=$d; state $range = $u-$d ; $base + rand $range } ;
sub rand_gen_unif_fmt { state $fmt="% 0.$o{'.'}f" ; sprintf $fmt , rand_gen_unif } ;
}
sub main ( ) {
for ( 1 .. $r ) {
say join $osep , map { rand_gen } 1 .. $c ;
}
}
sub info ( ) {
exit 0 if 0 eq ($o{2}//'') ;
$0 =~ s|.*/||;
say STDERR BOLD DARK ITALIC CYAN
"Used random seed = $o{s} [$0 -g ${r}x${c} -y $d..$u" . (defined $o{'.'} ? " -. $o{'.'}" : '' ) ."]" ;
}
## ãã«ãã¨ãã¼ã¸ã§ã³æ
å ±
BEGIN {
our $VERSION = 0.24 ;
$Getopt::Std::STANDARD_HELP_VERSION = 1 ;
grep { m/--help/} @ARGV and *VERSION_MESSAGE = sub {} ;
# æå㯠0.21 ãç®å®ã¨ããã
# 1.00 以ä¸ã¨ããå¿
è¦æ¡ä»¶ã¯è±èªçã®ãã«ãããã¡ãã¨åºããã¨ã
# 2.00 以ä¸ã¨ããå¿
è¦æ¡ä»¶ã¯ãã¹ãã³ã¼ããå«ããã¨ã
# 0.22 : è±æããã¥ã¢ã«ãPODå½¢å¼ã«ããã
# 0.23 : è±æããã¥ã¢ã«ã®PODå½¢å¼ã®é¨åãããã«å¢ãããã
# 0.24 : è±æããã¥ã¢ã«ãå°ãæ¸ãå ãã
}
sub HELP_MESSAGE {
use FindBin qw[ $Script $Bin ] ;
sub EnvJ ( ) { $ENV{LANG} =~ m/^ja_JP/ ? 1 : 0 } ; # # ja_JP.UTF-8
sub en( ) { grep ( /^en(g(i(sh?)?)?)?/i , @ARGV ) ? 1 : 0 } # English ã¨ããæååãå
é ãã2æå以ä¸ãå«ãã
sub ja( ) { grep ( /^jp$|^ja(p(a(n?)?)?)?/i , @ARGV ) ? 1 : 0 } # jp ã¾ã㯠japan ã¨ããæååãå
é ãã2æå以ä¸ãå«ãã
sub opt( ) { grep (/^opt(i(o(ns?)?)?)?$/i, @ARGV ) ? 1 : 0 } # options ã¨ããæååãå
é ãã3æå以ä¸å«ããã
sub noPOD ( ) { grep (/^no-?p(od?)?\b/i, @ARGV) ? 1 : 0 } # POD ã使ããªãã¨è¨ãæå®ãããã¦ãããã©ãã
my $jd = "JapaneseManual" ;
my $flagE = ! ja && ( en || ! EnvJ ) ; # è±èªã«ãããã©ããã®ãã©ã°
exec "perldoc $0" if $flagE && ! opt ; #&& ! noPOD ;
$ARGV[1] //= '' ;
open my $FH , '<' , $0 ;
while(<$FH>){
s/\Q'=script='\E/$Script/gi ;
s/\Q'=bin='\E/$Bin/gi ;
if ( s/^=head1\b\s*// .. s/^=cut\b\s*// ) {
if ( s/^=begin\s+$jd\b\s*// .. s/^=end\s+$jd\b\s*// xor $flagE ) {
print $_ if ! opt || m/^\s+\-/ ;
}
}
}
close $FH ;
exit 0 ;
}
=encoding utf8
=head1 NAME
saikoro
=head1 VERSION
0.24 (2018-07-10)
=head1 SYNOPSIS
saikoro B<[-g N1[,N2]] [-y N3[..N4]]> # N1, N2, N3 and N4 are all numbers.
=head1 DESCRIPTION
A random number(matrix) generator from uniform distributions.
Generates random uniform variable. Discrete/uniform can be specified.
=head1 OPTION
=over 4
=item B<-g N1>
Get N1 random variables. N1 is a positive interger.
=item B<-g N1,N2>
Get N1 times N2 variables. N1 for vertical, N2 for horizontal.
The form "B<-g N1xN2>" is allowed.
=item B<-~ >
The number specifications N1 and N2 are reversed, so N1 for horizontal, N2 for vertical.
=item B<-y N3,N4>
Limit the values into the number interval [N3,N4].
The form "B<-y N3..N4>" is also allowed.
=item B<-y N3>
Similar to -y 1..N3. When -. N is simultaneously set, similar to -y 0..N3.
=item B<-. N>
N digits after decimal points by rounding(, switching from merely discrete integers to continuous).
If N=0, the outputs are integers.
=item B<-2 0>
Switch to no secondary information that would be output to STDOUT.
=item B<-s N>
Random seed specification. Essentially the residual divided by 2**32 is used.
=item B<-i char>
Specifies the horizontal separator character.
=item B<--help>
Print this online help manual of this command "saikoro". Similar to "perldoc `which [-t] saikoro` ".
=item B<--help opt>
Only shows the option helps. It is easy to read when you are in very necessary.
( run in 1.751 second using v1.01-cache-2.11-cpan-d7f47b0818f )