import java.util.Random;
import java.util.Collections;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.lang.*;
/**
 * Runs a little benchmarking script in Java, and outputs the number of milliseconds.
 *
 * @author Kyle Burke
 */
public class BenchmarkJava {

    private static final int NUM_ROUNDS = 11;
    private static final long BENCHMARK_N = 110053500;

    public static void main(String[] args) {
        long result = benchmark(false);
        
        System.out.println(result);
    }
    
    public static long benchmark(boolean useNanos) {
        int n = NUM_ROUNDS;
        List<Long> a = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            long t = benchmarkOnce(useNanos);
            a.add(t);
        }
        Collections.sort(a);
        long median = a.get(a.size() / 2);
        //System.out.println("Median benchmark run: " + median);
        
        return median;
    }
    
    //run the benchmark once
    private static long benchmarkOnce(boolean useNanos) {
        long startMillis;
        if (useNanos) {
            startMillis = System.nanoTime() / 1000000;
        } else {
            startMillis = System.currentTimeMillis();
        }
        Random random = new Random();
        long total = 0;
        for (long i = 0; i < BENCHMARK_N; i++) {
            total += (i * random.nextInt());
        }
        long stopMillis;
        if (useNanos) {
            stopMillis = System.nanoTime() / 1000000;
        } else {
            stopMillis = System.currentTimeMillis();
        }
        long elapsed = stopMillis - startMillis;
        //System.out.println("The benchmark ran in " + elapsed + " milliseconds.");
        return elapsed;
    
    }
    


}  //end of BenchmarkJava