Dado a, b, c
o comprimento dos três lados de um triângulo, diga se o triângulo é angular (ou seja, tem um ângulo igual a 90 graus) ou não.
Entrada
Três valores inteiros positivos em qualquer ordem
Resultado
Ou uma verdadeira potência específica ( true
, 1
, yes
, ...) ou uma saída específica falso ( false
, 0
, no
, ...)
Exemplo
5, 3, 4 --> yes
3, 5, 4 --> yes
12, 37, 35 --> yes
21, 38, 50 --> no
210, 308, 250 --> no
Regras
- A entrada e saída podem ser fornecidas em qualquer formato conveniente .
- Em seu envio, indique os valores verdadeiro e falso.
- Não há necessidade de lidar com valores negativos ou com borda tripla inválida
- Um programa completo ou uma função são aceitáveis. Se uma função, você pode retornar a saída em vez de imprimi-la.
- Se possível, inclua um link para um ambiente de teste on-line para que outras pessoas possam experimentar seu código!
- As brechas padrão são proibidas.
- Isso é código-golfe, portanto todas as regras usuais de golfe se aplicam e o código mais curto (em bytes) vence.
code-golf
math
decision-problem
geometry
mdahmoune
fonte
fonte
21, 38, 5
, porque 21 + 5 <38 . Esse é um caso patológico intencional com o qual devemos lidar?Respostas:
Gelatina , 5 bytes
Experimente online!
Nota técnica: Os bytes são contados na página de códigos Jelly.
Explicação:
O problema é equivalente a receber três números
a, b, c
e perguntar se existe uma permutação como essaa² + b² = c²
. Isso é equivalente a se(a² + b² + c²) ÷ 2
é um dosa², b² or c²
itens; portanto, o programa apenas verifica isso.fonte
²
eµ
custo dois bytes cada um em UTF-8, assim que seu código tem, na verdade, 7 bytes, não 5Python 2 , 37 bytes
Experimente online!
-2 graças ao FlipTack .
-1 graças a Craig Gidney .
Saídas via código de saída (
0
= false,1
= true).fonte
exec(code)
hmmm, por que emexec (code)
vez deexec code
? : D ;-pJava 8, 44 bytes
Explicação:
Experimente aqui.
fonte
(c*=c)
? O*=
pode ter precedência sobre o==
e você pode salvar dois bytes.==
tem precedência sobre*=
.=
,+=
,*=
, Atribuições e semelhantes realmente tem o menor precedência em operadores Java .a
(por exemplo), sem sucesso. Bem, eu poderia fazê-lo, mas com cerca de 65 caracteres ...JavaScript (ES6),
434140 bytesSalvo 1 byte e corrigido um erro graças a @Neil
Recebe a entrada como uma matriz de 3 números inteiros. Retorna
true
para ângulos retos efalse
outros.Mostrar snippet de código
Versão original, 44 bytes
Aceita entrada como 3 números inteiros. Retorna
1
para ângulos retos e0
outros.Casos de teste
Mostrar snippet de código
fonte
=>
e->
diferença entre JavaScript e Java 8). ;) Tão óbvio +1 de mim.>>1
é inseguro, isso retorna verdadeiro para[1, 1, 1]
.Math.hypot(...a,...a)==n*2
?~=
operador para "rougly igual";)Python 3 , 37 bytes
Experimente online!
Pode ocorrer problemas de precisão de flutuação com entradas grandes.
fonte
Triangular , 57 bytes
Ainda não vi nada nesse idioma e parecia apropriado tentar fazer um. Demorou um pouco ... já que eu tinha que pensar primeiro e acredito que isso poderia ser um pouco mais de golfe.
Experimente online!
Isso se expande para o seguinte triângulo.
O caminho é bastante complicado, mas vou tentar explicar o que fiz. Vou pular os ponteiros direcionais. A maior parte do código é manipulação de pilha.
$:*
Esquadrar a primeira entrada.$:*
Esquadre a segunda entrada.S":Ug!
Teste se o segundo valor é maior que o primeiro.p"
Trocar verdadeiro com o primeiro.p
Não faça nada.$:*
Esquadre a terceira entrada.P":USg!
Teste se o terceiro valor é maior que o maior do anterior.p+U-
soma verdadeira a pilha atual e tirar o terceiro valor armazenadop"U+-
soma falsa menor e armazenada terceira e subtrair da maior0=%
teste a igualdade para zero e o resultado da saída.fonte
Haskell (
333231 bytes)Versão original:
Função anônima. Pega uma lista no formato [a, b, c]. Saídas True ou False.
A primeira versão verificou se a soma dos quadrados era duas vezes o quadrado do máximo.
Segundo, uma versão um pouco melhor verifica se metade da soma dos quadrados é um elemento na lista de quadrados.
Edit: Contou acidentalmente uma nova linha, obrigado H.PWiz
fonte
sum
podem ser jogados fora. boa solução!Perl 6 , 24 bytes
Experimente online!
*²+*²==*²
é uma função anônima que retorna true se a soma dos quadrados dos dois primeiros argumentos for igual ao quadrado do terceiro argumento. Passamos a lista de entrada classificada para essa função, achatando-a na lista de argumentos com|
.fonte
R , 31
2630bytesEu não gosto muito deste, mas é mais curto. Soma os quadrados e divide pelo quadrado maior. Verdadeiramente se 2.
Versão anterior (modificada com gato e com a dica de @ Guiseppe)
Faça uma soma da entrada classificada com o último item negado e retorne o
!
não.Experimente online!
fonte
!sort(scan())^2%*%c(1,1,-1)
são 27 bytes. mas acho que você ainda precisa de umcat
.Flak cerebral , 68 bytes
Experimente online!
Usa a observação na resposta do usuário202729.
fonte
C (gcc) , 49 bytes
Experimente online!
Melhora a técnica de Kevin Cruijssens
Retorna 0 para um triângulo válido e um valor diferente de zero, caso contrário
fonte
MATL , 7 bytes
Experimente online!
Explicação
Considere entrada
[12, 37, 35]
.fonte
Python 2 , 43 bytes
Experimente online!
Python 2 ,
79706862 bytesExperimente online!
fonte
A*A
é mais curto ...-
vez de==
.C,
6854 bytesUsando a solução de user202729 .
Graças a @Christoph por jogar 14 bytes!
Experimente online!
C, 85 bytes
Experimente online!
fonte
1
para os parâmetros de1, 1, 1
que é errado ...f(a,b,c){a=!((a*=a)+(b*=b)-(c*=c)&&a-b+c&&a-b-c);}
Japonês , 8 bytes
Recebe entrada como uma matriz.
Tente
fonte
J, 10 bytes
-6 bytes graças ao FrownyFrog
resposta original
/:
classifique os quadrados*:
e verifique se a soma dos dois primeiros+/@}:
é igual ao último{:
Experimente online!
fonte
Triangularidade ,
4931 bytesExperimente online!
Explicação
Todo programa de triangularidade deve ter um preenchimento triangular (desculpe o trocadilho). Ou seja, a i- ésima linha da parte inferior do programa deve ser preenchida com i-1 pontos (
.
) em cada lado. Para manter os triângulos de pontos simétricos e esteticamente agradáveis, cada linha deve consistir em 2L - 1 caracteres, onde L é o número de linhas no programa. Removendo os caracteres que compõem o preenchimento necessário, eis como o código funciona:Verificando se um triângulo está em ângulo reto na Triangularidade ...
fonte
PowerShell , 39 bytes
Experimente online!
Classifica a entrada, armazena isso em
$a,$b,$c
variáveis. Em seguida, usa o teorema de Pitágoras para verificar sea*a + b*b = c*c
. A saída é booleanaTrue
ouFalse
.fonte
JavaScript 34 bytes (sem D =)
fonte
a=>a.sort()[0]**2+a[1]**2==a[2]**2
no ES6. Então adereços para você @DanielIndiesort()
usa a ordem lexicográfica quando nenhum retorno de chamada é fornecido, fazendo com que esse código falhe, por exemplo[10,6,8]
.RProgN 2 , 10 bytes
Explicado
Experimente online!
fonte
Raquete ,
6460 bytesExperimente online!
Como funciona
Testa se
a^2 + b^2 + c^2
é igual a duas vezes o maior dea^2
,b^2
ec^2
.Retorna
#t
para triângulos retos e#f
para todas as outras entradas.expt
.fonte
(define fun
deve ser uma parte do código ...(define fun ...)
on TIO é apenas por conveniência: poderíamos igualmente usar essa função como(... 3 4 5)
onde...
está a função. (Para que pudéssemos ter um cabeçalho de(print (
e um rodapé de3 4 5))
se preferir.)#lang racket
no código; outras não.)(max a b c)
do que fazer umalet
encadernação, não é? Suponho que não seria mais curto vincular como argumento a umλ
? Ou não há uma exponenciação embutida?(*(expt(max a b c)2)2)
?05AB1E , 6 bytes
Experimente online!
fonte
n{RÆ_
para salvar um byte.Ruby, 31 bytes
Leva a entrada como uma lista de 3 números inteiros. Usa algumas idéias de outras soluções.
fonte
Julia 0.6 , 16 bytes
Experimente online!
Como funciona
Seja x = [a, b, c] .
x⋅x
é o produto escalar de x e de si mesmo, portanto produz a² + b² + c² .2x.*x
é o produto dos elementos 2x e x , portanto, produz [2a², 2b², 2c²] .Finalmente,
∈
testa se o número inteiro a² + b² + c² pertence ao vetor [2a², 2b², 2c²] , o que é verdadeiro sea² + b² + c² = 2a² ou a² + b² + c² = 2b² ou a² + b² + c² = 2c² , o que em si é verdadeiro se
b² + c² = a² ou a² + c² = b² ou a² + b² = c² .
fonte
Java (OpenJDK 8) , 68 bytes
Experimente online!
fonte
sort
usa uma matriz.TI-Basic,
131110 bytesAgora funciona para entradas em qualquer ordem e também é mais curto. Mais -1 graças a @MishaLavrov
fonte
A=5
,B=4
,C=3
não seria tratado corretamente.)
,max(Ans=R►Pr(min(Ans),median(Ans
também será válido (embora o cálculo que estamos fazendo aqui seja diferente) e seja um byte mais curto.CJam, 9
Experimente online
Explicação:
fonte
Pari / GP ,
2924 bytesExperimente online!
Salvo cinco bytes por uma mudança óbvia de
norml2(v)
parav*v~
.Inspirado por outras respostas.
Aqui
v
deve haver um vetor de linhaou um vetor de colunacom três coordenadas.Exemplo de uso:
f([3,4,5])
Obviamente, você obtém comprimentos laterais racionais de graça, por exemplo
f([29/6, 10/3, 7/2])
.Se eu não contar a
f(v)=
parte, isso significa 19 bytes. A primeira parte também pode ser gravadav->
(total de 22 bytes).Explicação: Se as três coordenadas do
v
sãox
,y
ez
, em seguida, o produto dev
e sua transposiçãov~
dá um escalarx^2+y^2+^z^2
, e é preciso verificar se isso é igual a duas vezes o quadrado da máxima das coordenadasx
,y
,z
.Extra: Os mesmos
f
testes para um quadruplo pitagórico, se o seu vetor de entrada tiver quatro coordenadas, e assim por diante.fonte
tio.run
link . No entanto, é muito melhor instalar o PARI / GP localmente.MS Excel, 49 bytes
Função de planilha anônima que recebe entrada do intervalo [A1: C1] e sai para a célula chamadora.
fonte
Ohm v2 ,
86 bytesExperimente online!
fonte