La tarea
Escriba una función L () que tome dos argumentos Tuple de coordenadas en la forma (x, y), y devuelva sus respectivas funciones lineales en la forma (a, c), donde a es el coeficiente del término x y c es la intersección en y.
Puede suponer que la entrada no será una línea perpendicular al eje xy que las dos entradas son puntos separados.
Puntuación
Este es Code Golf: el programa más corto gana.
Nota: no se utilizan funciones matemáticas aparte de los operadores básicos (+, -, /, *).
Ejemplo
Aquí está mi solución sin golf en Python.
def L(Point1, Point2):
x = 0
y = 1
Gradient = (float(Point1[y]) - float(Point2[y])) / (float(Point1[x]) - float(Point2[x]))
YIntercept = Point1[y] - Gradient * Point1[x]
return (Gradient, YIntercept)
Salida:
>>> L( (0,0) , (1,1) )
(1.0, 0.0)
>>> L( (0,0) , (2,1) )
(0.5, 0.0)
>>> L( (0,0) , (7,1) )
(0.14285714285714285, 0.0)
>>> L( (10,22.5) , (5,12.5) )
(2.0, 2.5)
L( (0,0) , (0,1) )
?L((0,0),(0,0))
?Respuestas:
J - 23 char
Bastante sencillo. Define un verbo diádico
L
para ser utilizado como(x1,y1) L (x2,y2)
.Explicación:
Ejemplos:
fuente
GNU dc ,
3024 bytesDefine una macro
L
tal que (x 1 , y 1 , x 2 , y 2 ) se debe empujar a la pila en ese orden antes de llamar, y después de llamarL
, (a, c) se puede extraer de la pila (en orden inverso de Por supuesto, es una pila).Testcase (guardar como "linear.dc" y ejecutar
dc linear.dc
):Salida es:
Explicación de la macro L:
sy
pop y 2 paray
registrarsesx
pop x 2 parax
registrarsely
y
registro de inserción (y 2 )-
reste y 2 de y 1r
swap (y 1 - y 2 ) y x 1 en la pilalx
x
registro de inserción (x 2 )-
restar x 2 de x 1/
divide (y 1 - y 2 ) por (x 1 - x 2 ) para obtener el gradiented
gradiente duplicadolx
x
registro de inserción (x 2 )*
multiplicar (x 2 ) por gradientely
y
registro de inserción (y 2 )r
intercambiar (y 2 ) y ( gradiente x 2 *) en la pila-
restar (x 2 * gradiente) de (y 2 )fuente
Haskell, 41 personajes
No hay mucho para jugar golf aquí. Es más o menos lo que escribiría normalmente menos el espacio en blanco.
fuente
Mathematica,
5538 bytesEsto fue sorprendentemente largo (esos molestos nombres de funciones largas ...)EDITAR: Cambió el enfoque para la intercepción del eje (inspirándose en la propia respuesta del OP). Resulta que calcularlo directamente no era la idea más inteligente.Usar como
Gracias a Mathematica también puede obtener el resultado general:
(Este último ejemplo muestra cómo lo implementé originalmente).
Para que conste
que es técnicamente correcto
fuente
ComplexInfinity
y no simplemente viejoInfinity
? (No sé Mathematica)JavaScript,
6248Gracias a @Michael por jugar golf con ES 6.
Versión antigua:
Entrada de muestra:
Salida de muestra:
Para el registro:
fuente
L=(a,b)=>[g=(p=a[1]-b[1])/(q=a[0]-b[0]),p-g*q]
Python3 (51)
fuente
C # 105 bytes
Esta no es solo la función y se compilará completamente por sí misma. Había puesto
L
en elSystem
espacio de nombres para acortar el uso, pero es mejor calificar completamente y ahorrar en el uso de un espacio de nombres. Guardado los corchetes. También un ahorro dereturn new z[]
enreturn new[]
fuente
(c*a[0])
necesario? ¿No puedes eliminar esos paréntesis y guardar 2 bytes?namespace
declaración, o cambiarlaSystem.Single
, para que esta solución sea válida.Lua 5.1.4:
6664 bytesEjemplo de uso:
fuente
C ++ 88 (era 106)
Mejorado: gracias por tus comentarios.
Golfizado:
Fuente
fuente
typedef
?z
:u.x=(v.y-u.y)/(v.x-u.x); u.y=v.y-z.x*v.x; return u;
Apple Swift
9586Esta puede ser la primera entrada de Swift en PCG.
No veo que este lenguaje sea un gran éxito para la comunidad de Code Golf.
fuente
Golfscript: 25 bytes
Como la función debe llamarse 'L', la guardé como 'L.gs' localmente.
El problema, como lo explicó @Dennis en esta publicación , es que necesitamos engañar a Golfscript para que use números racionales en lugar de números enteros. Entonces esto funciona si está dispuesto a aceptar información
X1 Y1 X2 Y2
en notación de golfscriptfuente
Ruby - 48 caracteres
Casi idéntico a la respuesta de JavaScript:
fuente
Python3 -
6457 bytesPuede bajarlo a 43 si no usa Tuple, que muchas personas están haciendo ...
fuente
return(a,q[1]-a*q[0])
PHP (75 caracteres)
prueba :
print_r(L([0,0],[7,1]));
salida:
(gracias @ace)
fuente