Risposte:
t=input()
s=a=sum(t)/2.
for x in t:a*=s-x
print a**.5
Ingresso: 2,3,4
Produzione: 2.90473750966
Mathematica 23
√Times@@(+##/2-{0,##})&
Sqrt[Tr@#*Times@@(Tr@#-2#)]/4&
(Tr@#Times@@(Tr@#-2#))^.5/4&, o 27 usando una variabile
a,b,c=input()
s=(a+b+c)*.5
print(s*(s-a)*(s-b)*(s-c))**.5
Usando la formula di Heron .
Esempio di utilizzo:
$ echo 2,3,4 | python triangle-area.py
2.90473750966
$ echo 3,4,5 | python triangle-area.py
6.0
Una variante da 58 byte:
a,b,c=input()
print((a+b+c)*(b+c-a)*(a+c-b)*(a+b-c))**.5/4
*.5invece di /2?
a+b+cè dispari, il risultato sarà errato. Ciò è cambiato in Python 3, sebbene la maggior parte delle proposte di golf siano considerate Python 2.7 se non diversamente specificato (così come le presentazioni di Perl sono considerate 5.10+ e non Perl 6).
f=function(...)prod(sum(...)/2-c(0,...))^.5
Usando anche la formula di Heron ma sfruttando la vettorializzazione di R.
Grazie a @flodel per l'idea dei puntini di sospensione.
Uso:
f(2,3,4)
[1] 2.904738
f(3,4,5)
[1] 6
function(...)prod(sum(...)/2-c(0,...))^.5. O anche function(x)prod(sum(x)/2-c(0,x))^.5se chiami la tua funzione con un vettore.
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]))
Non buono ma divertente :) Anche Airone ... Dimostra l'ingolfabilità di semplici problemi in JS lol
Nota : eseguire dalla console per vedere il risultato.
88-> 85: Rimosso a, be c.
(a=v[0])aè più lungo di v[0]v[0].
s=(v[0]+v[1]+v[2])/2con a, b, c = 3,4,5 si tradurrebbe in "345"/2=172.5" and not 6. Improved without a , b` e ccomunque.
s=(-v[0]-v[1]-v[2])/2e cambia l'altro -in +. È un numero pari di termini, quindi si annulla.
Con 4 byte salvati da @swish.
Questo restituisce una risposta esatta:
Area@SSSTriangle@
Esempio
Area@SSSTriangle[2,3,4]
Per restituire la risposta in formato decimale, sono richiesti due byte aggiuntivi.
N@Area@SSSTriangle[2,3,4]
2,90,474 mila
Area@*SSSTriangle
readLn>>=(\l->print$sqrt$product$map(sum l/2-)$0:l)
Un'implementazione molto diretta della formula di Heron. Esempio di esecuzione:
Prelude> readLn>>=(\l->print$sqrt$product$map(sum l/2-)$0:l)
[2,3,4]
2.9047375096555625
Prelude>
Si noti che accetta qualsiasi input numerico, non solo numeri interi. E se l'input è già in l, la soluzione deve contenere solo 36 caratteri e se non siamo interessati a stampare la risposta, la soluzione deve contenere solo 30 caratteri. Inoltre, se possiamo permetterci di cambiare il formato di input, possiamo rimuovere altri 3 caratteri. Quindi se il nostro input sembra [2,3,4,0,0] ed è già in l possiamo ottenere la nostra risposta solo con:
sqrt$product$map(sum l/2-)l
Esempio di esecuzione:
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]);
Uso:
php triangle.php
2,3,4
Produzione: 2.9047375096556
Non penso di poterlo abbreviare? Sono ancora nuovo al golf. Qualcuno mi faccia sapere se ho trascurato qualcosa.
Grazie Primo per avermi salvato 1 byte, lol.
($s-$c[2])può essere sostituito con $s-=$c[2]per un byte, ma è tutto ciò che posso vedere.
s=(eval('abc '.split('').join('=prompt()|0;'))+a+b)/2;Math.sqrt(s*(s-a)*(s-b)*(s-c))
Un'altra soluzione JavaScript basata sulla formula di Heron, ma cercando un approccio diverso per il caricamento delle variabili. Deve essere eseguito dalla console. Ogni lato è inserito in un prompt separato.
EDIT : Usa il valore di ritorno di evalper salvare 2 caratteri. Batte @tomsmeding, wahoo! :)
½*Nx
NmnU ×*U q
Salvato 2 byte grazie all'ETH che indica una nuova riga ridondante e alcuni modi alternativi per ridurre l'array.
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))}
Passa i lati come argomento.
Per l'input 2 3 4il valore di sè (2+3+4)/2.come stringa. Doppia valutazione FTW.
proc, si estende a soli 81 byte: tio.run/##NYo7CoAwEAV7T/…
4⁻¹√(sum(Ansprod(sum(Ans)-2Ans
A partire da una formula di Heron's Formula scritta da Kenneth Hammond (Weregoose) , ho giocato a golf due byte. Si noti che TI-BASIC è tokenizzato e ogni token, come Anse prod(, è uno o due byte nella memoria della calcolatrice.
Immettere tramite Ansie nella forma {a,b,c}:[program name].
Ha spiegato:
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
Ancora un'altra implementazione della formula di 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;
}
╝0∞♀»♦▓y╩╪
Gestisce le triple dei numeri in virgola mobile. Usa la formula dell'airone