En el ejercicio de clicar números hemos generado un array aleatorio y para ello hemos visto diferentes formas:
1.- Generar un número aleatorio e introducirlo en el array si no está, si ya está buscar otro número aleatorio.
2.- Crear un array correlativo y ordenarlo (sort) con random
3.- Utilizar el algoritmo Fisher-Yates (https://dev.to/codebubb/how-to-shuffle-an-array-in-javascript-2ikj)
4.- Otros, como el Durstenfeld, que mejora el Fisher Yates (este y más aquí: https://stackoverflow.com/questions/2450954/how-to-randomize-shuffle-a-javascript-array)
Nos gustaría saber cual es más rápido y vamos a realizar un benchmark de estas 4 (o más) funciones. Definiremos una función a la que le pasamos el tamaño del array y nos devolverá un array desordenado de ese tamaño.
Una vez tengamos las funciones mediremos el tiempo, para ello ejecutaremos 1000 veces cada función para tamaños de 100, 1000, 10000 y 100000 elementos. Miraremos cual es la función más rápida para cada uno de estos tamaños.
Con el conocimiento adquirido crear una clase benchmark que en el constructor le pasemos como parámetros la función a evaluar y un array con el número de elementos (por defecto los mismos que antes). También tendrá una propiedad ‘times’ que por defecto vale 1000 pero que tendrá getter y setter. Esta clase tendrá un método getDurations que nos devolverá el resultado de ejecutar ‘times’ veces la función para cada uno de los tamaños que le pasamos por el array.