A tarefa
Escreva uma função L () que recebe dois argumentos de tupla de coordenadas na forma (x, y) e retorna sua respectiva função linear na forma (a, c), onde a é o coeficiente do termo x ec é o intercepto em y.
Você pode assumir que a entrada não será uma linha perpendicular ao eixo xe que as duas entradas são pontos separados.
Pontuação
Este é o Code Golf: o programa mais curto vence.
Nota: Não há uso de funções matemáticas além dos operadores básicos (+, -, /, *).
Exemplo
Aqui está minha solução não-golfe em 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)
Resultado:
>>> 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))
?Respostas:
J - 23 char
Bastante direto. Define um verbo diádico
L
a ser usado como(x1,y1) L (x2,y2)
.Explicação:
Exemplos:
fonte
GNU dc ,
3024 bytesDefine uma macro de
L
modo que (x 1 , y 1 , x 2 , y 2 ) deve ser empurrada para a pilha nessa ordem antes da chamada e, após a chamadaL
, (a, c) pode ser removida da pilha (na ordem inversa de claro - é uma pilha).Caixa de teste (salve como "linear.dc" e execute
dc linear.dc
):A saída é:
Explicação da macro L:
sy
pop y 2 paray
registrarsx
pop x 2 para sex
registrarly
empurre oy
registro (y 2 )-
subtrair y 2 de y 1r
swap (y 1 - y 2 ) ex 1 na pilhalx
empurre ox
registro (x 2 )-
subtrair x 2 de x 1/
divida (y 1 - y 2 ) por (x 1 - x 2 ) para obter gradiented
gradiente duplicadolx
empurre ox
registro (x 2 )*
multiplicar (x 2 ) por gradientely
empurre oy
registro (y 2 )r
swap (y 2 ) e (x 2 * gradiente) na pilha-
subtrair (x 2 * gradiente) de (y 2 )fonte
Haskell, 41 caracteres
Não é muito para jogar golfe aqui. É basicamente o que você escreveria normalmente menos espaço em branco.
fonte
Mathematica,
5538 bytesIsso foi surpreendentemente longo (esses nomes de função longos e irritantes ...)EDIT: Mudou a abordagem para a interceptação de eixos (inspirando-se na resposta do próprio OP). Acontece que calculá-lo diretamente não foi a idéia mais inteligente.Use como
Graças ao Mathematica, você também pode obter o resultado geral:
(Este último exemplo mostra como eu havia implementado isso originalmente.)
Apenas para o registro
o que é tecnicamente correto.
fonte
ComplexInfinity
e não claramente velhoInfinity
? (Eu não sei Mathematica)JavaScript,
6248Obrigado a @ Michael por jogar com o ES 6.
Versão antiga:
Entrada de amostra:
Saída de amostra:
Para o registro:
fonte
L=(a,b)=>[g=(p=a[1]-b[1])/(q=a[0]-b[0]),p-g*q]
Python3 (51)
fonte
Bytes C # 105
Esta não é apenas a função e será compilada completamente por si própria. Eu coloquei
L
noSystem
espaço de nomes para reduzir o uso, mas é melhor qualificar-se completamente e economizar usando um espaço de nome. Salvou os colchetes. Também uma poupança dereturn new z[]
emreturn new[]
fonte
(c*a[0])
necessário? Você não pode eliminar esses parênteses e salvar 2 bytes?namespace
declaração ou alterá-la paraSystem.Single
que esta solução seja válida.Lua 5.1.4:
6664 bytesExemplo de uso:
fonte
C ++ 88 (era 106)
Melhorado: obrigado por seus comentários.
Golfe:
Fonte
fonte
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 pode ser a primeira entrada do Swift no PCG.SE ??
Não vejo esse idioma como um grande sucesso para a comunidade do Code Golf.
fonte
Golfscript: 25 bytes
Como a função precisa ser denominada 'L', salvei-a como 'L.gs' localmente.
O problema, conforme explicado por @Dennis neste post , é que precisamos induzir o Golfscript a usar números racionais em vez de números inteiros. Portanto, isso funciona se você estiver disposto a aceitar informações
X1 Y1 X2 Y2
na notação golfscriptfonte
Ruby - 48 caracteres
Quase idêntico à resposta JavaScript:
fonte
Python3 -
6457 bytesVocê pode reduzi-lo para 43 se não usar o Tuple, o que muitas pessoas estão fazendo ...
fonte
return(a,q[1]-a*q[0])
PHP (75 caracteres)
teste :
print_r(L([0,0],[7,1]));
resultado :
(obrigado @ace)
fonte