[texhax] random order

Uwe Lück uwe.lueck at web.de
Fri Oct 13 16:21:47 CEST 2006


Somebody may be interested in

     CTAN: /macros/generic/misc/random.tex (Donald Arseneau)

yet I haven't tried to replace Oleg's macros by something
building on this package. -- There also is

     CTAN: /macros/latex/contrib/fp/fp-random.sty

which I haven't inspected closely.

     CTAN: /macros/latex/contrib/lcg/

Offers much more than Donald Arseneau's file (probably Tom
won't need most of it) and is well-documented. lcg was the best
I found with Googling CTAN on "random", there are many pages
of hits which I ignore.

HTH -- Uwe.

At 13:04 13.10.06, Oleg Katsitadze wrote:
>On Thu, Oct 12, 2006 at 01:30:12PM -0400, Tom Sgouros wrote:
> > Can someone help me think of a way to get 11 items in a random order?
>
>In plain TeX you can try the code below.  It will produce
>identical results for different runs if those runs occur
>within the same minute, because random.tex uses the seed
>which changes only every minute -- that's what \time
>returns.
>
>------------------------------%<------------------------------
>\input random
>
>\newcount\icount
>\newcount\i
>\newcount\j
>
>% Define a new item.
>\def\defitem{%
>   \advance\icount by1
>   % Define a macro with the name `n' where n is the item's number.
>   \expandafter\def \csname \number\icount \endcsname
>}
>% Printing of items.
>\def\printitem#1{\csname \number#1\endcsname}
>\let\printbetweenitems\space
>% Print all defined items in random order.
>\def\getitems{%
>   % Unset all flags.
>   \i=\icount
>   \loop
>     \expandafter\let \csname flag\number\i \endcsname a%
>     \advance\i by-1
>     \ifnum\i > 0 \repeat
>   % Print random items, each item once, until every item has been
>   % printed.
>   \i=\icount
>   \loop
>     % Get random number \j.
>     \setrannum{\j}{1}{\icount}%
>     % Print item \j only if its flag is unset.
>     \expandafter\ifx \csname flag\number\j \endcsname a%
>       \expandafter\let \csname flag\number\j \endcsname b% Set the flag.
>       \printitem\j
>       \advance\i by-1
>       \ifnum\i > 0 \printbetweenitems\fi
>     \fi
>     \ifnum\i > 0 \repeat
>}
>
>
>\defitem{1}
>\defitem{2}
>\defitem{3}
>\defitem{4}
>\defitem{5}
>\defitem{6}
>\defitem{7}
>\defitem{8}
>\defitem{9}
>\defitem{10}
>\defitem{11}
>
>\getitems\par
>\getitems\par
>\getitems\par
>\getitems\par
>\getitems\par
>
>\bye
>------------------------------%<------------------------------



More information about the texhax mailing list