Les engrenages transfèrent différentes vitesses, selon la taille de l'engrenage maillé.
Jack a une machine qui fait tourner un train d'engrenages. mais vous ne connaissez pas la vitesse du dernier rapport.
Heureusement, vous êtes un grand golfeur de code, vous pouvez donc l'aider!
Donc qu'est ce que je devrais faire?
Chaque engrenage est représenté par 2 chiffres, le rayon de l'engrenage intérieur et le rayon des engrenages extérieurs.
Si la vitesse A
est [a,b]
et la vitesse B
est [c,d]
, alors le rapport entre la vitesse de A
et la vitesse de B
serait c:b
.
Étant donné une liste de vitesses (liste de 2-tuples), affichez la vitesse du dernier rapport.
Vous pouvez supposer que la vitesse de la première vitesse est 1
.
Exemple élaboré
Disons que notre contribution est [[6,12],[3,10],[5,8]]
.
Le premier rapport [6,12]
aurait une vitesse de 1
.
Ensuite, le deuxième rapport [3,10]
aurait une vitesse de 1*12/3 = 4
.
Ensuite, le dernier engrenage [5,8]
, aurait une vitesse de 4*10/5 = 8
.
Cas de test
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)
Règles
Les règles de base du code-golf s'appliquent.
[6,12,3,10,5,8]
. mentionnez-le si vous voulez l'utiliser.Réponses:
Haskell, 19 octets
Étant donné une liste plate comme
[a,b,c,d,e,f]
,tail.init
supprime les premier et dernier éléments, puisfoldr1(/)
crée une cascade de divisionsb/(c/(d/e))))
qui fonctionne à alternance*
et/
:b/c*d/e
.la source
Gelée , 6 octets
Suite de tests.
la source
Gelée , 7 octets
Essayez-le en ligne! ou vérifiez tous les cas de test .
la source
C,
1151231218380767170 octets4 octets enregistrés grâce à @LeakyNun!
Mon premier golf, probablement pas le meilleur.
Prend un tableau et une taille.
Non golfé:
la source
j;float r=1;float f(int a[]){for(;j<sizeof a;)r=r*a[j++]/a[j++];return r;}
(non testé)JavaScript (ES6), 44 octets
37 octets pour un tableau aplati:
Contrairement à (par exemple) Haskell,
reduceRight
est un nom si long qu'il est moins cher dansreduce
le mauvais sens et prend l'inverse à la fin.la source
Pyth, 8 octets
Suite de tests.
la source
J, 8 octets
Essayez-le en ligne!
Usage
où
>>
est STDIN et<<
STDOUT.Explication
"Réduire" dans les
J
valeurs par défaut de droite à gauche, ce qui a pris quelques octets: pla source
Mathematica, 26 octets
Une fonction sans nom qui prend une liste plate de valeurs paires et renvoie le résultat exact (sous forme de fraction si nécessaire).
Cela utilise la même approche que certaines autres réponses de division de pliage sur la liste inversée (après avoir supprimé le premier et le dernier élément).
la source
MATL , 9 octets
Le format d'entrée est l'un de ceux-ci:
EDIT (30 juillet 2016): le code lié remplace
9L
par1L
pour s'adapter aux évolutions récentes de la langue.Essayez-le en ligne!
Explication
la source
JavaScript, 54 octets
Usage
Non golfé
Bien sûr, la variante golfée est un peu différente. Avec
.map()
, il remplace la première valeur du tableau par la vitesse après la deuxième roue, la deuxième valeur par la vitesse de la troisième roue, et la dernière valeur et l'avant-dernière valeur par la vitesse de la dernière roue. Donc, nous prenons simplement le dernier élément avec.pop()
.la source
PHP,
807969 octetsprend l'entrée du paramètre GET
a
; résultat des impressionsinitialise
$r
avec 1, puis passe de l'avant-dernier au dernier tuple pour se multiplier avec le premier élément du précédent et se diviser par le deuxième élément du tuple actuel.Merci à Jörg de me l'avoir rappelé
$_GET
; qui a sauvé 7 octets.version plus élégante, 88 octets:
la source
<?for($r=$i=1;$i<count($a=$_GET[a]);)$r*=$a[$i-1][1]/$a[$i++][0];echo$r;
72 octetsJavaScript,
595856 octetsExplication
Réduisez le tableau et multipliez par chaque seconde valeur et divisez par chaque première valeur. Donc pour
[[6,12],[3,10],[5,8]]
ça12/6*10/3*8/5
. Bien sûr, le calcul réel que nous voulions était12/3*10/5
donc nous voulons simplement ignorer cela en premier/6
et en dernier*8
en multipliant*6
et en divisant/8
. Cette annulation est effectuée en définissant6/8
la valeur initiale de la réduction.la source
*.../...
à la valeur initiale1
.Python 2, 52 octets
Une fonction anonyme qui prend l'entrée d'une liste aplatie via un argument et renvoie la sortie.
Cela utilise l'idée de cascade de divisions, comme dans la réponse de xnor .
Essayez-le sur Ideone
la source
Python 3, 59 octets
Une fonction anonyme qui prend l'entrée d'une liste non aplatie via un argument et renvoie la sortie.
Comment ça fonctionne
Pour chaque paire d'entiers dans l'entrée, une chaîne du formulaire
'int1*int2'
est créée. Joindre toutes ces paires/
donne une chaîne de la forme'int1*int2/int3*int4/...'
, qui est le calcul souhaité, mais inclut les premier et dernier entiers indésirables. Ceux-ci sont supprimés en découpant les deux premiers et les deux derniers caractères de la piqûre, en laissant le calcul souhaité. Celui-ci est ensuite évalué et renvoyé.Essayez-le sur Ideone
la source
Pascal, 88 octets
Une fonction récursive (devait le faire ..) qui prend en entrée un tableau 2D statique et sa longueur (nombre de lignes). Utilisation de mathématiques de pointeur sur le tableau.
Ungolfed avec un exemple d'utilisation:
la source
En fait, 14 octets
Essayez-le en ligne! (ne fonctionne pas actuellement car TIO est derrière quelques versions)
Ce programme prend une liste aplatie en entrée.
Explication:
la source
R, 64 octets
Il s'avère que l'approche vectorisée et la
for
boucle sont équivalentes dans ce cas:ou la
for
boucle:"
la source