Ceci est quelque peu similaire aux centres d'un triangle , mais avec un point différent. Le point de Fermat est le point P dans le triangle ABC de sorte que la valeur de AP + BP + CP soit minimisée. Il y a deux cas:
S'il y a un angle supérieur à 120 degrés, ce sommet est le point de fermat. Sinon, dessinez des triangles équilatéraux sur chacun des côtés de ABC. Connectez le sommet éloigné de chaque triangle équilatéral au sommet opposé du triangle ABC. Faire cela pour chacun des trois triangles équilatéraux résulte en un seul point d'intersection commun pour les trois lignes, qui est le point de Fermat.
Il devrait fonctionner dans les 5 secondes sur une machine raisonnable.
Entrée : un ensemble de 3 points, pas nécessairement des entiers. Cela peut être considéré comme un tableau imbriqué, une chaîne, une liste de tuples, etc. (selon ce qui convient à votre langue).
Sortie : Les coordonnées du point Fermat, encore une fois, mais votre langue gère le mieux les points. Les inexactitudes en virgule flottante ne seront pas prises en compte pour vous.
Cas de test :
[[1, 1], [2, 2], [1, 2]] --> [1.2113248654051871, 1.788675134594813]
[[-1, -1], [-2, -1], [0, 0]] --> [-1, -1]
[[-1, -1], [1, -1], [0, 1]] --> [0, -0.42264973081037427]
[[0, 0], [0.5, 0.8660254037844386], [-5, 0]] --> [0, 0]
[[0, 0], [0, -5], [-0.8660254037844386, 0.5]] --> [0, 0]
C'est le golf de code donc le code le plus court gagne!
-0.0
sortie remplace certains0.0
s?Réponses:
Haskell,
346291285 octetsLe même code avec quelques explications
Tests:
Production:
la source
£
et¤
comme opérateurs à 2 octets, mais pas lorsqu'il est encodé en ISO-8859-1 avec£
et en¤
tant qu'opérateurs à 1 octet. Les opérateurs disponibles 1 octets dans UTF-8 sont!
,#
,%
,&
,?
. Vous devez remplacer les opérateurs à 2 octets ou ajuster votre nombre d'octets.Python,
475448440 octetsToute aide au golf est appréciée.
Non golfé:
Contribution:
Production:
la source
from math import*
est un golf assez commun. Cela vous permettra également de l'utiliserpi
au lieu de le coder en dur (même longueur pour2*pi/3
). Vous pouvez également déposer beaucoup d'espaces comme:d=lambda x,y:(...
.Python 3.5,
10191016998982969953 octets:Incroyablement long par rapport aux autres réponses, mais bon, au moins ça marche! Je ne pourrais pas être plus heureux du résultat que j'ai obtenu car cela doit être l'un des défis les plus difficiles que j'ai jamais fait. Je suis tellement content que ça marche vraiment! : D Maintenant, sur les notes plus techniques:
H((1,1),(2,2),(1,2))
cela fonctionnera, mais il en sera de mêmeH([1,1],[2,2],[1,2])
.-0.0
à la place de0.0
pour certaines entrées. Par exemple, la sortie de l'entrée[-1, -1], [1, -1], [0, 1]
est[-0.0, -0.4226497308103744]
.J'espère que cela va bien, même si ce n'est pas le cas, je vais le changer, même si cela me coûtera quelques octets de plus.C'est correct, comme l' OP l'a confirmé .13
jusqu'à14
des chiffres significatifs.Je vais essayer de jouer au golf avec le temps. Une explication, peut-être très longue, à venir bientôt.
Essayez-le en ligne! (Ideone)
la source
Mathematica, 39 octets
Construit une équation basée sur les distances entre les sommets et un point
{x,y}
. Utilise ensuite laNArgMin
fonction pour trouver un minimum global pour cette équation, qui sera le point de Fermat par définition.la source