De http://en.wikipedia.org/wiki/Triangle :
Escreva um programa que use três tuplas de coordenadas 2D (cartesianas) e classifique o formato que esses três pontos descrevem.
Em quase todos os casos, esses pontos descreverão um triângulo de tipos variados. Em alguns casos degenerados, os pontos descrevem um ponto singular ou uma linha reta. O programa determinará quais das seguintes tags se aplicam à forma descrita:
- Ponto (3 pontos são co-incidentes)
- Linha (3 pontos em uma linha reta - não mais que 2 pontos podem ser co-incidentes)
- Equilateral (3 lados iguais, 3 ângulos iguais)
- Isósceles (2 lados iguais, 2 ângulos iguais)
- Escaleno (0 lados iguais, 0 ângulos iguais)
- Direita (1 ângulo exatamente π / 2 (ou 90 °))
- Oblíquo (0 ângulo exatamente π / 2 (ou 90 °))
- Obtuso (1 ângulo> π / 2 (ou 90 °))
- Agudo (3 ângulos <π / 2 (ou 90 °))
Observe que, para algumas formas descritas, mais de uma das tags acima será aplicada. Por exemplo, qualquer ângulo reto também será isósceles ou escaleno.
Entrada
- O programa pode ler as 3 coordenadas de entrada de STDIN, linha de comando, variáveis de ambiente ou qualquer outro método conveniente para o seu idioma de escolha.
- A entrada coordena minha formatação, mas é conveniente para o seu idioma de escolha. Pode-se supor que todos os números de entrada sejam bem formados com relação aos tipos de dados que você acaba usando.
- Nada pode ser assumido sobre a ordem das coordenadas de entrada.
Saída
- O programa exibirá STDOUT, caixa de diálogo ou qualquer outro método de exibição conveniente para o seu idioma de escolha.
- A saída exibirá todos os tags aplicáveis à forma descrita pelas coordenadas de entrada.
- As tags podem ser exibidas em qualquer ordem.
Outras regras
- As bibliotecas / APIs trigonométricas do seu idioma são permitidas, mas quaisquer APIs que calculam especificamente tipos de triângulo são proibidas.
- Ao determinar a igualdade de ângulos ou comprimentos de lados, você provavelmente acabará comparando valores de ponto flutuante. Dois desses valores devem ser considerados "iguais" se um estiver dentro de 1% do outro.
- “Brechas” padrão que não são mais engraçadas
- Isso é código-golfe , então a resposta mais curta em bytes vence.
Exemplos
Input Output
(1,2) (1,2) (1,2) Point
(1,2) (3,4) (5,6) Line
(0,0) (1,1) (2,0) Isosceles Right
(0,0) (2,1) (10,1) Scalene Oblique Obtuse