La tâche
Écrivez une fonction L () qui prend deux arguments Tuple de coordonnées sous la forme (x, y), et retourne leur fonction linéaire respective sous la forme (a, c), où a est le coefficient du terme x et c est l'ordonnée à l'origine.
Vous pouvez supposer que l'entrée ne sera pas une ligne perpendiculaire à l'axe x et que les deux entrées sont des points distincts.
Notation
C'est Code Golf: le programme le plus court gagne.
Remarque: aucune utilisation de fonctions mathématiques en dehors des opérateurs de base (+, -, /, *).
Exemple
Voici ma solution non-golfée 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)
Production:
>>> 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))
?Réponses:
J - 23 caractères
Assez simple. Définit un verbe dyadique
L
à utiliser comme(x1,y1) L (x2,y2)
.Explication:
Exemples:
la source
GNU dc ,
3024 octetsDéfinit une macro
L
telle que (x 1 , y 1 , x 2 , y 2 ) doit être poussé vers la pile dans cet ordre avant d'appeler, et après l'appelL
, (a, c) peut être extrait de la pile (dans l'ordre inverse de bien sûr - c'est une pile).Testcase (enregistrer sous "linear.dc" et exécuter
dc linear.dc
):La sortie est:
Explication de la macro L:
sy
pop y 2 pour vousy
inscriresx
pop x 2 pour vousx
inscrirely
y
registre poussoir (y 2 )-
soustraire y 2 de y 1r
swap (y 1 - y 2 ) et x 1 sur la pilelx
x
registre poussoir (x 2 )-
soustraire x 2 de x 1/
diviser (y 1 - y 2 ) par (x 1 - x 2 ) pour obtenir un gradientd
gradient en doublelx
x
registre poussoir (x 2 )*
multiplier (x 2 ) par gradiently
y
registre poussoir (y 2 )r
permuter (y 2 ) et ( dégradé x 2 *) sur la pile-
soustraire ( gradient x 2 *) de (y 2 )la source
Haskell, 41 caractères
Pas beaucoup de golf ici. C'est à peu près ce que vous écririez normalement moins les espaces blancs.
la source
Mathematica,
5538 octetsC'était étonnamment long (ces noms de fonction longs embêtants ...)EDIT: Modification de l'approche pour l'interception d'axe (en s'inspirant de la réponse du PO). Il s'avère que le calculer directement n'était pas l'idée la plus intelligente.Utilisez comme
Grâce à Mathematica, vous pouvez également obtenir le résultat général:
(Ce dernier exemple montre comment j'avais implémenté cela à l'origine.)
Juste pour info
ce qui est techniquement correct.
la source
ComplexInfinity
et pas simplement vieuxInfinity
? (Je ne connais pas Mathematica)JavaScript,
6248Merci à @Michael d'avoir joué avec ES 6.
Ancienne version:
Exemple d'entrée:
Exemple de sortie:
Pour mémoire:
la source
L=(a,b)=>[g=(p=a[1]-b[1])/(q=a[0]-b[0]),p-g*q]
Python3 (51)
la source
C # 105 octets
Ce n'est pas seulement la fonction et se compilera complètement d'elle-même. J'avais mis
L
l'System
espace de noms pour raccourcir l'utilisation, mais il vaut mieux se qualifier complètement et économiser sur l'utilisation d'un espace de noms. Enregistré les crochets. Aussi une économie dereturn new z[]
enreturn new[]
la source
(c*a[0])
nécessaire? Vous ne pouvez pas éliminer ces parenthèses et économiser 2 octets?namespace
déclaration ou la modifierSystem.Single
pour que cette solution soit valide.Lua 5.1.4:
6664 octetsExemple d'utilisation:
la source
C ++ 88 (au lieu de 106)
Amélioré: merci pour vos commentaires.
Golfé:
La source
la source
typedef
?z
:u.x=(v.y-u.y)/(v.x-u.x); u.y=v.y-z.x*v.x; return u;
Apple Swift
9586Cela peut être la première entrée Swift sur PCG.SE ??
Je ne vois pas cette langue comme un énorme succès pour la communauté Code Golf.
la source
Golfscript: 25 octets
Étant donné que la fonction doit être nommée «L», je l'ai enregistrée en tant que «L.gs» localement.
Le hic, comme expliqué par @Dennis dans ce post , est que nous devons inciter Golfscript à utiliser des nombres rationnels au lieu d'entiers. Cela fonctionne donc si vous êtes prêt à accepter une entrée
X1 Y1 X2 Y2
en notation golfscriptla source
Ruby - 48 caractères
Presque identique à la réponse JavaScript:
la source
Python3 -
6457 octetsVous pouvez le réduire à 43 si vous n'utilisez pas Tuple, ce que beaucoup de gens font ...
la source
return(a,q[1]-a*q[0])
PHP (75 caractères)
test:
print_r(L([0,0],[7,1]));
production :
(merci @ace)
la source