// produce a list of random integers
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

// create a "random" seed for random number generation
int make_seed() {
  // use current time in second * processor time
  time_t now = time(NULL);
  clock_t ticks = clock();
  
  return now * ticks;
}

int main(int argc, char * argv[]) {
  // usage statement
  if (argc < 4) {
    printf("Usage: ./randomInts howMany min max [seed]\n");
    printf("  randomInts will choose howMany random integers, which are each\n"
	   "  between min and max (inclusive).  If a seed is given as input\n"
	   "  it is used to seed the pseudorandom number generator (so you can\n"
	   "  use the same seed and get the same \"random\" list each time you\n"
	   "  run the program.  If no seed given, then a seed is used based on\n"
	   "  the current time in seconds and the # clock cycles elapsed in the program\n"
	   "  generating the numbers.  Note - srand and rand from the C standard library\n"
	   "  are used for generating the pseudorandom #'s.\n\n");
    exit(0);
  }

  // get args 
  int howMany = atoi(argv[1]),
    min = atoi(argv[2]),
    max = atoi(argv[3]);

  // seed the random number generator
  int seed;
  if (argc > 4) seed = atoi(argv[4]);
  else seed = make_seed();
  srand(seed);

  for(int i=0; i < howMany; i++) {
    // pseudorandom int
    int r = rand();

    // put it in the desired range
    // to start, r is between 0 and RAND_MAX
    r = r % (max-min+1); // max-min+1 possible values
    if (min > 0)
      r -= min; // minimum possible is min now
    else
      r += min;
    printf("%d\n", r);
  }
  return 0;
}