Compte tenu de trois sidelengths d'un triangle, d' évaluer son rapport d'aspect AR donné la formule suivante:
où
Plus un triangle est proche de l'équilatéralité, plus 1
son ratio d'aspect est proche . Le rapport hauteur / largeur est supérieur ou égal à 1
pour les triangles valides.
Contributions
L'entrée consiste en trois réels nombres positifs qui peuvent être encapsulés dans une liste ou similaire si besoin est.
Votre programme doit afficher la même valeur quel que soit l’ordre dans lequel les trois longueurs latérales sont entrées.
Ces trois nombres seront toujours des longueurs latérales valides d’un triangle (les triangles dégénérés comme un triangle avec des longueurs latérales 1
, 1
et 2
ne seront pas donnés en entrée). Vous n'avez pas à vous soucier des inexactitudes en virgule flottante lorsque les valeurs deviennent extrêmement proches d'un triangle dégénéré (par exemple, il est acceptable que votre programme commette une erreur division by 0
lors de la saisie [1, 1, 1.9999999999999999]
).
L'entrée peut être donnée via STDIN
, en tant qu'argument de fonction ou quelque chose de similaire.
Les sorties
La sortie est un nombre réel supérieur ou égal à 1
l'exactitude standard acceptable dans votre langue.
La sortie peut être imprimée sur STDOUT
, renvoyée par une fonction ou similaire.
Cas de test
Inputs Output
1 1 1 1
3 4 5 1.25
42 42 3.14 ≈ 6.9476
14 6 12 1.575
6 12 14 1.575
0.5 0.6 0.7 ≈ 1.09375
Notation
C'est du code-golf , donc la réponse la plus courte en octets est gagnante.
la source
42.0
au lieu de42
.0
?Réponses:
Gelée , 6 octets
Cette réponse est basée sur la réponse 05AB1E d’Emigna . Un grand merci à Dennis et Lynn pour leur aide dans la résolution de cette réponse. Suggestions de golf bienvenues! Essayez-le en ligne!
Ungolfing
la source
⁸÷
obtient beaucoup de la chaîne en tant qu'unité, et devrait être lu comme divisant l'argument de gauche initial par ceci , ou quelque chose.Gelée , 7 octets
Essayez-le en ligne!
Explication
Lisons cette chaîne:
L'argument implicite est une liste
[a, b, c]
.D'abord nous lisons
S
. Cela prend la somme:a + b + c
.Ensuite, nous lisons
H
. Diviser par deux le:(a + b + c)/2
. (Ceci ests
.)Ensuite, nous lisons une dyade
_
(soustraction), suivie d’une autre dyade. C'est un crochet : il manque un bon argument, donc il reçoit l'argument de cette chaîne,[a, b, c]
nous le donne[s-a, s-b, s-c]
. (Ceci est le cinquième motif de chaîne du tableau ici .)Ensuite, nous lisons la paire dyade-monade
÷@H
. Ceci est une fourchette :÷@
c'est une division avec les arguments retournés, et elleH
est divisée par deux, ainsi notre valeur de travail récupèreH
l'argument de cette chaîne÷
. Cela vectorise; nous sommes partis avec[(a/2)/(s-a), (b/2)/(s-b), (c/2)/(s-c)]
. (Ceci est le deuxième motif de chaîne dans le tableau ici .)Enfin, nous prenons le produit avec
P
nousabc/(8(s-a)(s-b)(s-c))
.Affichez un graphique sous forme d'arborescence montrant comment les liens s'imbriquent
la source
Gelée , 6 octets
Essayez-le en ligne!
Comment ça marche
la source
³⁴⁵
comme arguments ...JavaScript, 38 octets
C'est un lambda (au curry ):
(Si vous l'assignez à une variable,
f
vous devrez l'appeler commef(3)(4)(5)
)la source
s = 1/2(a+b+c)
la formule et de simplifier: D (par exemples-a = .5*b+.5*c-.5*a
, et les trois facteurs d'.5
annulation avec8
)(a,b,c)=>
a la même longueur et coûte moins d'octets à appeler;)05AB1E ,
117 octets05AB1E utilise le codage CP-1252 .
Essayez-le en ligne!
Explication
la source
MATL ,
87 octetsEssayez-le en ligne!
Explication
Utilisons l'entrée
[3 4 5]
comme exemplela source
R,
3429 bytesReads input from stdin and store as the R-vector
x
. Then make use of R's vectorization to form the denominator.la source
Haskell, 36 bytes
This defines the function
#
which takes three arguments.You have to call it as follows:
(3#4)5
A little bit longer but perhaps more golfable:
la source
MATLAB,
64 3825 bytesThis is an anyonmous function that implements the formula as provided:
It assumes the input to be a list of three values e.g.
[3,4,5]
. This example is used in following explanation:la source
Mathematica, 20 bytes
Takes input as a list of three values, which is referred to as
#
inside the function.Tr@
is the shortest way to sum a list (to get2s
) and1##&@@(...)
multiplies the three factorsi/(2s-2i)
fori
ina, b, c
.If the inputs are integers or rational numbers, you'll get an exact result.
la source
Python 3, 42 bytes
Try It Online!
la source
OCaml, 51 bytes
Yay, separate operators for floats...
la source
Wonder, 48 bytes
RIP
Usage:
Explanation
Function calls are costly in Wonder when compared to infix operators in other languages. Because of this, I contained all the terms in an array and got the product of the result instead of multiplying every single term. The code would be equivalent to something like:
la source
Actually,
108 bytesThis answer is based on Dennis's excellent Jelly answer. Golfing suggestions welcome! Try it online!
Ungolfing
la source
Minecraft 1.8, 1607 bytes + 85 blocks = 1692 blytes
Warning: Not golfed. Golfed will take up to 1/3 less blytes.
Here is a commented screenshot:
The inputs are
a
,b
, andc
,and the output isfin
fin
, and all other variables in Minecraft are integers, so the standard Minecraft accuracy is 0 decimal pointsThe green border: the command blocks on the left will activate after the ones on the right, which are just variable initializations.
The lever (grey-brown rectangle in the down right) is the contraption trigger
It takes up so much because of the way Minecraft handles variables. A very simplified overview:
/scoreboard objectives add name dummy
creates a new variable named "name
"/scoreboard players set @p name number
sets the variablename
tonumber
. Number must be a real number, not a variable./scoreboard players operation @p name += @p name2
incrementsname
byname2
.name2
must be a variable, not a number.-=
,/=
,*=
,=
and more can be used instead+=
to decrement, multiply, divide, etc.I'm not going to post all the 43 commands here. It would help golfing this, but would also help drive me crazy copypasting
If 1.9 command blocks would be used, the solution would (at least) use 42 blocks less. If one-letter variables would be used, almost 200 bytes would be saved.
la source
Java, 38 bytes
Testing and ungolfed
Test it!
Output
la source
(a,b,c)
is kinda cheating here, because it contains no type information. IMO the implicit lambda interface (in your caseF
) should count in the total byte sum.Jellyfish,
1716 bytesThanks to Zgarb for saving 1 byte.
Try it online!
Explanation
This is based on the same reciprocal formula as Dennis's answer.
In more traditional functional notation, the above program reads as follows:
Where
i
is the input list. Note thatfold(multiply, ...)
just computes the product andfold(add, ...)
the sum, so we can further simplify this to:The
sum(i) / i
is implemented via the hook)/+
which defines a new unary function to do both steps at once.la source
Dyalog APL,
109 bytesThis is an anonymous function train (an atop of a fork of a fork of a fork), meaning that every sub-function is applied to the argument, inside the following structure:
TryAPL online!
×/
the product of⊢
the arguments÷
divided by+/
the sum of the arguments-
minus+⍨
the arguments doubled (lit. added to themselves)Mathematical background.
ngn shaved a byte.
la source
2sable, 6 bytes
A port of Dennis' Jelly answer.
Uses the CP-1252 encoding. Try it online!
la source
dc, 49 bytes
A direct implementation of the formula given. Prompts for the three inputs upon invocation on three separate lines and outputs a floating-point value with 5 digits after the decimal point to the next line.
Explanation
la source
TI-Basic, 11 bytes
Input should be in the form of a list, like
{A B C}
.Maybe this visual will help (remember that
2s = a+b+c
):la source
Perl 6, 44 bytes
la source
Python, 55 bytes
Credit to Dennis. I just ported. In Python, a much-neglected language.
la source
Forth, 83 bytes
Assumes the floating point parameters start on the floating point stack. Leaves the result on the floating point stack. Using the stack for params/returning is the standard for Forth.
Try it online - contains all test cases
Uses the formula
a*b*c * 1/ ( -(a+b-c) * -(b+c-a) * (a+c-b) )
. Pretty much the entire program is using only the floating point stack. The exception is the3
in3 fpick
. This program requires an interpreter that supportsfpick
(Ideone works, repl.it doesn't).Explanation: slightly less golfed
la source
ised: 19 bytes
Call it as
ised --l 'inputfile.txt' '@*$1/@*{@+$1-2.*$1}'
whereinputfile.txt
can be a file with space separated array, or-
to receive from pipe/stdin.Unicode version (same bytecount but 3 chars less):
Unfortunately,
ised
wastes a lot of chars for its input argument syntax.la source
vba, 76
Call with
or in excel with
la source
Public Function r(a,b,c):r=a*b*c/(b+c-a)/(a-b+c)/(a+b-c):End Function
C#, 82 bytes
Usage:
la source
Pyke, 12 bytes
Try it here!
Well, BlueEyedBeast, you had your chance. I used a good algorithm here.
la source
k, 19 bytes
Evaluates right to left - Divide the list x by 2, sum the result and subtract it from original x. Neg the answer and get the product of the result and 8. The result is the denominator, the numerator is the product of the list.
la source
Lua, 45 bytes
Heavily based on the JavaScript answer.
la source