emath BBS

新規発言一覧最新記事過去一覧検索HOME

No.7317  Re[8]:ランダムな順列の作り方
発言者: 飯島 徹
発言日: 2008 06/04 03:51
発言元: flh1adm062.hkd.mesh.ad.jp
でわ引き続きPerlを利用して^^;

#-------- shuffle.pl -----------------------------
#!Perl -w
use strict;

sub ShuffleArray () {
 my $array = shift;
 my $len = scalar(@$array);
 
 for(my $i=$len-1 ; $i>=0; --$i){
  my $j = int( rand($i+1) );
  next if($i==$j);
  @$array[$i, $j] = @$array[$j, $i];
 }
 
}

sub Shuffle () {
 my @array = @_;
 &ShuffleArray(\@array);
 my $result = join(",",@array);
 $result;
}

# &MakeRandArray(n1,n2,n3);
# n1 : 初期値
# n2 : 終了値
# n3 : 個数
sub MakeRandArray (){
 my ($first,$end,$value) = @_;
 my @array = ($first..$end);
 &ShuffleArray (\@array);
 splice(@array,$value);
 my $result = join(",",@array);
 $result;
}
1;
#---------------------------------------------------

%------------- temp.tex ----------------------------
\documentclass{jarticle}
\usepackage{emathP}
\usepackage{emathT}
\usepackage[perl]{emathRn}
%\usepackage{emathPp}
\myPerlLib{shuffle.pl}%
\makeatletter
\def\Bunkai#1#2{%
 \edef\BunkaiBody{#2}%
 \setcounter{tempcnta}{0}%
 \expandafter\@Bunkai\BunkaiBody,\@empty\@nil{#1}%
}%
\def\@Bunkai#1,#2\@nil#3{%
 \addtocounter{tempcnta}{1}%
 \expandafter\def\csname #3{tempcnta}\endcsname{#1}%
 \def\@temp{#2}%
 \def\@EMPTY{\@empty}%
 \ifx\@temp\@EMPTY
 \else
  \def\@@BunkaiBody{\@Bunkai#2\@nil{#3}}%
  \expandafter\@@BunkaiBody
 \fi
}%
\makeatother
\begin{document}

% MakeRandArray(n1,n2,n3)
% n1からn2の配列をつくり
% それをランダムに並べ替え
% 先頭からn3個を使用する
% \calcval[s]{MakeRandArray(1,100,10)}\temp
% 上の例では1から100までの配列をつくり
% それをランダムに並べ替え
% 先頭から10この数字を\tempに代入する
\calcval[s]{MakeRandArray(10,99,12)}\temp
\temp
\Bunkai{\Alph}{\temp}

\calcval[s]{MakeRandArray(10,99,12)}\temp
\temp
\Bunkai{\alph}{\temp}

$\renewcommand{\arraystretch}{1.8}
\begin{hyou}{IC{2zw}||*{11}{C{2zw}|}C{2zw}I}\hlineb
\sya[r] &\A &\B &\C &\D &\E &\F &\G &\H &\I &\J &\K &\L\\ \hhline{I=#=|=|=|=|=|=|=|=|=|=|=|=I}
\a      &   &   &   &   &   &   &   &   &   &   &   &\\ \hline
\b      &   &   &   &   &   &   &   &   &   &   &   &\\ \hline
\c      &   &   &   &   &   &   &   &   &   &   &   &\\ \hline
\d      &   &   &   &   &   &   &   &   &   &   &   &\\ \hline
\e      &   &   &   &   &   &   &   &   &   &   &   &\\ \hline
\f      &   &   &   &   &   &   &   &   &   &   &   &\\ \hline
\g      &   &   &   &   &   &   &   &   &   &   &   &\\ \hline
\h      &   &   &   &   &   &   &   &   &   &   &   &\\ \hline
\i      &   &   &   &   &   &   &   &   &   &   &   &\\ \hline
\j      &   &   &   &   &   &   &   &   &   &   &   &\\ \hline
\k      &   &   &   &   &   &   &   &   &   &   &   &\\ \hline
\l      &   &   &   &   &   &   &   &   &   &   &   &\\ \hlineb
\end{hyou}$
\end{document}
%---------------------------------------------------

▼関連発言

7301:ランダムな順列の作り方 [st] 06/02 21:55
 └7302:Re:ランダムな順列の作り方 [田中徹] 06/03 00:43
  └7303:Re[2]:ランダムな順列の作り方 [飯島 徹] 06/03 00:54
   └7304:Re[3]:ランダムな順列の作り方 [田中徹] 06/03 01:09
    └7305:Re[4]:ランダムな順列の作り方 [飯島 徹] 06/03 01:23
     └7306:Re[5]:ランダムな順列の作り方 [飯島 徹] 06/03 01:55
      └7308:Re[6]:ランダムな順列の作り方 [st] 06/03 11:46
       ├7316:Re[7]:ランダムな順列の作り方 [田中徹] 06/03 23:15
       │└7317:Re[8]:ランダムな順列の作り方 [飯島 徹] 06/04 03:51
       │ └7318:Re[9]:ランダムな順列の作り方 [st] 06/04 23:24
       │  └7319:Re[10]:ランダムな順列の作り方 [飯島 徹] 06/05 01:41
       │   └7320:Re[11]:ランダムな順列の作り方 [st] 06/05 05:09
       └7321:Re[7]:ランダムな順列の作り方 [石原 守] 06/05 10:14
        └7323:Re[8]:ランダムな順列の作り方 [st] 06/05 21:47<-last

Pass 保存


CGIROOM