Zahnräder übertragen je nach Größe des kämmenden Zahnrads unterschiedliche Geschwindigkeiten.
Jack hat eine Maschine, die einen Gear Train dreht. aber Sie kennen die Geschwindigkeit des letzten Gangs nicht.
Zum Glück bist du ein großartiger Code-Golfer, also kannst du ihm helfen!
Also was soll ich tun?
Jedes Zahnrad wird durch 2 Zahlen dargestellt, den Radius des inneren Zahnrads und den Radius der äußeren Zahnräder.
Wenn Zahnrad A
ist [a,b]
und das Zahnrad B
ist [c,d]
, dann ist das Verhältnis zwischen der Geschwindigkeit A
und der Geschwindigkeit B
wäre c:b
.
Bei einer Liste von Gängen (Liste mit 2 Tupeln) wird die Geschwindigkeit des letzten Gangs ausgegeben.
Sie können davon ausgehen, dass die Geschwindigkeit des ersten Gangs ist 1
.
Beispiel ausgearbeitet
Nehmen wir an, unser Input ist [[6,12],[3,10],[5,8]]
.
Der erste Gang [6,12]
hätte eine Geschwindigkeit von 1
.
Dann hätte der zweite Gang [3,10]
eine Geschwindigkeit von 1*12/3 = 4
.
Dann hätte der letzte Gang [5,8]
eine Geschwindigkeit von 4*10/5 = 8
.
Testfälle
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)
Regeln
Grundlegende Code-Golf- Regeln gelten.
[6,12,3,10,5,8]
. Erwähne es einfach, wenn du es benutzen willst.Antworten:
Haskell, 19 Bytes
Bei einer flachen Liste wie
[a,b,c,d,e,f]
,tail.init
entfernt die ersten und letzten Elemente, und dannfoldr1(/)
schafft eine Kaskade von Spaltungenb/(c/(d/e))))
, die abwechselnd ausarbeitet*
und/
:b/c*d/e
.quelle
Gelee , 6 Bytes
Testsuite.
quelle
Gelee , 7 Bytes
Probieren Sie es online! oder überprüfen Sie alle Testfälle .
quelle
C
1151231218380767170 Bytes4 Bytes gespart dank @LeakyNun!
Mein erster Golf, wahrscheinlich nicht der beste.
Nimmt ein Array und eine Größe an.
Ungolfed:
quelle
j;float r=1;float f(int a[]){for(;j<sizeof a;)r=r*a[j++]/a[j++];return r;}
(nicht getestet)JavaScript (ES6), 44 Byte
37 Bytes für ein abgeflachtes Array:
Im Gegensatz zu (zB) Haskell
reduceRight
ist ein so langer Name, dass er inreduce
die falsche Richtung billiger ist und am Ende das Gegenteil annimmt.quelle
Pyth, 8 Bytes
Testsuite.
quelle
J, 8 Bytes
Probieren Sie es online!
Verwendung
wo
>>
ist STDIN und<<
ist STDOUT.Erläuterung
"Verkleinern" der
J
Standardeinstellungen von rechts nach links, wodurch einige Bytes verloren gingen: pquelle
Mathematica, 26 Bytes
Eine unbenannte Funktion, die eine flache Liste von Werten mit gerader Länge verwendet und das genaue Ergebnis zurückgibt (bei Bedarf als Bruchzahl).
Dies verwendet den gleichen Ansatz wie einige andere Antworten der Faltungsteilung über die umgekehrte Liste (nachdem das erste und das letzte Element entfernt wurden).
quelle
MATL , 9 Bytes
Das Eingabeformat ist eines der folgenden:
EDIT (30. Juli 2016): der verknüpften Code ersetzt
9L
durch1L
die jüngsten Änderungen in der Sprache anzupassen.Probieren Sie es online!
Erläuterung
quelle
JavaScript, 54 Byte
Verwendung
Ungolfed
Natürlich ist die Golfvariante etwas anders. Mit
.map()
wird der erste Wert des Arrays durch die Geschwindigkeit nach dem zweiten Rad, der zweite Wert durch die Geschwindigkeit des dritten Rads und der letzte Wert und der vorletzte Wert durch die Geschwindigkeit des letzten Rads ersetzt. Also nehmen wir nur das letzte Element mit.pop()
.quelle
PHP,
807969 BytesÜbernimmt die Eingabe vom GET-Parameter
a
. druckt ErgebnisInitialisiert
$r
mit 1 und durchläuft dann die Schleife vom vorletzten Tupel, um mit dem ersten Element des vorherigen zu multiplizieren und durch das zweite Element des aktuellen Tupels zu teilen.Danke an Jörg, der mich daran erinnert hat
$_GET
; das sparte 7 Bytes.elegantere Version, 88 Bytes:
quelle
<?for($r=$i=1;$i<count($a=$_GET[a]);)$r*=$a[$i-1][1]/$a[$i++][0];echo$r;
72 BytesJavaScript,
595856 BytesErläuterung
Reduzieren Sie das Array und multiplizieren Sie es mit jedem zweiten Wert und dividieren Sie es durch jeden ersten Wert. So ist
[[6,12],[3,10],[5,8]]
es auch12/6*10/3*8/5
. Die eigentliche Berechnung, die wir wollten, war natürlich so,12/3*10/5
dass wir das zuerst/6
und zuletzt einfach ignorieren wollten, indem wir wieder*8
reinmultiplizieren*6
und/8
wieder raus dividieren . Diese Aufhebung erfolgt, indem6/8
der Anfangswert für die Reduzierung festgelegt wird.quelle
*.../...
an den Anfangswert anhängen1
.Python 2, 52 Bytes
Eine anonyme Funktion, die die Eingabe einer reduzierten Liste über ein Argument akzeptiert und die Ausgabe zurückgibt.
Dies nutzt die Idee der Teilungskaskade, wie in der Antwort von xnor .
Probieren Sie es auf Ideone
quelle
Python 3, 59 Bytes
Eine anonyme Funktion, die die Eingabe einer nicht abgeflachten Liste über ein Argument akzeptiert und die Ausgabe zurückgibt.
Wie es funktioniert
Für jedes Ganzzahlpaar in der Eingabe wird eine Zeichenfolge des Formulars
'int1*int2'
erstellt. Wenn Sie alle diese Paare zusammenfügen, erhalten Sie/
eine Zeichenfolge der Form'int1*int2/int3*int4/...'
, die die gewünschte Berechnung darstellt, die jedoch die unerwünschten ersten und letzten Ganzzahlen enthält. Diese werden entfernt, indem die ersten beiden und die letzten beiden Zeichen im Stich herausgeschnitten werden, wobei die gewünschte Berechnung verbleibt. Dies wird dann ausgewertet und zurückgegeben.Probieren Sie es auf Ideone
quelle
Pascal, 88 Bytes
Eine rekursive (musste es tun ..) Funktion, die ein statisches 2D-Array und seine Länge (Anzahl der Zeilen) als Eingabe verwendet. Verwenden Sie eine Zeigermathematik für das Array.
Ungolfed mit Anwendungsbeispiel:
quelle
Eigentlich 14 Bytes
Probieren Sie es online! (Funktioniert derzeit nicht, da TIO einige Versionen hinter sich hat)
Dieses Programm verwendet eine abgeflachte Liste als Eingabe.
Erläuterung:
quelle
R, 64 Bytes
Es stellt sich heraus, dass der vektorisierte Ansatz und die
for
Schleife in diesem Fall äquivalent sind:oder die
for
Schleife:`
quelle