La puesta en marcha:
Una red social informa el número de votos que tiene una publicación de dos maneras: el número de votos a favor netos ( votos a favor totales - votos a favor totales) y el % de votos que fueron votos a favor , redondeados al número entero más cercano (.5 redondeos ). El número de votos a favor netos es un número entero (no necesariamente positivo), y se garantiza que el segundo sea un número entero entre 0 y +100 inclusive. La cantidad de votos a favor y la cantidad de votos a la baja son enteros de cero o positivos de 32 bits (puede especificar con signo o sin signo). Suponga que si hay cero votos totales, el porcentaje de votos votados se informa como cero.
El reto:
Dados estos dos enteros (votos a favor netos y% de votos a favor), ¿cuál es el programa más corto que puede escribir que determina el número más bajo de votos a favor totales que recibió la publicación, con todas las restricciones anteriores satisfechas?
Las restricciones de entrada están garantizadas. Si la entrada no satisface las restricciones anteriores, el comportamiento del programa depende de usted. Felicitaciones adicionales si no entra en un bucle infinito o si no se bloquea. Considere devolver un número negativo si desea más orientación.
Reglas generales:
- Este es el código de golf , por lo que gana la solución válida más corta (medida en bytes).
- No permita que los lenguajes de code-golf lo desanimen a publicar respuestas con lenguajes que no sean codegolfing. Trate de encontrar una respuesta lo más breve posible para 'cualquier' lenguaje de programación. Felicitaciones adicionales para un lenguaje web del lado del cliente como Javascript.
- Si tiene soluciones interesantes en varios idiomas, publíquelas por separado .
- Se aplican reglas estándar para su respuesta, por lo que puede usar STDIN / STDOUT, funciones / método con los parámetros adecuados y el tipo de retorno, o programas completos. Tu llamada.
- Las lagunas predeterminadas están prohibidas.
- Si es posible, agregue un enlace con una prueba para su código.
- Además, agregue una explicación de cómo funciona el código.
- Tenga en cuenta que si está realizando una operación de división de enteros que se trunca (por ejemplo, 20/3 = 6) en lugar de rondas , eso podría no ser completamente correcto.
- Se aceptan casos de prueba adicionales que exploren los casos límite en las restricciones anteriores.
- Si bien el tipo de retorno esperado es numérico, se puede usar "falso" booleano en lugar de 0 .
Ejemplos de casos de prueba:
La primera columna es solo un número de referencia incluido para facilitar la discusión.
ref net %up answer
1 0 0 => 0
2 -5 0 => 0
3 -4 17 => 1
4 -3 29 => 2
5 -2 38 => 3
6 -1 44 => 4
7 0 50 => 1
8 5 100 => 5
9 4 83 => 5
10 3 71 => 5
11 2 63 => 5
12 1 56 => 5
13 1234 100 => 1234
14 800 90 => 894 (tip: don't refer to this as the "last test case;" others may be added.)
1000, 100
. ¿Puedes confirmar que la respuesta esperada es1000
?Respuestas:
JavaScript (ES6), 47 bytes
Toma información en la sintaxis de curry
(n)(p)
, donde n es el número de votos a favor netos y p es el porcentaje de votos a favor. Puede volverfalse
por0
.Pruébalo en línea!
Comentado
Casos de borde
Sea F n (u) = u / (u - n / 2) * 50 + 0.5
Si u = 0 y n = 0 , entonces F n (u) = NaN y F n (u) XOR p = p . Entonces, devolvemos u = 0 si n = p = 0 (primera iteración del primer caso de prueba) o continuamos con la recursividad si p! = 0 (primera iteración del séptimo caso de prueba).
Si u> 0 y u = n / 2 , entonces F n (u) = + Infinity y - de nuevo - F n (u) XOR p = p . A menos que p = 0 , simplemente continuamos con la siguiente iteración. (Esto sucede en los casos de prueba 9 y 11).
fuente
Stax , 17 bytes
Ejecutar y depurarlo
Esta es la fuerza bruta. Comienza con 0 para los votos a favor del candidato y aumenta hasta que satisface la fórmula.
Desempaquetado, sin golf y comentado, se ve así.
Ejecute este
fuente
Limpias ,
114107104 bytesPruébalo en línea!
Define la función
$ :: Int Int -> Real
, donde los argumentos son enteros con signo y el valor de retorno es un flotante de doble precisión exactamente representable por un entero con signo de 32 bits.Comprueba cada valor de
c
en la ecuaciónb=-cd/(d+1)
para encontrar un resultadob
satisfactorioa+c=b
yb/(b+c)=d
, dado que losc
resultados más pequeños son los más pequeñosb
, toma el primer elemento del conjunto de todas las soluciones.fuente
05AB1E , 13 bytes [ligeramente roto]
Pruébalo en línea!
Explicación:
Para resolver esto, asumí las entradas a, by el resultado esperado x. Dada la información en la configuración, eso me dio la ecuación:
Reorganizar para x da
El único caso de prueba para el que esto no funciona es 0, 50, simplemente codifiqué para verificar esto.
fuente
Ir 1.10, 154 bytes
Pruébalo en Go Playground! (TIO ejecuta Go 1.9, que no tiene matemática. Redonda)
Versión sin golf
En aras de agregar una explicación, la fórmula anterior para r puede derivarse resolviendo simultáneamente
n=v-d
yu = 100 * v/(v + d)
para v, donde v y d son el número de votos a favor y en contra, respectivamente. La fórmula derivada no está definida para v = 50, por lo que tenemos que manejar ese caso (lo que hacemos con la primera instrucción if).fuente