Date: Sat, 25 Nov 2000 14:38:38 -0800 From: "Crist J . Clark" <cjclark@reflexnet.net> To: Sue Blake <sue@welearn.com.au> Cc: freebsd-questions@FreeBSD.ORG Subject: Re: unsorting Message-ID: <20001125143838.Z12190@149.211.6.64.reflexcom.com> In-Reply-To: <20001126023150.F377@welearn.com.au>; from sue@welearn.com.au on Sun, Nov 26, 2000 at 02:31:53AM %2B1100 References: <20001126023150.F377@welearn.com.au>
next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, Nov 26, 2000 at 02:31:53AM +1100, Sue Blake wrote:
> Is there some fairly simple way I can put a list of letters or words,
> or lines of a text file, into a random order?
That's called a shuffle, like shuffling a deck of cards. The classic
approach is Knuth's algorithm. There's a Perl module to do it if you
want to do a quick web search.
However, a really quick and ugly approach is to load the list into
memory, then just step through it swapping each item with another in a
random location. To be a little different, here is an awk(1) script
that does it,
{
line[NR] = $0;
}
END {
for(i=1;i<=NR;i++) {
pos = int(rand()*NR);
line_hold = line[i];
line[i] = line[pos];
line[pos] = line_hold;
}
for(i=1;i<=NR;i++) {
print line[i];
}
}
That is not nearly the quickest or most graceful way, but it will
work. The incremental improvements to this method are left as an
excercise for the reader. ;)
--
Crist J. Clark cjclark@alum.mit.edu
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-questions" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20001125143838.Z12190>
