ビンゴの結果を整形表示
Posted feedbacks - Perl
出力用の関数を追加。 ちょっとドロくさいかな?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | sub bingo($;)
{
my $x = shift ;
my @num = (1 .. $x);
my $r;
for( my $n = $x; $n>0; $n --)
{
$r = rand; $r *= 1000;
push(@num, splice(@num, $r % $n, 1) );
}
return @num;
}
sub printTable(@)
{
my @T = @_;
my $N, $K;
printf("[%d] => \n", $#T+1);
for( $N=0; $N<=$#T; $N = $K + 1)
{
# 番号
for( $K=$N; $K<$#T; $K ++ )
{
last if ($K-$N) >= 9;
printf("%2d ", $K+1);
}
printf("%2d\n", $K+1);
# 乱数
for( $K=$N; $K<$#T; $K ++ )
{
last if ($K-$N) >= 9;
printf("%2d ", $T[$K]);
}
printf("%2d\n", $T[$K]);
printf("\n");
}
}
my @table;
srand;
@table = bingo(30); ::printTable(@table);
@table = bingo(35); ::printTable(@table);
|
10個ずつspliceすれば綺麗に書けると思ったんだけど、なんかごちゃごちゃしてしまった。
1 2 3 4 5 6 7 8 9 10 11 12 13 | use List::Util qw/shuffle/;
sub bingo {p(shuffle(1..$_[0]));}
sub p {
my $i = 1;
while(my @sublist = splice(@_,0,10)){
for my $seq ($i..$i+scalar(@sublist)-1){printf "%3d", $seq;};
print "\n";
for my $num (@sublist){printf "%3d", $num;};
print "\n\n";
$i = $i + scalar(@sublist);
}
}
|
perlで書いてみた
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | sub bingo()
{
my @array = ( 1 .. shift );
my @out = ();
while ( my $x = splice( @array, int(rand(scalar @array)) , 1 ) )
{
push @out , $x ;
}
return [ @out ];
}
sub out()
{
my @array = @{ $_[0] };
my $i=1;
while ( my @x = splice( @array, 0 , 10 ) )
{
my $n = scalar @x ;
my $comp = (int($i/$n)+1) * $n;
while ( $i <= $comp )
{
printf "%3d", $i++;
}
print "\n";
while(my $a = shift @x )
{
printf "%3d" , $a ;
}
print "\n\n";
}
}
&out( &bingo(35) );
|



raynstard
#3403()
Rating1/1=1.00
「重複無し乱数」で作ったbingo関数の結果を下のように「何番目の乱数か」とセットにして10個ずつ折り返して表示するコードを書いてください。
[ reply ]