Dados três comprimentos laterais de um triângulo, avalie sua razão de aspecto AR, de acordo com a seguinte fórmula:
Onde
Quanto mais próximo da equilateridade um triângulo estiver, mais próximo de 1
sua proporção. A proporção é maior ou igual a 1
triângulos válidos.
Entradas
A entrada são três números positivos reais que podem ser encapsulados em uma lista ou algo semelhante, se necessário.
Seu programa deve gerar o mesmo valor, independentemente da ordem em que os três comprimentos laterais são inseridos.
Esses três números será sempre sidelengths válidas de um triângulo (triângulos degenerados como uma com sidelengths 1
, 1
e 2
não vai ser dada como entrada). Você não precisa se preocupar com imprecisões de ponto flutuante quando os valores se tornam extremamente próximos a um triângulo degenerado (por exemplo, é aceitável que seu programa tenha erro division by 0
ao inserir [1, 1, 1.9999999999999999]
).
A entrada pode ser fornecida através de STDIN
, como argumento de função, ou qualquer coisa semelhante.
Saídas
A saída é um número real maior ou igual à 1
precisão padrão aceitável no seu idioma.
A saída pode ser impressa STDOUT
, retornada de uma função ou qualquer coisa semelhante.
Casos de teste
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
Pontuação
Isso é código-golfe , então a resposta mais curta em bytes vence.
fonte
42.0
vez de42
.0
?Respostas:
Gelatina , 6 bytes
Esta resposta é baseada na resposta 05AB1E de Emigna . Muito obrigado a Dennis e Lynn por sua ajuda na definição desta resposta. Sugestões de golfe são bem-vindas! Experimente online!
Ungolfing
fonte
⁸÷
é extraído da cadeia como uma unidade e deve ser lido como dividir o argumento inicial de esquerda por isso ou algo assim.Geléia , 7 bytes
Experimente online!
Explicação
Vamos ler esta cadeia:
O argumento implícito é uma lista
[a, b, c]
.Primeiro lemos
S
. Isso leva a soma:a + b + c
.Então, lemos
H
. Este metades que:(a + b + c)/2
. (Isso és
.)Em seguida, lemos uma díade
_
(subtrair), seguida por outra díade. Isso é um gancho : falta um argumento correto, então ele recebe o argumento dessa cadeia,[a, b, c]
nos dando[s-a, s-b, s-c]
. (Este é o quinto padrão de cadeia na tabela aqui .)Então, lemos o par díade-mônada
÷@H
. Isso é uma bifurcação :÷@
é uma divisão com os argumentos invertidos eH
é dividido pela metade, então nosso valor de trabalho recebeH
o argumento dessa cadeia÷
por ele. Isso vetoriza; nos resta[(a/2)/(s-a), (b/2)/(s-b), (c/2)/(s-c)]
. (Este é o segundo padrão de cadeia na tabela aqui .)Finalmente, levamos o produto
P
para nósabc/(8(s-a)(s-b)(s-c))
.Veja um gráfico em forma de árvore de como os links se encaixam.
fonte
Gelatina , 6 bytes
Experimente online!
Como funciona
fonte
³⁴⁵
como argumentos ...JavaScript, 38 bytes
Este é um lambda (com curry ):
(Se você o atribuir a uma variável,
f
precisará chamá-lo comof(3)(4)(5)
)fonte
s = 1/2(a+b+c)
na fórmula e simplificar: D (por exemplos-a = .5*b+.5*c-.5*a
, e os três factores de.5
cancelar com8
)(a,b,c)=>
é o mesmo comprimento, e custa menos bytes a chamada;)05AB1E ,
117 bytes05AB1E usa a codificação CP-1252 .
Experimente online!
Explicação
fonte
MATL ,
87 bytesExperimente online!
Explicação
Vamos usar a entrada
[3 4 5]
como um exemplofonte
R,
3429 bytesLê a entrada da entrada padrão e armazenar como o R-vector
x
. Então faça uso da vetorização de R para formar o denominador.fonte
Haskell, 36 bytes
Isso define a função
#
que recebe três argumentos.Você deve chamá-lo da seguinte maneira:
(3#4)5
Um pouco mais, mas talvez mais jogável:
fonte
MATLAB,
64 3825 bytesEssa é uma função anônima que implementa a fórmula conforme fornecida:
Assume que a entrada seja uma lista de três valores, por exemplo
[3,4,5]
. Este exemplo é usado na seguinte explicação:fonte
Mathematica, 20 bytes
Recebe a entrada como uma lista de três valores, que são referidos como
#
dentro da função.Tr@
é a maneira mais curta de somar uma lista (obter2s
) e1##&@@(...)
multiplica os três fatoresi/(2s-2i)
parai
ina, b, c
.Se as entradas forem números inteiros ou números racionais, você obterá um resultado exato.
fonte
Python 3 , 42 bytes
Experimente Online!
fonte
OCaml, 51 bytes
Sim, operadores separados para carros alegóricos ...
fonte
Maravilha , 48 bytes
DESCANSE EM PAZ
Uso:
Explicação
As chamadas de função são caras no Wonder, quando comparadas aos operadores de infix em outros idiomas. Por causa disso, eu conti todos os termos em uma matriz e obtive o produto do resultado em vez de multiplicar cada termo. O código seria equivalente a algo como:
fonte
Na verdade ,
108 bytesEssa resposta é baseada na excelente resposta de Dennis à geléia . Sugestões de golfe são bem-vindas! Experimente online!
Ungolfing
fonte
Minecraft 1.8, 1607 bytes + 85 blocos = 1692 blytes
Aviso: Não joga golfe. Golfed vai demorar até 1 / 3 menos blytes.
Aqui está uma captura de tela comentada:
As entradas são
a
,b
, ec
, e a saída éfin
fin
, e todas as outras variáveis no Minecraft são números inteiros; portanto, a precisão padrão do Minecraft é 0 ponto decimalA borda verde: os blocos de comando à esquerda serão ativados após os da direita, que são apenas inicializações variáveis.
A alavanca (retângulo cinza-marrom no canto inferior direito) é o gatilho da engenhoca
É preciso muito por causa da maneira como o Minecraft lida com variáveis . Uma visão geral muito simplificada:
/scoreboard objectives add name dummy
cria uma nova variável chamada "name
"/scoreboard players set @p name number
define a variávelname
paranumber
. O número deve ser um número real, não uma variável./scoreboard players operation @p name += @p name2
incrementaname
emname2
.name2
deve ser uma variável, não um número.-=
,/=
,*=
,=
E mais podem ser utilizados em vez+=
de decremento, multiplicar, divisão, etc.Não vou postar todos os 43 comandos aqui. Ajudaria a jogar isso, mas também me deixaria louco de copypasting
Se 1.9 blocos de comando fossem usados, a solução usaria (pelo menos) 42 blocos a menos. Se variáveis de uma letra fossem usadas, quase 200 bytes seriam salvos.
fonte
Java, 38 bytes
Testando e não-destruído
Teste-o!
Saída
fonte
(a,b,c)
está meio que trapaceando aqui, porque não contém informações de tipo. Na IMO, a interface lambda implícita (no seu casoF
) deve contar na soma total de bytes.Água-viva ,
1716 bytesAgradecemos ao Zgarb por economizar 1 byte.
Experimente online!
Explicação
Isso se baseia na mesma fórmula recíproca da resposta de Dennis .
Na notação funcional mais tradicional, o programa acima é o seguinte:
Onde
i
está a lista de entrada. Observe quefold(multiply, ...)
apenas calcula o produto efold(add, ...)
a soma, para que possamos simplificar ainda mais isso:O
sum(i) / i
é implementado através do gancho,)/+
que define uma nova função unária para executar as duas etapas ao mesmo tempo.fonte
Dyalog APL ,
109 bytesEste é um trem de funções anônimas (no topo de um garfo de um garfo de um garfo), o que significa que todas as subfunções são aplicadas ao argumento, dentro da seguinte estrutura:
TryAPL online!
×/
o produto de⊢
os argumentos÷
dividido por+/
a soma dos argumentos-
menos+⍨
os argumentos dobraram (lit. adicionados a si mesmos)Formação matemática.
ngn raspou um byte.
fonte
2sable , 6 bytes
Um porto da resposta de Dennis 'Jelly .
Usa a codificação CP-1252 . Experimente online!
fonte
dc, 49 bytes
Uma implementação direta da fórmula fornecida. Solicita as três entradas na chamada em três linhas separadas e gera um valor de ponto flutuante com 5 dígitos após o ponto decimal para a próxima linha.
Explicação
fonte
TI-Basic, 11 bytes
A entrada deve estar na forma de uma lista, como
{A B C}
.Talvez esse visual ajude (lembre-se disso
2s = a+b+c
):fonte
Perl 6 , 44 bytes
fonte
Python, 55 bytes
Crédito para Dennis . Acabei de portar. Em Python, uma linguagem muito negligenciada.
fonte
Quarto, 83 bytes
Assume que os parâmetros de ponto flutuante iniciam na pilha de ponto flutuante. Deixa o resultado na pilha de ponto flutuante. O uso da pilha para parâmetros / retorno é o padrão para a Forth.
Experimente online - contém todos os casos de teste
Usa a fórmula
a*b*c * 1/ ( -(a+b-c) * -(b+c-a) * (a+c-b) )
. Praticamente todo o programa está usando apenas a pilha de ponto flutuante. A excepção é o3
no3 fpick
. Este programa requer um intérprete que suportefpick
(Ideone funciona, repl.it não).Explicação: um pouco menos de golfe
fonte
ised : 19 bytes
Chame-o como
ised --l 'inputfile.txt' '@*$1/@*{@+$1-2.*$1}'
ondeinputfile.txt
pode ser um arquivo com matriz separada por espaço ou-
para receber do pipe / stdin.Versão Unicode (o mesmo número de bytes, mas 3 caracteres a menos):
Infelizmente,
ised
desperdiça muitos caracteres por sua sintaxe de argumento de entrada.fonte
vba, 76
Ligue com
ou no excel com
fonte
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:
fonte
Pyke, 12 bytes
Experimente aqui!
Bem, BlueEyedBeast, você teve sua chance. Eu usei um bom algoritmo aqui.
fonte
k, 19 bytes
Avalia da direita para a esquerda - divida a lista x por 2, some o resultado e subtraia-o do x original. Negar a resposta e obter o produto do resultado e 8. O resultado é o denominador, o numerador é o produto da lista.
fonte
Lua, 45 bytes
Fortemente baseado na resposta JavaScript.
fonte