random k-sample of a file

Russell Lewis webmaster at villagersonline.com
Thu Oct 9 15:58:42 PDT 2008


BEGIN CODE
char[][] choose(int k)
{
   char[][] bufs; bufs.length = k;

   for(int i=0; i<k; i++)
     bufs[i] = ReadALine();

   while(!feof(stdin))
   {
     int i = random(0,k);
     bufs[i] = ReadALine();
   }

   return bufs;
}

END CODE

Andrei Alexandrescu wrote:
> I just ran across a nice little problem that I wanted to share as an 
> exercise for the interested in futile pastimes.
> 
> The challenge, should you accept it, is to write a program that given a 
> number k and a file, outputs k lines picked uniformly at random from the 
> file. (If the file has less than k lines, it should all be output.) The 
> file's size is unbounded so loading it in memory is not an option. How'd 
> you go about it?
> 
> 
> Andrei



More information about the Digitalmars-d mailing list