Respuestas:
t=input()
s=a=sum(t)/2.
for x in t:a*=s-x
print a**.5
Entrada: 2,3,4
Salida: 2.90473750966
Mathematica 23
√Times@@(+##/2-{0,##})&
Sqrt[Tr@#*Times@@(Tr@#-2#)]/4&
(Tr@#Times@@(Tr@#-2#))^.5/4&
, o 27 usando una variable
a,b,c=input()
s=(a+b+c)*.5
print(s*(s-a)*(s-b)*(s-c))**.5
Usando la fórmula de Heron .
Uso de la muestra:
$ echo 2,3,4 | python triangle-area.py
2.90473750966
$ echo 3,4,5 | python triangle-area.py
6.0
Una variante de 58 bytes:
a,b,c=input()
print((a+b+c)*(b+c-a)*(a+c-b)*(a+b-c))**.5/4
*.5
lugar de /2
?
a+b+c
es impar, el resultado será erróneo. Esto cambió en Python 3, aunque se supone que la mayoría de las presentaciones de golf son Python 2.7 a menos que se especifique lo contrario (al igual que se supone que las presentaciones de Perl son 5.10+ y no Perl 6).
f=function(...)prod(sum(...)/2-c(0,...))^.5
Usando la fórmula de Heron también pero aprovechando la vectorización de R.
Gracias a @flodel por la idea de los puntos suspensivos.
Uso:
f(2,3,4)
[1] 2.904738
f(3,4,5)
[1] 6
function(...)prod(sum(...)/2-c(0,...))^.5
. O incluso function(x)prod(sum(x)/2-c(0,x))^.5
si llama a su función con un vector.
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]))
No es bueno pero divertido :) También Heron ... Demuestra la falta de resolución de problemas simples en JS lol
Nota : ejecute desde la consola para ver el resultado.
88-> 85: eliminado a
, b
y c
.
(a=v[0])a
es más largo que v[0]v[0]
.
s=(v[0]+v[1]+v[2])/2
con a, b, c = 3,4,5 resultaría en "345"/2=172.5" and not 6. Improved without
a ,
b` y c
sin embargo.
s=(-v[0]-v[1]-v[2])/2
y cambia el otro -
a +
. Es un número par de términos, por lo que se cancela.
Con 4 bytes guardados por @swish.
Esto devuelve una respuesta exacta:
Area@SSSTriangle@
Ejemplo
Area@SSSTriangle[2,3,4]
Para devolver la respuesta en forma decimal, se requieren dos bytes adicionales.
N@Area@SSSTriangle[2,3,4]
2.90474
Area@*SSSTriangle
readLn>>=(\l->print$sqrt$product$map(sum l/2-)$0:l)
Una implementación muy directa de la fórmula de Heron. Ejemplo de ejecución:
Prelude> readLn>>=(\l->print$sqrt$product$map(sum l/2-)$0:l)
[2,3,4]
2.9047375096555625
Prelude>
Tenga en cuenta que acepta cualquier entrada numérica, no solo enteros. Y si la entrada ya está en l, la solución solo debe tener 36 caracteres, y si no estamos interesados en imprimir la respuesta, la solución solo debe tener 30 caracteres. Además, si podemos permitirnos cambiar el formato de entrada, podemos eliminar 3 caracteres más. Entonces, si nuestra entrada se ve como [2,3,4,0.0] y ya está en l, podemos obtener nuestra respuesta solo con:
sqrt$product$map(sum l/2-)l
Ejemplo de ejecución:
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
Salida: 2.9047375096556
¿No creo que pueda acortarlo? Todavía soy nuevo en el golf. Alguien hágamelo saber si pasé por alto algo.
Gracias Primo por salvarme 1 byte, jajaja.
($s-$c[2])
se puede reemplazar $s-=$c[2]
por un byte, pero eso es todo lo que puedo ver.
s=(eval('abc '.split('').join('=prompt()|0;'))+a+b)/2;Math.sqrt(s*(s-a)*(s-b)*(s-c))
Otra solución de JavaScript basada en la fórmula de Heron, pero que intenta un enfoque diferente para cargar variables. Debe ejecutarse desde la consola. Cada lado se ingresa en un mensaje separado.
EDITAR : utilice el valor de retorno de eval
para guardar 2 caracteres. Beats @tomsmeding, ¡wahoo! :)
½*Nx
NmnU ×*U q
Ahorró 2 bytes gracias a que ETH señaló una nueva línea redundante y algunas formas alternativas de reducir la matriz.
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))}
Pase los lados como argumento.
Para la entrada, 2 3 4
el valor de s
es (2+3+4)/2.
como cadena. Doble evaluación FTW.
proc
, se extiende a solo 81 bytes: tio.run/##NYo7CoAwEAV7T/…
4⁻¹√(sum(Ansprod(sum(Ans)-2Ans
Partiendo de una rutina de Fórmula de Heron escrita por Kenneth Hammond (Weregoose) , jugué dos bytes. Tenga en cuenta que TI-BASIC está tokenizado, y cada token, like Ans
y prod(
, es uno o dos bytes en la memoria de la calculadora.
Entrada a través de Ans
ie en el formulario {a,b,c}:[program name]
.
Explicado:
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
Otra implementación más de la fórmula del héroe.
#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;
}