Pitágoras teve sua perna estourada na guerra. Tinha que ser amputado e, embora ele quase morresse, ele se recuperou e se recuperou completamente. Agora, depois de um ano andando de muletas, ele tem o privilégio de ter uma perna protética! A coisa é, porém, existem vários que se encaixam, mas quais?
A tarefa
Dado um número inteiro positivo como entrada, que é o comprimento de uma perna de um triplo pitagórico, gera todas as possibilidades para a outra perna. Por exemplo, o menor triplo pitagórico é (3,4,5), que forma um triângulo com duas pernas de comprimento 3 e 4 e uma hipotenusa de comprimento 5.
Exemplos
Leg:5
12
Leg:28
21
45
96
195
Leg:101
5100
Leg:1001
168
468
660
2880
3432
4080
5460
6468
10200
38532
45540
71568
501000
As regras
- A entrada será um único número inteiro positivo
n
. - A saída pode estar em qualquer ordem, com qualquer delimitador, em qualquer base (embora essa base deva ser consistente), com chaves de abertura e fechamento opcionais e espaço em branco à direita opcional. Ou seja,
1 2 3
,[1,2,3]
, e1,11,111
todos se encaixam esta especificação de saída. - Você pode supor que
n
nunca será maior que um quarto da quarta raiz do limite do seu idioma (sem usar bibliotecas). Na prática, você pode assumir que a entrada será menor que isso ou 10.000, o que for menor.
Pitágoras está esperando por você, então é melhor escrever seu código rápido e rápido!
Respostas:
Pitão - 13 bytes
O bruto força todos os possíveis até o momento
n^2+1
.Conjunto de Teste .
fonte
Geléia , 8 bytes
Essa resposta não é concorrente, pois usa recursos que foram implementados após o lançamento do desafio. Experimente online!
Essa abordagem não usa matemática de ponto flutuante; portanto, fornecerá a resposta correta desde que as listas intervenientes possam caber na memória.
Idéia
Se (a, b, c) é um triplo pitagórico, existem números inteiros estritamente positivos k, m, n de modo que a igualdade definida {a, b} = {km 2 - kn 2 , 2kmn} é válida.
Em particular, isto significa que a <b 2 e b <a 2 , então para a entrada de um podemos simplesmente verificar se um 2 + b 2 é um quadrado perfeito para cada b em {1, ... um 2 } .
Código
fonte
Julia, 35 bytes
Esta é uma função anônima que aceita um número inteiro e retorna uma matriz.
Para cada um
i
de 1 à entrada ao quadrado, calculamos a hipotenusa usando ahypot
função incorporada de Julia e determinamos se a parte fracionária é 0. Nesse caso, mantemos-a, caso contrário, ela será excluída.fonte
CJam, 17 bytes
Esta é uma função anônima que exibe um número inteiro da pilha e deixa uma matriz em troca.
Experimente online!
Idéia
Se (a, b, c) é um triplo pitagórico, existem números inteiros estritamente positivos k, m, n de modo que a igualdade definida {a, b} = {km 2 - kn 2 , 2kmn} é válida.
Em particular, isto significa que a <b 2 e b <a 2 , então para a entrada de um podemos simplesmente verificar se um 2 + b 2 é um quadrado perfeito para cada b em {1, ... um 2 } .
Código
fonte
JavaScript ES6, 60
62O mesmo que as outras respostas, verificando de 1 a a * a-1
Thx to @ Mwr247 a maneira mais curta de criar um intervalo no ES6
2 bytes salvos thx @ETHproductions
fonte
a=>[...Array(a*a).keys()].filter(b=>b&&!(Math.hypot(a,b)%1))
C, 96 bytes
Aumente alternadamente
y
(a outra perna) ez
(a hipotenusa) até que a diferença diminua para 1. Faça a saída de cada correspondência exata (c==0
) que encontrar no caminho.Chame o programa compilado com n como parâmetro; ele produzirá uma lista separada por espaços de números decimais.
Obviamente não é o mais curto; Eu posso encontrar conforto em ter o mais rápido.
fonte
Wolfram Language (Mathematica) , 40 bytes
Estou usando uma forma não documentada de
Solve
: quando a lista de variáveis é omitida, oSolve
padrão é resolver para todos os símbolos na expressão. Assim, economizamos 6 bytes sobre os mais regularesSolve[#^2+b^2==c^2,{b,c},PositiveIntegers]
.PositiveIntegers
é novo na versão 12 do Mathematica e, portanto, não está disponível no TIO . No desktop Mathematica, obtemosfonte
Python 2, 53 bytes
Uma solução simples usando complexo
abs
para calcular o comprimento da hipotenusa. É seguro usarn*n
como limite superior para a outra perna, porque(n*n)^2 + n^2 < (n*n+1)^2
. Tentei usar a recursão, mas não obtive nada mais curto.fonte
Sério, 20 bytes
Mesma estratégia da resposta Python do xnor: verifique os
i in range(1,n*n)
valores whereabs(i+nj) % 1 == 0
e envie a lista. Experimente onlineExplicação:
fonte
PARI / GP, 36 bytes
fonte
APL (NARS), 373 caracteres, 746 bytes
Comente:
A idéia seria fatorar a entrada para conhecer os possíveis m, n que geram usando t todo o triplo pitagórico que tem a entrada como perna. Teste:
fonte
APL (Dyalog Extended) ,
1514 bytes SBCSFunção de prefixo tácito anônimo.
Experimente online!
×⍨
quadrado (lit. selfie multiplicação de) o argumento(
…)
Aplique a seguinte função tácita anônima:⍳
ntegers 1 através do argumento⍳
multiplicar por ɩ ntegers 1 através do argumento (ie quadrado)⊢(
…)
Aplique a seguinte função tácita anônima com o argumento à esquerda:+
é a soma∊
um membro de⊢
isto?⍸
índices de verdadesfonte
Perl 5, 43 bytes
Se você deseja que o script seja finalizado, podemos inspecionar outras partes até n² apenas, conforme explicado pelo xnor , para termos 48 bytes:
fonte
Japonês , 16 bytes
Experimente online!
Como funciona
fonte
Stax , 8 bytes
Execute e depure
No pseudo-código:
fonte
05AB1E , 10 bytes
Experimente online ou verifique todos os casos de teste .
Experimente online ou verifique todos os casos de teste .
Explicação:
fonte
MathGolf , 9 bytes
Experimente online!
Não foi possível encontrar uma boa maneira de remover qualquer um dos
²
s, que ocupam 3/9 bytes. Caso contrário, é bastante simplesExplicação
fonte
Java 8, 72 bytes
Experimente online.
Explicação:
fonte