Aprenda a resolver fácilmente una pregunta de entrevista de programación que solicita calcular una aproximación de PI con JavaScript.

En los últimos días resolví otra de esas tediosas tareas de entrevistas cuando solicitas un nuevo trabajo. En este caso, el ejercicio fue nuevo para mí y es el siguiente. En este ejercicio calcularemos una aproximación de π (Pi).

La técnica es la siguiente: Tome un punto aleatorio P en las coordenadas X, Y tal que 0 <= x <= 10 <= y <= 1. Si x2 + y2 <= 1, entonces el punto está dentro del cuarto de disco de radio 1; de lo contrario, el punto está fuera.

An example using 33 random points
Un ejemplo usando 33 puntos aleatorios

Sabemos que la probabilidad de que el punto esté dentro del cuarto de disco es igual a π/4Debes escribir el método approx(pts) que utilizará la matriz de puntos pts para devolver una aproximación del número Pi (π).

  • Cada elemento en pts es un punto.
  • Un punto está representado por una matriz que contiene exactamente 2 números, respectivamente xy tales que 0 <= x <= 10 <= y <= 1.
  • pts nunca es nulo y siempre contiene al menos un elemento.

En este artículo, compartiré con ustedes una posible solución para este problema usando una simulación de Monte Carlo con JavaScript.

Solución

Entonces, comencemos con lo básico. El ejercicio menciona la approxfunción que necesitamos crear y recibe el ptsargumento que se genera aleatoriamente, específicamente por un código como el siguiente:

let pts = [];

for(let i = 0;i < 10000; i++){
    let x = Math.random();
    let y = Math.random();

    pts.push([x, y]);
}

// pts contiene una matriz como la siguiente:
// Donde el índice 0 de la matriz es X
//       y el índice 1 de la matriz es Y
//[
//    [
//        0.6265471354441587,
//        0.019122543122902957
//    ],
///   [
//        0.9676467567764127,
//        0.9941570823210109
//    ],
//    [
//        0.828985078753246,
//        0.34295195222317565
//    ],
//
//...
//

console.log(pts);

Entonces, ese es el argumento que recibirá la función approx, necesitamos trabajar con estos datos. Ahora que entendemos esto, necesitamos encontrar una manera de calcular el valor de Pi. La mayoría de los desarrolladores verán esta tarea un poco confusa y problemática, sin embargo, si investiga lo suficiente, encontrará la solución. En este caso, es posible calcular el valor de Pi usando números aleatorios, usando una simulación de Monte Carlo .

La teoría es bastante impresionante y se necesita un poco de tiempo para comprenderla por completo, por lo que realmente te recomiendo que leas el artículo para obtener una explicación detallada.

Sabemos que la probabilidad de que el punto esté dentro del cuarto de disco es igual a π/4, por lo que a  partir de los datos que tenemos de los números aleatorios, necesitamos determinar el número de puntos que satisfacen la condición y el número de puntos del conjunto de datos. . x2 + y2 <= 1

Pi va a ser igual a 4 multiplicado por el cociente de la división entre el número de puntos que satisfacen la condición y el número de puntos del conjunto de datos, proporcionando un valor aproximado de PI, por ejemplo con 8 de los 10 puntos, obtendrá un valor cercano a PI:

Monte Carlo Simulation, Find value of Pi

Para la implementación en JavaScript, considerando los valores de PTS que en este caso son 10.000 valores, la función que resuelve este problema es la siguiente:

function approx(pts){
    let pointsThatSatisfyTheFormula = [];

    for(let i = 0; i < pts.length;i++){
        let point = pts[i];
        let x = point[0];
        let y = point[1];

        if(Math.pow(x, 2) + Math.pow(y, 2) <= 1){
            pointsThatSatisfyTheFormula.push(point);
        }
    }

    let approximateValueOfPi = 4 * (pointsThatSatisfyTheFormula.length / pts.length);

    return approximateValueOfPi;
}

Al ejecutar la función approx, proporcionar un conjunto de datos como se especifica en el problema siempre devolverá un valor numérico muy cercano a PI.

Que te diviertas ❤️!


Interesado en la programación desde los 14 años, Carlos es un programador autodidacta, fundador y autor de la mayoría de los artículos de Our Code World.

Conviertete en un programador más sociable

Patrocinadores