Los engranajes transfieren diferentes cantidades de velocidades, dependiendo del tamaño del engranaje engranado.
Jack tiene una máquina que gira un tren de engranajes. pero no sabes la velocidad de la última marcha.
Afortunadamente, eres un gran jugador de código, ¡así que puedes ayudarlo!
¿Entonces qué debo hacer?
Cada engranaje está representado por 2 números, el radio del engranaje interno y el radio de los engranajes externos.
Si el engranaje A
es [a,b]
y el engranaje B
es [c,d]
, entonces la relación entre la velocidad de A
y la velocidad de B
sería c:b
.
Dada una lista de engranajes (lista de 2 tuplas), genera la velocidad del último engranaje.
Puede suponer que la velocidad de la primera marcha es 1
.
Ejemplo resuelto
Digamos que nuestra entrada es [[6,12],[3,10],[5,8]]
.
La primera marcha, [6,12]
tendría una velocidad de 1
.
Entonces, la segunda marcha [3,10]
, tendría una velocidad de 1*12/3 = 4
.
Entonces, la última marcha [5,8]
, tendría una velocidad de 4*10/5 = 8
.
Casos de prueba
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)
Reglas
Se aplican reglas básicas de código de golf .
[6,12,3,10,5,8]
. solo menciónalo si quieres usarlo.Respuestas:
Haskell, 19 bytes
Dada una lista plana como
[a,b,c,d,e,f]
,tail.init
elimina el primer y el último elemento, y luegofoldr1(/)
crea una cascada de divisionesb/(c/(d/e))))
que funciona alternando*
y/
:b/c*d/e
.fuente
Jalea , 6 bytes
Banco de pruebas.
fuente
Jalea , 7 bytes
Pruébalo en línea! o verificar todos los casos de prueba .
fuente
C,
1151231218380767170 bytes¡4 bytes guardados gracias a @LeakyNun!
Mi primer golf, probablemente no el mejor.
Toma una matriz y un tamaño.
Sin golf:
fuente
j;float r=1;float f(int a[]){for(;j<sizeof a;)r=r*a[j++]/a[j++];return r;}
(no probado)JavaScript (ES6), 44 bytes
37 bytes para una matriz aplanada:
A diferencia de (por ejemplo) Haskell,
reduceRight
es un nombre tan largo que es más barato porreduce
el camino equivocado y toma el recíproco al final.fuente
Pyth, 8 bytes
Banco de pruebas.
fuente
J, 8 bytes
Pruébalo en línea!
Uso
dónde
>>
está STDIN y<<
es STDOUT.Explicación
"Reducir" en los
J
valores predeterminados de derecha a izquierda, que despegó algunos bytes: pfuente
Mathematica, 26 bytes
Una función sin nombre que toma una lista plana de valores de longitud par y devuelve el resultado exacto (como una fracción si es necesario).
Esto utiliza el mismo enfoque que algunas otras respuestas de división plegable sobre la lista inversa (después de eliminar el primer y último elemento).
fuente
MATL , 9 bytes
El formato de entrada es cualquiera de estos:
EDITAR (30 de julio de 2016): el código vinculado se reemplaza
9L
por1L
para adaptarse a los cambios recientes en el idioma.Pruébalo en línea!
Explicación
fuente
JavaScript, 54 bytes
Uso
Sin golf
Por supuesto, la variante de golf es un poco diferente. Con
.map()
, reemplaza el primer valor de la matriz con la velocidad después de la segunda rueda, el segundo valor con la velocidad de la tercera rueda, y el último valor y el segundo último valor con la velocidad de la última rueda. Entonces, simplemente tomamos el último elemento con.pop()
.fuente
PHP,
807969 bytestoma la entrada del parámetro GET
a
; resultado de impresionesse inicializa
$r
con 1, luego pasa de la segunda a la última tupla para multiplicar con el primer elemento de la anterior y dividir a través del segundo elemento de la tupla actual.Gracias a Jörg por recordarme
$_GET
; eso ahorró 7 bytes.versión más elegante, 88 bytes:
fuente
<?for($r=$i=1;$i<count($a=$_GET[a]);)$r*=$a[$i-1][1]/$a[$i++][0];echo$r;
72 BytesJavaScript,
595856 bytesExplicación
Reduzca la matriz y multiplique por cada segundo valor y divida por cada primer valor. Entonces para que
[[6,12],[3,10],[5,8]]
lo haga12/6*10/3*8/5
. Por supuesto, el cálculo real que queríamos era12/3*10/5
así que solo queremos ignorar eso primero/6
y último*8
multiplicando*6
y dividiendo de/8
nuevo. Esa cancelación se realiza estableciendo6/8
como el valor inicial para la reducción.fuente
*.../...
al valor inicial1
.Python 2, 52 bytes
Una función anónima que toma la entrada de una lista aplanada a través de un argumento y devuelve la salida.
Esto hace uso de la idea de la cascada de división, como en la respuesta de xnor .
Pruébalo en Ideone
fuente
Python 3, 59 bytes
Una función anónima que toma la entrada de una lista no aplanada a través de un argumento y devuelve la salida.
Cómo funciona
Por cada par de enteros en la entrada,
'int1*int2'
se crea una cadena del formulario . Unir todos estos pares/
proporciona una cadena de la forma'int1*int2/int3*int4/...'
, que es el cálculo deseado, pero incluye los primeros y últimos enteros no deseados. Estos se eliminan cortando los primeros dos y últimos dos caracteres en la picadura, dejando el cálculo deseado. Esto luego se evalúa y se devuelve.Pruébalo en Ideone
fuente
Pascal, 88 bytes
Una función recursiva (tenía que hacerlo ...) que toma una matriz 2D estática y su longitud (no. De filas) como entrada. Usando algunas matemáticas de puntero en la matriz.
Ungolfed con ejemplo de uso:
fuente
En realidad, 14 bytes
Pruébalo en línea! (actualmente no funciona porque TIO tiene algunas versiones detrás)
Este programa toma una lista aplanada como entrada.
Explicación:
fuente
R, 64 bytes
Resulta el enfoque vectorizado y el
for
bucle son equivalentes en este caso:o la
for
bucle:``
fuente