Réponses:
t=input()
s=a=sum(t)/2.
for x in t:a*=s-x
print a**.5
Contribution: 2,3,4
Production: 2.90473750966
Mathematica 23
√Times@@(+##/2-{0,##})&
Sqrt[Tr@#*Times@@(Tr@#-2#)]/4&
(Tr@#Times@@(Tr@#-2#))^.5/4&, ou 27 en utilisant une variable
a,b,c=input()
s=(a+b+c)*.5
print(s*(s-a)*(s-b)*(s-c))**.5
Utilisation de la formule de Heron .
Exemple d'utilisation:
$ echo 2,3,4 | python triangle-area.py
2.90473750966
$ echo 3,4,5 | python triangle-area.py
6.0
Une variante de 58 octets:
a,b,c=input()
print((a+b+c)*(b+c-a)*(a+c-b)*(a+b-c))**.5/4
*.5au lieu de /2?
a+b+cest impair, le résultat sera erroné. Cela a changé en Python 3, bien que la plupart des soumissions de golf soient supposées être Python 2.7 sauf indication contraire (tout comme les soumissions Perl sont supposées être 5.10+, et non Perl 6).
~].~++:d\{2*d\-*}/'"#{'\+'**0.5/4}"'+~
Étant donné que la question ne spécifiait pas autrement, j'ai choisi de travailler uniquement sur des longueurs entières. Les côtés doivent être indiqués sur STDIN séparés par des espaces.
Exemple:
> 2 3 4
2.9047375096555625
f=function(...)prod(sum(...)/2-c(0,...))^.5
En utilisant également la formule de Heron mais en profitant de la vectorisation de R.
Merci à @flodel pour l'idée des points de suspension.
Usage:
f(2,3,4)
[1] 2.904738
f(3,4,5)
[1] 6
function(...)prod(sum(...)/2-c(0,...))^.5. Ou même function(x)prod(sum(x)/2-c(0,x))^.5si vous appelez votre fonction avec un vecteur.
v=prompt().split(/,/g);s=v[0]/2+v[1]/2+v[2]/2;Math.sqrt(s*(s-v[0])*(s-v[1])*(s-v[2]))
Pas bon mais amusant :) Aussi Heron ... Démontre la non-golfabilité de problèmes simples dans JS lol
Remarque : exécutez à partir de la console pour voir le résultat.
88-> 85: supprimé a, bet c.
(a=v[0])aest plus long que v[0]v[0].
s=(v[0]+v[1]+v[2])/2avec a, b, c = 3,4,5 se traduirait par "345"/2=172.5" and not 6. Improved without un , b` et ccependant.
s=(-v[0]-v[1]-v[2])/2et changez l'autre -en +. C'est un nombre pair de termes, donc il s'annule.
Avec 4 octets enregistrés par @swish.
Cela renvoie une réponse exacte:
Area@SSSTriangle@
Exemple
Area@SSSTriangle[2,3,4]
Pour renvoyer la réponse sous forme décimale, deux octets supplémentaires sont nécessaires.
N@Area@SSSTriangle[2,3,4]
2.90474
Area@*SSSTriangle
readLn>>=(\l->print$sqrt$product$map(sum l/2-)$0:l)
Une mise en œuvre très simple de la formule de Heron. Exemple d'exécution:
Prelude> readLn>>=(\l->print$sqrt$product$map(sum l/2-)$0:l)
[2,3,4]
2.9047375096555625
Prelude>
Notez qu'il accepte toute entrée numérique, pas seulement les entiers. Et si l'entrée est déjà en l, la solution ne doit comporter que 36 caractères, et si nous ne souhaitons pas imprimer la réponse, la solution ne doit comporter que 30 caractères. De plus, si nous pouvons nous permettre de changer le format d'entrée, nous pouvons supprimer 3 caractères supplémentaires. Donc, si notre entrée ressemble à [2,3,4,0.0] et est déjà dans l, nous pouvons obtenir notre réponse avec seulement:
sqrt$product$map(sum l/2-)l
Exemple d'exécution:
Prelude> let l = [2,3,4,0.0]
Prelude> sqrt$product$map(sum l/2-)l
2.9047375096555625
Prelude>
<?=sqrt(($s=array_sum($c=fgetcsv(STDIN))/2)*($s-$c[0])*($s-$c[1])*$s-=$c[2]);
Utilisation:
php triangle.php
2,3,4
Production: 2.9047375096556
Je ne pense pas que je puisse le raccourcir? Je suis encore nouveau au golf. N'importe qui m'a fait savoir si j'avais oublié quelque chose.
Merci Primo de m'avoir sauvé 1 octet, lol.
($s-$c[2])peut être remplacée par $s-=$c[2]un octet, mais c'est tout ce que je peux voir.
s=(eval('abc '.split('').join('=prompt()|0;'))+a+b)/2;Math.sqrt(s*(s-a)*(s-b)*(s-c))
Une autre solution JavaScript basée sur la formule de Heron, mais essayant une approche différente pour le chargement des variables. Doit être exécuté à partir de la console. Chaque côté est entré dans une invite distincte.
EDIT : Utilisez la valeur de retour de evalpour enregistrer 2 caractères. Beats @tomsmeding, wahoo! :)
½*Nx
NmnU ×*U q
Enregistrement de 2 octets grâce à ETH indiquant une nouvelle ligne redondante et quelques façons alternatives de réduire le tableau.
NmnU ×*U q, NmnU r*U q,Np0 mnU ×q
proc R {a b c} {set s ($a+$b+$c)/2.
expr sqrt($s*($s-$a)*($s-$b)*($s-$c))}
Passez les côtés en argument.
Pour l'entrée, 2 3 4la valeur de sest (2+3+4)/2.sous forme de chaîne. Double évaluation FTW.
proc, il s'étend à seulement 81 octets: tio.run/##NYo7CoAwEAV7T/…
4⁻¹√(sum(Ansprod(sum(Ans)-2Ans
À partir d'une routine de formule Heron écrite par Kenneth Hammond (Weregoose) , j'ai joué deux octets au golf . Notez que TI-BASIC est tokenisé, et chaque token, commeAns et prod(, est un ou deux octets dans la mémoire de la calculatrice.
Entrée via Ans ie sous la forme{a,b,c}:[program name] .
Expliqué:
sum(Ans)-2*Ans (a+b+c)-2{a,b,c}={b+c-a,c+a-b,a+b-c}
Ans*prod( {a,b,c}*(b+c-a)(c+a-b)(a+b-c)
sum( (a+b+c)(b+c-a)(c+a-b)(a+b-c)
4⁻¹*√( √((a+b+c)(b+c-a)(c+a-b)(a+b-c)/16)
=√(s(s-a)(s-b)(s-c))
#define f(a,b,c)sqrt((a+b+c)*(a+b-c)*(a-b+c)*(b+c-a))/4
Encore une autre mise en œuvre de la formule de Hero.
#include<stdio.h>
#include<math.h>
main()
{
double a,b,c,s,area;
scanf("%d %d %d" &a,&b,&c);
s=sqrt((a*a)+(b*b)+(c*c));
area=[sqrt(s*(s-a)*(s-b)*(s-c))]/2;
}
-MList::Util=sum -ap , 40 octets$r=$t=.5*sum@F;map$r*=$t-$_,@F;$_=sqrt$r
╝0∞♀»♦▓y╩╪
Fonctionne en triplets de nombres à virgule flottante. Utilise la formule de Heron