Nesta questão, focaremos apenas a perda de peso fazendo exercícios, embora ainda haja muitas maneiras de perder peso.
Esportes diferentes queimam diferentes quantidades de calorias.
Por exemplo, jogar bilhar por uma hora pode queimar 102 calorias [1] , enquanto jogar basquete por 15 minutos já pode queimar 119 calorias [1] , o que facilita a perda de peso jogando basquete, pelo menos de algumas perspectivas.
A maneira exata de avaliar a facilidade é dividir a quantidade de calorias queimadas pelo tempo necessário, o que nos fornece o índice de facilidade (IE).
Por exemplo, cercar por 15 minutos pode queimar 85 calorias, o que gera um IE de 85/15.
Você receberá uma lista neste formato:
[["fencing",15,85],["billiards",60,102],["basketball",15,119]]
ou outro formato que você deseja.
Em seguida, você exibirá os esportes com maior IE.
TL; DR
Dada uma lista de tuplas [name,value1,value2]
de saída name
, onde value2/value1
é o mais alto.
Restrições
- Você não pode produzir nenhum número real que não seja um número inteiro no processo.
- Você não pode usar nenhuma fração incorporada.
Especificações (Especificações)
- Se houver mais de um nome que satisfaça o resultado, você poderá gerar qualquer subconjunto não vazio deles ou qualquer elemento deles.
- O nome corresponderá ao regex
/^[a-z]+$/
, o que significa que ele consistirá apenas em alfabeto latino padrão em minúsculas. - A lista não estará vazia.
Caso de teste
Entrada:
[["fencing",15,85],["billiards",60,102],["basketball",15,119]]
Resultado:
basketball
Referências
fonte
Respostas:
Python 2, 51 bytes
Faz o óbvio de encontrar a entrada com a maior proporção, mas evita a proibição de carros alegóricos, primeiro multiplicando o numerador por uma enorme potência dependente de entrada de 10 antes da divisão do piso.
Vou provar que esse coeficiente é grande o suficiente para fazer com que a divisão de piso atue a mesma diferença que a divisão sem piso.
Reivindicação: Se a 1 / b 1 > a 2 / b 2 , então andar (Na 1 / b 1 )> andar (Na 2 / b 2 ) para qualquer N≥b 1 b 2 .
Prova: Observe que a 1 / b 1 - a 2 / b 2 é um múltiplo de 1 / b 1 b 2 , então a 1 / b 1 - a 2 / b 2 > 0 implica que
Então, multiplicando os dois lados por N,
Portanto, como Na 1 / b 1 e Na 2 / b 2 diferem em pelo menos 1, seus respectivos pisos são distintos. ∎
Agora, observe que o produto b 1 b 2 tem comprimento de dígito no máximo seu comprimento total, que é menor que o comprimento da string da entrada. Como a entrada está na base 10, basta usar 10 com a potência de seu comprimento
N=10**len(`l`)
para produzir um número com mais dígitos que ele, garantindo a condição.fonte
9
pode funcionar em vez de10
?[('y', 10**296+1, 1), ('x', 10**296, 1)]
.JavaScript (ES6), 43 bytes
Ou alternativamente
A classificação é obviamente um exagero para isso, mas
reduce
levaria 46 bytes:fonte
MATL , 8 bytes
Todos os números calculados são valores inteiros. Primeiro, o produto dos denominadores é calculado (este é um número inteiro). Este produto é dividido por cada denominador (que também fornece um número inteiro). Cada resultado é então multiplicado pelo numerador correspondente. Isso fornece um valor inteiro proporcional à fração original.
O formato de entrada é: matriz numérica com denominadores, matriz numérica com numeradores, matriz de células de cadeias com nomes de esporte:
Se houver vários minimizadores, o primeiro é emitido.
Experimente online!
fonte
Dyalog APL , 18 bytes
Solicita horários, calorias e nomes de atividades.
⎕
prompt (por vezes)(∧/÷⊢)
LCM∧/
dos tempos divididos pelos÷
tempos⊢
(portanto, não flutua)⎕×
prompt (para calorias) e multiplique por eles(⊢⍳⌈/)
nisso⊢
, obtenha a posição⍳
do valor máximo⌈/
⎕⊃⍨
prompt (para atividades) e escolha o n .Exemplo de execução:
fonte
Braquilog , 42 bytes
Experimente online!
/
acima é a divisão inteira porque ambosJ*D
eI
são inteiros (D
é um múltiplo deI
fato).Explicação
Predicado principal:
Input = [["string":mins:cals]:...]
Predicado 1:
fonte
Retina ,
6462 bytesA contagem de bytes assume a codificação ISO 8859-1.
A entrada é um esporte por linha, com o formato
value1 value2 name
. A saída é um dos resultados máximos (se houver um empate, ele dará o quevalue1
tiver maior e, se esses também estiverem empatados, se o lexicograficamente for maiorname
).Observe que isso é super lento (exatamente pelos mesmos motivos que a interrupção do Stack Exchange de ontem ). Para executá-lo em um período de tempo razoável, você pode adicionar um
\b
na frente do(0+)
(que não afeta a maneira como processa a entrada, mas limita severamente o retorno do regex). Eu fiz isso no link de teste abaixo.Experimente online!
fonte
Python 2,
5554 bytesGraças a @xnor por jogar fora um byte!
Teste em Ideone .
fonte
sorted
pode ter uma função de comparador de duas entradas, eu iria invadir isso juntos.lambda(a,b,c),(d,e,f):b*f-c*e
.Haskell
7270 bytesUso:
fonte
Mathematica, 46 bytes
A ordem das tuplas deve ser
{value1,value2,name}
. Retorna o conjunto completo de todos os resultados máximos.Eu trabalho em torno do uso de frações multiplicando o numerador pelo LCM de todos os
value1
s antes da divisão.fonte
R,
4240 bytesRecebe entrada na forma de um quadro de dados com tipos de coluna de sequência (também funciona com fatores), numérico, numérico.
%/%
é a divisão inteira.Esta é a minha primeira submissão, deixe-me saber se está dentro das regras.
Editar: Acontece que você não precisa de chaves para definir uma função de uma linha.
fonte
C ++ 14, 89 bytes
Função Lambda:
Ungolfed:
Uso:
fonte
Haskell, 46 bytes
Edição: Esta solução não funciona como apontado por Damien isso não resolve o problema. Estou procurando uma boa solução.
fonte
s(_,(x,y))=divMod y x
é mais curtos(n,(x,y))=(divMod y x,n)
g=snd.maximum.map s
também ..divMod a b < divMod c d
não é equivalentea/b < c/d
.divMod 19 4 < divMod 55 12
mas19/4 > 55/12
Excel VBA, 109 bytes
Chame na célula da planilha referenciando uma tabela de atividades e parâmetros:
fonte
05AB1E ,
67 bytes1 byte para bugfix minha abordagem DIVMOD ( veja este comentário em outra resposta ) por portar @LuisMendo resposta MATL 's , por isso, certifique-se de upvote-lo!
A entrada é semelhante à sua resposta: três listas separadas, sendo uma lista inteira de denominadores; uma lista inteira de nominadores; e uma lista de cadeias de nomes.
Experimente online ou verifique mais alguns casos de teste .
Explicação:
fonte
Java 8, 128 bytes
fonte
Ruby, 72 bytes
Eu realmente pensei que isso seria mais curto ...
A entrada é retirada do STDIN no formato de
name time calories
Bem, qualquer ajuda para encurtá-lo é apreciada.
fonte
Clojure, 63 bytes
fonte
PHP , 98 bytes
Utilizou um formato de entrada mais simples que o exemplo, assim:
esgrima, 15,85, bilhar, 60.102, basquete, 15.119
Experimente online!
fonte