freeCodeCamp/curriculum/challenges/spanish/08-coding-interview-prep/project-euler/problem-352-blood-tests.spa...

94 lines
4.1 KiB
Markdown
Raw Normal View History

---
id: 5
localeTitle: 5900f4cd1000cf542c50ffdf
challengeType: 5
title: 'Problem 352: Blood tests'
---
## Description
<section id='description'>
Cada una de las 25 ovejas en un rebaño debe ser examinada para detectar un virus raro, que se sabe que afecta al 2% de la población de ovejas.
Existe una prueba de PCR precisa y extremadamente sensible para las muestras de sangre, que produce un resultado positivo / negativo claro, pero requiere mucho tiempo y es costoso.
Debido al alto costo, el veterinario a cargo sugiere que en lugar de realizar 25 pruebas separadas, se puede usar el siguiente procedimiento:
Las ovejas se dividen en 5 grupos de 5 ovejas en cada grupo.
Para cada grupo, las 5 muestras se mezclan y se realiza una única prueba. Entonces,
Si el resultado es negativo, todas las ovejas de ese grupo se consideran libres de virus.
Si el resultado es positivo, se realizarán 5 pruebas adicionales (una prueba por separado para cada animal) para determinar la (s) persona (s) afectada (s).
Dado que la probabilidad de infección para un animal específico es solo de 0.02, la primera prueba (en las muestras agrupadas) para cada grupo será:
Negativo (y no se necesitan más pruebas) con una probabilidad de 0.985 = 0.9039207968.
Positivo (se necesitan 5 pruebas adicionales) con probabilidad 1 - 0.9039207968 = 0.0960792032.
Por lo tanto, el número esperado de pruebas para cada grupo es 1 + 0.0960792032 × 5 = 1.480396016.
En consecuencia, los 5 grupos pueden evaluarse utilizando un promedio de solo 1.480396016 × 5 = 7.40198008 pruebas, lo que representa un gran ahorro de más del 70%.
A pesar de que el esquema que acabamos de describir parece ser muy eficiente, aún puede mejorarse considerablemente (siempre suponiendo que la prueba sea lo suficientemente sensible y que no haya efectos adversos causados por la mezcla de diferentes muestras). Por ejemplo:
Podemos comenzar realizando una prueba en una mezcla de las 25 muestras. Se puede verificar que en aproximadamente el 60,35% de los casos esta prueba será negativa, por lo que no se necesitarán más pruebas. Solo se requerirán pruebas adicionales para el 39,65% restante de los casos.
Si sabemos que al menos un animal en un grupo de 5 está infectado y las primeras 4 pruebas individuales resultan negativas, no hay necesidad de realizar una prueba en el quinto animal (sabemos que debe estar infectado).
Podemos probar un número diferente de grupos / número diferente de animales en cada grupo, ajustando esos números en cada nivel para que el número total esperado de pruebas se minimice.
Para simplificar el amplio rango de posibilidades, hay una restricción que ponemos al diseñar el esquema de prueba más rentable: cada vez que comencemos con una muestra mixta, todas las ovejas que contribuyen a esa muestra deben ser examinadas completamente (es decir, un veredicto). de infectados / sin virus se debe alcanzar para todos ellos) antes de comenzar a examinar cualquier otro animal.
Para el ejemplo actual, resulta que el esquema de prueba más rentable (lo llamaremos la estrategia óptima) requiere un promedio de solo 4.155452 pruebas.
Utilizando la estrategia óptima, permita que T (s, p) represente el número promedio de pruebas necesarias para detectar un rebaño de ovejas en busca de un virus con probabilidad p de estar presente en cualquier individuo.
Así, redondeado a seis lugares decimales, T (25, 0.02) = 4.155452 y T (25, 0.10) = 12.702124.
Encuentre ΣT (10000, p) para p = 0.01, 0.02, 0.03, ... 0.50.
Da tu respuesta redondeada a seis lugares decimales.
</section>
## Instructions
<section id='instructions'>
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>euler352()</code> debe devolver 378563.260589.
testString: 'assert.strictEqual(euler352(), 378563.260589, "<code>euler352()</code> should return 378563.260589.");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
function euler352() {
// Good luck!
return true;
}
euler352();
```
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
```
</section>