En esta pregunta, solo nos enfocaremos en perder peso haciendo ejercicio, aunque todavía hay muchas maneras de perder peso.
Diferentes deportes queman diferentes cantidades de calorías.
Por ejemplo, jugar al billar durante una hora puede quemar 102 calorías [1] , mientras que jugar al baloncesto durante 15 minutos ya puede quemar 119 calorías [1] , lo que facilita la pérdida de peso jugando al baloncesto, al menos desde algunas perspectivas.
La forma exacta de sopesar la facilidad es dividiendo la cantidad de calorías quemadas por el tiempo necesario, lo que nos da el índice de facilidad (EI).
Por ejemplo, la esgrima durante 15 minutos puede quemar 85 calorías, lo que obtiene un EI de 85/15.
Se le dará una lista en este formato:
[["fencing",15,85],["billiards",60,102],["basketball",15,119]]
u otro formato que desee.
Luego, emitirá los deportes que tienen la IE más alta.
TL; DR
Dada una lista de tuplas de [name,value1,value2]
salida, name
donde value2/value1
es el más alto.
Restricciones
- Es posible que no se produce ningún número real que no es entero en el proceso.
- Es posible que no utilice cualquier fracción incorporada.
Especificaciones (especificaciones)
- Si hay más de un nombre que satisfaga el resultado, puede generar cualquier subconjunto no vacío de ellos o cualquier elemento de ellos.
- El nombre coincidirá con la expresión regular
/^[a-z]+$/
, lo que significa que solo consistirá en minúsculas alfabeto latino estándar. - La lista no estará vacía.
Caso de prueba
Entrada:
[["fencing",15,85],["billiards",60,102],["basketball",15,119]]
Salida:
basketball
Referencias
fuente
Respuestas:
Python 2, 51 bytes
Hace lo obvio de encontrar la entrada con la mayor proporción, pero evita la prohibición de flotadores al multiplicar primero el numerador por una enorme potencia de 10 dependiente de la entrada antes de dividir el piso.
Demostraré que este coeficiente es lo suficientemente grande como para hacer que la división de piso actúe como la misma diferencia que la división sin piso.
Reclamación: Si a 1 / b 1 > a 2 / b 2 , entonces floor (Na 1 / b 1 )> floor (Na 2 / b 2 ) para cualquier N≥b 1 b 2 .
Prueba: Tenga en cuenta que a 1 / b 1 - a 2 / b 2 es un múltiplo de 1 / b 1 b 2 , por lo que a 1 / b 1 - a 2 / b 2 > 0 implica que
Luego, multiplicando ambos lados por N,
Entonces, desde Na 1 / b 1 y Na 2 / b 2 difieren en al menos 1, sus respectivos pisos son distintos. ∎
Ahora, tenga en cuenta que el producto b 1 b 2 tiene una longitud de dígitos como máximo su longitud total de dígitos, que es menor que la longitud de la cadena de la entrada. Como la entrada está en la base 10, es suficiente usar 10 a la potencia de su longitud
N=10**len(`l`)
para producir un número con más dígitos que él, garantizando la condición.fuente
9
podría funcionar en lugar de10
?[('y', 10**296+1, 1), ('x', 10**296, 1)]
.JavaScript (ES6), 43 bytes
O alternativamente
Por supuesto, ordenar es excesivo para esto, pero
reduce
tomaría 46 bytes:fuente
MATL , 8 bytes
Todos los números calculados son valores enteros. Primero, se calcula el producto de los denominadores (este es un número entero). Este producto se divide por cada denominador (que también da un número entero). Cada resultado se multiplica por el numerador correspondiente. Esto da un valor entero proporcional a la fracción original.
El formato de entrada es: matriz numérica con denominadores, matriz numérica con numeradores, matriz de celdas de cadenas con nombres deportivos:
Si hay varios minimizadores, se genera el primero.
Pruébalo en línea!
fuente
Dyalog APL , 18 bytes
Solicita tiempos, luego calorías, luego nombres de actividades.
⎕
aviso (para veces)(∧/÷⊢)
LCM∧/
de los tiempos dividido por÷
los tiempos⊢
(por lo que no hay flotadores)⎕×
preguntar (por calorías) y multiplicar por ellas(⊢⍳⌈/)
en eso⊢
, obtenga la posición⍳
del valor máximo⌈/
⎕⊃⍨
mensaje (para actividades), luego elija el n º.Ejemplo de ejecución:
fuente
Brachylog , 42 bytes
Pruébalo en línea!
/
arriba es la división entera porque ambosJ*D
yI
son enteros (D
es un múltiplo deI
hecho).Explicación
Predicado principal:
Input = [["string":mins:cals]:...]
Predicado 1:
fuente
Retina ,
6462 bytesEl recuento de bytes asume la codificación ISO 8859-1.
La entrada es un deporte por línea, con el formato
value1 value2 name
. La producción es uno de los resultados máximos (si hay un empate, dará el que tenga el más grandevalue1
y si esos están empatados también si dará el lexicográfico más grandename
).Tenga en cuenta que esto es muy lento (exactamente por las mismas razones que la interrupción de Stack Exchange de ayer ). Para que se ejecute en un período de tiempo razonable, puede agregar un
\b
en frente de(0+)
(que no afectará la forma en que procesa la entrada en absoluto, pero limita severamente el retroceso de esa expresión regular). Lo hice en el siguiente enlace de prueba.Pruébalo en línea!
fuente
Python 2,
5554 bytes¡Gracias a @xnor por jugar golf en 1 byte!
Pruébelo en Ideone .
fuente
sorted
puede tomar una función de comparación de dos entradas, iba a hackear eso juntos.lambda(a,b,c),(d,e,f):b*f-c*e
.Haskell
7270 bytesUso:
fuente
Mathematica, 46 bytes
El orden de las tuplas debe ser
{value1,value2,name}
. Devuelve el conjunto completo de todos los resultados máximos.Trabajo alrededor del uso de fracciones multiplicando el numerador por el MCM de todos los
value1
s antes de la división.fuente
R,
4240 bytesToma datos en forma de un marco de datos con tipos de columna de cadena (también funciona con factores), numérico, numérico.
%/%
es la división entera.Esta es mi primera presentación, avíseme si está dentro de las reglas.
Editar: Resulta que no necesita las llaves para definir una función de una línea.
fuente
C ++ 14, 89 bytes
Función lambda:
Sin golf:
Uso:
fuente
Haskell, 46 bytes
EDITAR: Esta solución no funciona como lo señaló Damien, esto no resuelve el problema. Estoy buscando una buena solución.
fuente
s(_,(x,y))=divMod y x
es más cortos(n,(x,y))=(divMod y x,n)
g=snd.maximum.map s
también ..divMod a b < divMod c d
que no es equivalente aa/b < c/d
.divMod 19 4 < divMod 55 12
pero19/4 > 55/12
VBA Excel, 109 bytes
Invoque en una celda de hoja de cálculo que haga referencia a una tabla de actividades y parámetros:
fuente
05AB1E ,
67 bytes+1 byte para corregir mi enfoque divmod ( vea este comentario en otra respuesta ) al portar la respuesta MATL de @LuisMendo , ¡así que asegúrese de votarlo!
La entrada es similar a su respuesta: tres listas separadas, siendo una lista entera de denominadores; una lista entera de nominadores; y una lista de cadenas de nombres.
Pruébalo en línea o verifique algunos casos de prueba más .
Explicación:
fuente
Java 8, 128 bytes
fuente
Ruby, 72 bytes
Realmente pensé que esto sería más corto ...
La entrada se toma de STDIN en el formato de
name time calories
Bueno, cualquier ayuda para acortarlo es apreciada.
fuente
Clojure, 63 bytes
fuente
PHP , 98 bytes
Usó un formato de entrada más simple que el ejemplo, así:
esgrima, 15,85, billar, 60,102, baloncesto, 15,119
Pruébalo en línea!
fuente