Dadas tres longitudes laterales de un triángulo, evalúa su relación de aspecto AR dada la siguiente fórmula:
dónde
Cuanto más cercano a la equilateralidad es un triángulo, más cerca está 1
su relación de aspecto. La relación de aspecto es mayor o igual que 1
para triángulos válidos.
Entradas
La entrada es tres números positivos reales que se pueden encapsular en una lista o algo similar si es necesario.
Su programa debe generar el mismo valor sin importar el orden en que se ingresen las tres longitudes laterales.
Esos tres números siempre serán longitudes laterales válidas de un triángulo (triángulos degenerados como uno con longitudes laterales 1
, 1
y 2
no se darán como entrada). No debe preocuparse por las imprecisiones de coma flotante cuando los valores se vuelven extremadamente cercanos a un triángulo degenerado (por ejemplo, es aceptable que su programa produzca un error division by 0
de entrada [1, 1, 1.9999999999999999]
).
La entrada se puede dar a través STDIN
, como un argumento de función, o algo similar.
Salidas
La salida es un número real mayor o igual 1
con la precisión estándar que es aceptable en su idioma.
La salida puede imprimirse STDOUT
, devolverse desde una función o algo similar.
Casos de prueba
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
Tanteo
Este es el código de golf , por lo que gana la respuesta más corta en bytes.
fuente
42.0
lugar de42
.0
?Respuestas:
Jalea , 6 bytes
Esta respuesta se basa en la respuesta 05AB1E de Emigna . Muchas gracias a Dennis y Lynn por su ayuda para resolver esta respuesta. Sugerencias de golf bienvenidas! Pruébalo en línea!
Ungolfing
fuente
⁸÷
se apaga de la cadena como una unidad, y debe leerse como dividir el argumento izquierdo inicial por esto , o algo así.Jalea , 7 bytes
Pruébalo en línea!
Explicación
Leamos esta cadena:
El argumento implícito es una lista
[a, b, c]
.Primero leemos
S
. Esto toma la suma:a + b + c
.Entonces, leemos
H
. Esto reduce a la mitad que:(a + b + c)/2
. (Esto ess
)Luego, leemos una díada
_
(resta), seguida de otra díada. Este es un gancho : carece de un argumento correcto, por lo que recibe el argumento de esta cadena,[a, b, c]
dándonos[s-a, s-b, s-c]
. (Este es el quinto patrón de cadena en la tabla aquí ).Luego, leemos el par de díadas y mónadas
÷@H
. Esto es una bifurcación :÷@
es una división con los argumentos invertidos, yH
se divide por la mitad, por lo que nuestro valor de trabajo obtieneH
el argumento de esta cadena÷
. Esto vectoriza; nos quedamos con[(a/2)/(s-a), (b/2)/(s-b), (c/2)/(s-c)]
. (Este es el segundo patrón de cadena en la tabla aquí ).Finalmente, tomamos el producto
P
y nos llevamosabc/(8(s-a)(s-b)(s-c))
.Vea un gráfico en forma de árbol de cómo se unen los enlaces.
fuente
Jalea , 6 bytes
Pruébalo en línea!
Cómo funciona
fuente
³⁴⁵
como argumentos ...JavaScript, 38 bytes
Esta es una lambda (al curry ):
(Si lo asigna a una variable
f
, deberá llamarlo asíf(3)(4)(5)
)fuente
s = 1/2(a+b+c)
a la fórmula y simplifique: D (por ejemplos-a = .5*b+.5*c-.5*a
, y los tres factores de.5
cancelar con8
)(a,b,c)=>
tiene la misma longitud y cuesta menos bytes llamar;)05AB1E ,
117 bytes05AB1E utiliza codificación CP-1252 .
Pruébalo en línea!
Explicación
fuente
MATL ,
87 bytesPruébalo en línea!
Explicación
Usemos la entrada
[3 4 5]
como ejemplofuente
R,
3429 bytesLee la entrada de la entrada estándar y tienda como el R-vector
x
. Luego, utilice la vectorización de R para formar el denominador.fuente
Haskell, 36 bytes
Esto define la función
#
que toma tres argumentos.Tienes que llamarlo de la siguiente manera:
(3#4)5
Un poco más largo pero quizás más golfable:
fuente
MATLAB,
64 3825 bytesEsta es una función anónima que implementa la fórmula como se proporciona:
Se supone que la entrada es una lista de tres valores, por ejemplo
[3,4,5]
. Este ejemplo se usa en la siguiente explicación:fuente
Mathematica, 20 bytes
Toma la entrada como una lista de tres valores, que se conoce como
#
dentro de la función.Tr@
es la forma más corta de sumar una lista (para obtener2s
) y1##&@@(...)
multiplica los tres factoresi/(2s-2i)
parai
ina, b, c
.Si las entradas son números enteros o racionales, obtendrá un resultado exacto.
fuente
Python 3 , 42 bytes
¡Pruébelo en línea!
fuente
OCaml, 51 bytes
Sí, operadores separados para flotadores ...
fuente
Preguntarse , 48 bytes
Q.E.P.D
Uso:
Explicación
Las llamadas a funciones son costosas en Wonder en comparación con los operadores infijos en otros idiomas. Debido a esto, contuve todos los términos en una matriz y obtuve el producto del resultado en lugar de multiplicar cada término. El código sería equivalente a algo como:
fuente
En realidad ,
108 bytesEsta respuesta se basa en la excelente respuesta Jelly de Dennis . Sugerencias de golf bienvenidas! Pruébalo en línea!
Ungolfing
fuente
Minecraft 1.8, 1607 bytes + 85 bloques = 1692 blytes
Advertencia: no golf. Golfed tendrá un máximo de 1 / 3 menos blytes.
Aquí hay una captura de pantalla comentada:
Las entradas son
a
,b
yc
, y la salida esfin
fin
, y todas las demás variables en Minecraft son enteros, por lo que la precisión estándar de Minecraft es 0 puntos decimalesEl borde verde: los bloques de comandos de la izquierda se activarán después de los de la derecha, que son solo inicializaciones variables.
La palanca (rectángulo gris-marrón en la parte inferior derecha) es el disparador del artilugio
Ocupa mucho debido a la forma en que Minecraft maneja las variables . Una visión general muy simplificada:
/scoreboard objectives add name dummy
crea una nueva variable llamada "name
"/scoreboard players set @p name number
establece la variablename
anumber
. El número debe ser un número real, no una variable./scoreboard players operation @p name += @p name2
incrementosname
porname2
.name2
debe ser una variable, no un número.-=
,/=
,*=
,=
Y más puede utilizarse en lugar+=
de decremento, multiplicar, dividir, etc.No voy a publicar todos los 43 comandos aquí. Esto ayudaría a jugar golf, pero también me volvería loco.
Si se usarían 1.9 bloques de comando, la solución (al menos) usaría 42 bloques menos. Si se usaran variables de una letra, se guardarían casi 200 bytes.
fuente
Java, 38 bytes
Prueba y sin golf
¡Pruébalo!
Salida
fuente
(a,b,c)
haciendo trampa aquí, porque no contiene información de tipo. En mi opinión, la interfaz lambda implícita (en su casoF
) debe contar en la suma total de bytes.Medusa ,
1716 bytesGracias a Zgarb por guardar 1 byte.
Pruébalo en línea!
Explicación
Esto se basa en la misma fórmula recíproca que la respuesta de Dennis .
En la notación funcional más tradicional, el programa anterior dice lo siguiente:
¿Dónde
i
está la lista de entrada? Tenga en cuenta quefold(multiply, ...)
solo calcula el producto yfold(add, ...)
la suma, por lo que podemos simplificar aún más esto para:El
sum(i) / i
se implementa a través del gancho)/+
que define una nueva función unaria para realizar ambos pasos a la vez.fuente
Dyalog APL ,
109 bytesEste es un tren de funciones anónimo (encima de una bifurcación de una bifurcación de una bifurcación), lo que significa que cada subfunción se aplica al argumento, dentro de la siguiente estructura:
TryAPL en línea!
×/
el producto de⊢
los argumentos÷
dividido por+/
la suma de los argumentos-
menos+⍨
los argumentos se duplicaron (literalmente se agregaron a sí mismos)Fondo matemático
ngn se afeitó un byte.
fuente
2sable , 6 bytes
Un puerto de Dennis 'Jelly responde .
Utiliza la codificación CP-1252 . Pruébalo en línea!
fuente
cc, 49 bytes
Una implementación directa de la fórmula dada. Solicita las tres entradas al invocar en tres líneas separadas y genera un valor de punto flotante con 5 dígitos después del punto decimal a la siguiente línea.
Explicación
fuente
TI-Basic, 11 bytes
La entrada debe tener la forma de una lista, como
{A B C}
.Quizás esta ayuda visual (recuerde eso
2s = a+b+c
):fuente
Perl 6 , 44 bytes
fuente
Python, 55 bytes
Crédito a Dennis . Acabo de portar. En Python, un lenguaje muy descuidado.
fuente
Adelante, 83 bytes
Asume que los parámetros de coma flotante comienzan en la pila de coma flotante. Deja el resultado en la pila de coma flotante. Usar el stack para params / return es el estándar para Forth.
Pruébelo en línea : contiene todos los casos de prueba
Utiliza la fórmula
a*b*c * 1/ ( -(a+b-c) * -(b+c-a) * (a+c-b) )
. Casi todo el programa usa solo la pila de coma flotante. La excepción es3
en3 fpick
. Este programa requiere un intérprete que admitafpick
(Ideone funciona, repl.it no).Explicación: un poco menos golfizado
fuente
ised : 19 bytes
Llámalo como
ised --l 'inputfile.txt' '@*$1/@*{@+$1-2.*$1}'
dondeinputfile.txt
puede haber un archivo con una matriz separada por espacios, o-
para recibir de pipe / stdin.Versión Unicode (mismo bytecount pero 3 caracteres menos):
Desafortunadamente,
ised
desperdicia muchos caracteres por su sintaxis de argumento de entrada.fuente
vba, 76
Llamar con
o en sobresalir con
fuente
Public Function r(a,b,c):r=a*b*c/(b+c-a)/(a-b+c)/(a+b-c):End Function
C #, 82 bytes
Uso:
fuente
Pyke, 12 bytes
Pruébalo aquí!
Bueno, BlueEyedBeast, tuviste tu oportunidad. Usé un buen algoritmo aquí.
fuente
k, 19 bytes
Evalúa de derecha a izquierda: divida la lista x por 2, sume el resultado y reste de la x original. Negar la respuesta y obtener el producto del resultado y 8. El resultado es el denominador, el numerador es el producto de la lista.
fuente
Lua, 45 bytes
Muy basado en la respuesta de JavaScript.
fuente