As engrenagens transferem uma quantidade diferente de velocidades, dependendo do tamanho da engrenagem engrenada.
Jack tem uma máquina que gira um trem de engrenagens. mas você não sabe a velocidade da última marcha.
Felizmente, você é um ótimo jogador de código, para ajudá-lo!
Então, o que eu deveria fazer?
Cada engrenagem é representada por 2 números, o raio da engrenagem interna e o raio das engrenagens externas.
Se a engrenagem A
é [a,b]
e a engrenagem B
é [c,d]
, então a relação entre a velocidade de A
e a velocidade de B
seria c:b
.
Dada uma lista de marchas (lista de 2 tuplas), produza a velocidade da última marcha.
Você pode assumir que a velocidade da primeira marcha é 1
.
Exemplo elaborado
Digamos que nossa entrada seja [[6,12],[3,10],[5,8]]
.
A primeira marcha [6,12]
,, teria uma velocidade de 1
.
Então, a segunda marcha [3,10]
,, teria uma velocidade de 1*12/3 = 4
.
Então, a última marcha [5,8]
,, teria uma velocidade de 4*10/5 = 8
.
Casos de teste
input output
[[1,1],[2,2]] 0.5 (1/2)
[[1,2],[1,2],[1,2]] 4 (2/1*2/1)
[[6,12],[3,10],[5,8]] 8 (12/3*10/5)
Regras
Aplicam-se regras básicas de golfe com código .
[6,12,3,10,5,8]
. apenas mencione se você quiser usá-lo.Respostas:
Haskell, 19 bytes
Dada uma lista simples como
[a,b,c,d,e,f]
,tail.init
remove os primeiros e últimos elementos, e, em seguida,foldr1(/)
cria uma cascata de divisõesb/(c/(d/e))))
que trabalha para fora para alternada*
e/
:b/c*d/e
.fonte
Geléia , 6 bytes
Suíte de teste.
fonte
Geléia , 7 bytes
Experimente online! ou verifique todos os casos de teste .
fonte
C,
1151231218380767170 bytes4 bytes salvos graças a @LeakyNun!
Meu primeiro golfe, provavelmente não o melhor.
Toma uma matriz e tamanho.
Ungolfed:
fonte
j;float r=1;float f(int a[]){for(;j<sizeof a;)r=r*a[j++]/a[j++];return r;}
(não testada)JavaScript (ES6), 44 bytes
37 bytes para uma matriz nivelada:
Ao contrário de (por exemplo) Haskell,
reduceRight
é um nome tão longo que é mais barato parareduce
o lado errado e assume o recíproco no final.fonte
Pitão, 8 bytes
Suíte de teste.
fonte
J, 8 bytes
Experimente online!
Uso
onde
>>
está STDIN e<<
STDOUT.Explicação
"Reduzir" os
J
padrões da direita para a esquerda, que decolaram alguns bytes: pfonte
Mathematica, 26 bytes
Uma função sem nome que pega uma lista plana e uniforme de valores e retorna o resultado exato (como uma fração, se necessário).
Isso usa a mesma abordagem que algumas outras respostas da divisão de dobras na lista invertida (após remover o primeiro e o último elemento).
fonte
MATL , 9 bytes
O formato de entrada é um destes:
EDIT (30 de julho de 2016): o código vinculado substitui
9L
por1L
para se adaptar às alterações recentes no idioma.Experimente online!
Explicação
fonte
JavaScript, 54 bytes
Uso
Ungolfed
Obviamente, a variante do golfe é um pouco diferente. Com
.map()
, ele substitui o primeiro valor da matriz pela velocidade após a segunda roda, o segundo valor pela velocidade da terceira roda e o último valor e o segundo último valor pela velocidade da última roda. Então, apenas pegamos o último elemento com.pop()
.fonte
PHP,
807969 bytesrecebe entrada do parâmetro GET
a
; imprime resultadoinicializa
$r
com 1, depois faz o loop da penúltima penúltima para multiplicar com o primeiro elemento do anterior e dividir pelo segundo elemento da tupla atual.Agradeço a Jörg por me lembrar
$_GET
; que economizou 7 bytes.versão mais elegante, 88 bytes:
fonte
<?for($r=$i=1;$i<count($a=$_GET[a]);)$r*=$a[$i-1][1]/$a[$i++][0];echo$r;
72 BytesJavaScript,
595856 bytesExplicação
Reduza a matriz e multiplique por cada segundo valor e divida por cada primeiro valor. Então, para
[[6,12],[3,10],[5,8]]
isso acontece12/6*10/3*8/5
. Obviamente, o cálculo real que queríamos era12/3*10/5
apenas o de ignorar o primeiro/6
e o último*8
, multiplicando de*6
volta e dividindo de/8
volta. Esse cancelamento é feito definindo6/8
como o valor inicial para a redução.fonte
*.../...
ao valor inicial1
.Python 2, 52 bytes
Uma função anônima que recebe entrada de uma lista nivelada por meio de argumento e retorna a saída.
Isso faz uso da idéia de cascata de divisão, como na resposta do xnor .
Experimente no Ideone
fonte
Python 3, 59 bytes
Uma função anônima que recebe entrada de uma lista não nivelada por meio de argumento e retorna a saída.
Como funciona
Para cada par de números inteiros na entrada, uma sequência do formulário
'int1*int2'
é criada. A união de todos esses pares/
fornece uma sequência do formulário'int1*int2/int3*int4/...'
, que é o cálculo desejado, mas inclui o primeiro e o último número inteiro indesejados. Eles são removidos cortando os dois primeiros e os últimos dois caracteres da picada, deixando o cálculo desejado. Isso é então avaliado e retornado.Experimente no Ideone
fonte
Pascal, 88 bytes
Uma função recursiva (tinha que fazer isso ..) que usa uma matriz 2D estática e seu comprimento (número de linhas) como entrada. Usando alguma matemática de ponteiro na matriz.
Sem jogar com o exemplo de uso:
fonte
Na verdade, 14 bytes
Experimente online! (atualmente não está funcionando porque o TIO está algumas versões atrasado)
Este programa usa uma lista achatada como entrada.
Explicação:
fonte
R, 64 bytes
Acontece que a abordagem vetorizada e a
for
loop são equivalentes neste caso:ou o
for
loop:`
fonte