Dans cette question, nous nous concentrerons uniquement sur la perte de poids en faisant de l'exercice, bien qu'il existe encore de nombreuses façons de perdre du poids.
Différents sports brûlent différentes quantités de calories.
Par exemple, jouer au billard pendant une heure peut brûler 102 calories [1] , tandis que jouer au basket-ball pendant 15 minutes peut déjà brûler 119 calories [1] , ce qui facilite la perte de poids en jouant au basket-ball, du moins à certains égards.
La façon exacte de peser la facilité est de diviser la quantité de calories brûlées par le temps nécessaire, ce qui nous donne l'indice de facilité (IE).
Par exemple, une clôture de 15 minutes peut brûler 85 calories, ce qui donne un IE de 85/15.
Vous recevrez une liste dans ce format:
[["fencing",15,85],["billiards",60,102],["basketball",15,119]]
ou tout autre format que vous souhaitez.
Ensuite, vous produirez les sports qui ont le plus haut EI.
TL; DR
Étant donné une liste de tuples [name,value1,value2]
sortie l' name
où value2/value1
est le plus élevé.
Contraintes
- Vous ne pouvez pas produire de nombre réel qui n'est pas entier dans le processus.
- Vous ne pouvez pas utiliser de fraction intégrée.
Spécifications (spécifications)
- S'il y a plus d'un nom qui satisfait le résultat, vous pouvez sortir n'importe quel sous-ensemble non vide d'entre eux ou n'importe quel élément d'entre eux.
- Le nom correspondra à l'expression régulière
/^[a-z]+$/
, ce qui signifie qu'il ne consistera qu'en alphabet latin standard en minuscules. - La liste ne sera pas vide.
Cas de test
Contribution:
[["fencing",15,85],["billiards",60,102],["basketball",15,119]]
Production:
basketball
Les références
la source
Réponses:
Python 2, 51 octets
Fait la chose évidente de trouver l'entrée avec le plus grand rapport, mais contourne l'interdiction des flotteurs en multipliant d'abord le numérateur par une énorme puissance dépendante de l'entrée de 10 avant de diviser le plancher.
Je prouverai que ce coefficient est assez grand pour que la division par le sol agisse de la même manière que la division non par le sol.
Allégation: si a 1 / b 1 > a 2 / b 2 , alors étage (Na 1 / b 1 )> étage (Na 2 / b 2 ) pour tout N≥b 1 b 2 .
Preuve: Notez qu'un a 1 / b 1 - a 2 / b 2 est un multiple de 1 / b 1 b 2 , donc a 1 / b 1 - a 2 / b 2 > 0 implique que
Ensuite, en multipliant les deux côtés par N,
Ainsi, puisque Na 1 / b 1 et Na 2 / b 2 diffèrent d'au moins 1, leurs étages respectifs sont distincts. ∎
Maintenant, notez que le produit b 1 b 2 a une longueur de chiffres au plus égale à leur longueur totale de chiffres, qui est inférieure à la longueur de chaîne de l'entrée. L'entrée étant en base 10, il suffit d'utiliser 10 à la puissance de sa longueur
N=10**len(`l`)
pour produire un nombre à plus de chiffres qu'elle, garantissant la condition.la source
9
pourrait fonctionner au lieu de10
?[('y', 10**296+1, 1), ('x', 10**296, 1)]
.JavaScript (ES6), 43 octets
Ou bien
Le tri est bien sûr exagéré pour cela, mais
reduce
prendrait 46 octets:la source
MATL , 8 octets
Tous les nombres calculés sont des valeurs entières. Tout d'abord, le produit des dénominateurs est calculé (il s'agit d'un entier). Ce produit est divisé par chaque dénominateur (ce qui donne également un entier). Chaque résultat est ensuite multiplié par le numérateur correspondant. Cela donne une valeur entière proportionnelle à la fraction d'origine.
Le format d'entrée est: tableau numérique avec dénominateurs, tableau numérique avec numérateurs, tableau de cellules de chaînes avec des noms de sport:
S'il y a plusieurs minimiseurs, le premier est émis.
Essayez-le en ligne!
la source
Dyalog APL , 18 octets
Demande les heures, puis les calories, puis les noms des activités.
⎕
invite (pour les temps)(∧/÷⊢)
LCM∧/
des temps divisé par÷
les temps⊢
(donc pas de flotteurs)⎕×
invite (pour les calories) et multipliez par eux(⊢⍳⌈/)
en ce que⊢
, obtenir la position⍳
de la valeur maximale⌈/
⎕⊃⍨
invite (pour les activités), puis choisissez le n ème.Exemple d'exécution:
la source
Brachylog , 42 octets
Essayez-le en ligne!
/
ci-dessus est une division entière car les deuxJ*D
etI
sont des entiers (D
est un multiple deI
fait).Explication
Prédicat principal:
Input = [["string":mins:cals]:...]
Prédicat 1:
la source
Retina ,
6462 octetsLe nombre d'octets suppose un codage ISO 8859-1.
L'entrée est un sport par ligne, avec le format
value1 value2 name
. La sortie est l'un des résultats maximaux (s'il y a un lien, cela donnera celui avec le plus grandvalue1
et si ceux-ci sont également liés si le plus grand sera lexicographiquementname
).Notez que cela est super lent (pour les mêmes raisons que la panne d'hier Stack Exchange d'hier ). Pour le faire fonctionner dans un délai raisonnable, vous pouvez ajouter un
\b
devant le(0+)
(ce qui n'affectera pas du tout la façon dont il traite l'entrée mais limite sévèrement le retour en arrière de cette expression régulière). Je l'ai fait dans le lien de test ci-dessous.Essayez-le en ligne!
la source
Python 2,
5554 octetsMerci à @xnor d'avoir joué au golf sur 1 octet!
Testez-le sur Ideone .
la source
sorted
pouvait prendre une fonction de comparateur à deux entrées, j'allais pirater ça ensemble.lambda(a,b,c),(d,e,f):b*f-c*e
.Haskell
7270 octetsUtilisation:
la source
Mathematica, 46 octets
L'ordre des tuples doit être
{value1,value2,name}
. Renvoie l'ensemble complet de tous les résultats maximaux.Je contourne l'utilisation des fractions en multipliant le numérateur par le LCM de tous les
value1
s avant la division.la source
R,
4240 octetsPrend l'entrée sous la forme d'un bloc de données avec des types de colonne de chaîne (cela fonctionne également avec des facteurs), numérique, numérique.
%/%
est une division entière.Ceci est ma première soumission, faites-moi savoir si cela est conforme aux règles.
Modifier: il s'avère que vous n'avez pas besoin des accolades pour définir une fonction sur une ligne.
la source
C ++ 14, 89 octets
Fonction lambda:
Non golfé:
Usage:
la source
Haskell, 46 octets
EDIT: Cette solution ne fonctionne pas comme l'a souligné Damien, cela ne résout pas le problème. Je cherche une bonne solution.
la source
s(_,(x,y))=divMod y x
est plus courts(n,(x,y))=(divMod y x,n)
g=snd.maximum.map s
aussi ..divMod a b < divMod c d
n'est pas équivalent àa/b < c/d
.divMod 19 4 < divMod 55 12
mais19/4 > 55/12
VBA Excel, 109 octets
Appelez dans une feuille de calcul référençant un tableau d'activités et de paramètres:
la source
05AB1E ,
67 octets+1 octet pour corriger mon approche divmod ( voir ce commentaire sur une autre réponse ) en portant la réponse MATL de @LuisMendo , alors assurez-vous de lui donner un vote positif!
L'entrée est similaire à sa réponse: trois listes séparées, étant une liste entière de dénominateurs; une liste entière de proposants; et une liste de chaînes de noms.
Essayez-le en ligne ou vérifiez d'autres cas de test .
Explication:
la source
Java 8, 128 octets
la source
Rubis, 72 octets
Je pensais vraiment que ce serait plus court ...
L'entrée provient de STDIN au format
name time calories
Eh bien, toute aide pour la raccourcir est appréciée.
la source
Clojure, 63 octets
la source
PHP , 98 octets
Utilisé un format d'entrée plus simple que l'exemple, comme ceci:
escrime, 15,85, billard, 60 102, basket-ball, 15 119
Essayez-le en ligne!
la source