A Pitágoras le volaron la pierna en la guerra. Tuvo que ser amputado, y aunque estuvo a punto de morir, se recuperó y se recuperó por completo. Ahora, después de un año de caminar con muletas, ¡tiene el privilegio de obtener una prótesis en la pierna! Sin embargo, hay varios que encajan, pero ¿cuáles?
La tarea
Dado un entero positivo como entrada que es la longitud de un tramo de un triple pitagórico, genera todas las posibilidades para el otro tramo. Por ejemplo, el triple pitagórico más pequeño es (3,4,5), que forma un triángulo con dos patas de longitud 3 y 4, y una hipotenusa de longitud 5.
Ejemplos
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
Las normas
- La entrada será un solo entero positivo
n
. - La salida puede estar en cualquier orden, con cualquier delimitador, en cualquier base (aunque esta base debe ser consistente), y con llaves de apertura y cierre opcionales, y espacios en blanco finales opcionales. Es decir, que
1 2 3
,[1,2,3]
y1,11,111
todos se ajustan a esta especificación de salida. - Puede suponer que
n
nunca será mayor que un cuarto de la cuarta raíz del límite de su idioma (sin usar bibliotecas). En la práctica, puede suponer que la entrada será menor que esto o 10,000, lo que sea menor.
Pitágoras te está esperando, ¡así que mejor escribe tu código rápido y corto!
Respuestas:
Pyth - 13 bytes
Brute fuerza a todos los posibles hasta
n^2+1
.Test Suite .
fuente
Jalea , 8 bytes
Esta respuesta no es competitiva, ya que utiliza características que se han implementado después de que se publicó el desafío. Pruébalo en línea!
Este enfoque no utiliza matemática de coma flotante, por lo que dará la respuesta correcta siempre que las listas intermedias puedan caber en la memoria.
Idea
Si (a, b, c) es un triple pitagórico, hay enteros estrictamente positivos k, m, n de tal manera que la igualdad establecida {a, b} = {km 2 - kn 2 , 2kmn} se mantiene.
En particular, esto significa que a <b 2 y b <a 2 , por lo que para la entrada a simplemente podemos verificar si a 2 + b 2 es un cuadrado perfecto para cada b en {1, ... a 2 } .
Código
fuente
Julia, 35 bytes
Esta es una función anónima que acepta un número entero y devuelve una matriz.
Para cada uno
i
desde 1 hasta la entrada al cuadrado, calculamos la hipotenusa usando la función incorporada de Juliahypot
, y determinamos si la porción fraccional es 0. Si es así, la mantenemos, de lo contrario está excluida.fuente
CJam, 17 bytes
Esta es una función anónima que saca un número entero de la pila y deja una matriz a cambio.
Pruébalo en línea!
Idea
Si (a, b, c) es un triple pitagórico, hay enteros estrictamente positivos k, m, n de modo que la igualdad establecida {a, b} = {km 2 - kn 2 , 2kmn} mantiene.
En particular, esto significa que a <b 2 y b <a 2 , por lo que para la entrada a simplemente podemos verificar si a 2 + b 2 es un cuadrado perfecto para cada b en {1, ... a 2 } .
Código
fuente
JavaScript ES6, 60
62Igual que las otras respuestas, comprobando de 1 a a * a-1
Gracias a @ Mwr247, la forma más corta de construir un rango en ES6
2 bytes guardados thx @ETHproductions
fuente
a=>[...Array(a*a).keys()].filter(b=>b&&!(Math.hypot(a,b)%1))
C, 96 bytes
Incremente alternativamente
y
(la otra pierna) yz
(la hipotenusa) hasta que su diferencia baje a 1. Genere cada coincidencia exacta (c==0
) que encuentre en el camino.Llame al programa compilado con n como parámetro; generará una lista de números decimales separados por espacios.
Obviamente no es el más corto; Puedo encontrar consuelo en tener el más rápido.
fuente
Wolfram Language (Mathematica) , 40 bytes
Estoy usando una forma no documentada de
Solve
: cuando se omite la lista de variables, porSolve
defecto se resuelve todos los símbolos en la expresión. De este modo, ahorramos 6 bytes sobre los más regularesSolve[#^2+b^2==c^2,{b,c},PositiveIntegers]
.PositiveIntegers
es nuevo en la versión 12 de Mathematica y, por lo tanto, no está disponible en TIO . En el escritorio de Mathematica, obtenemosfuente
Python 2, 53 bytes
Una solución sencilla que utiliza complejos
abs
para calcular la longitud de la hipotenusa. Es seguro usarlon*n
como límite superior para la otra pierna porque(n*n)^2 + n^2 < (n*n+1)^2
. Intenté usar la recursión, pero no obtuve nada más corto.fuente
En serio, 20 bytes
La misma estrategia que la respuesta de Python de xnor: verifique los
i in range(1,n*n)
valores dondeabs(i+nj) % 1 == 0
y envíe la lista. Pruébalo en líneaExplicación:
fuente
PARI / GP, 36 bytes
fuente
APL (NARS), 373 caracteres, 746 bytes
comentario:
La idea sería factorizar la entrada para conocer la posible m, n que se genera usando t todo el triple pitagórico que tiene la entrada como pata. Prueba:
fuente
APL (Dyalog Extended) ,
15SBCSde14 bytesFunción de prefijo tácito anónimo.
Pruébalo en línea!
×⍨
cuadrado (lit. selfie multiplicación de) el argumento(
...)
aplique la siguiente función tácita anónima:⍳
tetegers 1 a través del argumento⍳
multiplicar por te ntegers 1 a través del argumento (es decir, cuadrado)⊢(
...)
aplique la siguiente función tácita anónima con el argumento como argumento izquierdo:+
es la suma∊
un miembro de⊢
¿eso?⍸
ɩ ndices de verdadesfuente
Perl 5, 43 bytes
Si desea que el script para finalizar, podemos inspeccionar otras patas hasta N² solamente, como se explica más por XNOR , por lo que tenemos 48 bytes:
fuente
Japt , 16 bytes
Pruébalo en línea!
Cómo funciona
fuente
Stax , 8 bytes
Ejecutar y depurarlo
En pseudocódigo:
fuente
05AB1E , 10 bytes
Pruébelo en línea o verifique todos los casos de prueba .
Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente
MathGolf , 9 bytes
Pruébalo en línea!
No se pudo encontrar una buena manera de eliminar ninguno de los
²
s, que ocupan 3/9 bytes. De lo contrario, es bastante sencilloExplicación
fuente
Java 8, 72 bytes
Pruébalo en línea.
Explicación:
fuente