Les cercles et les carrés ont un seul point central défini. Cependant, la notion de centre d'un triangle a longtemps été discutée. Quatre centres différents étaient connus des anciens Grecs:
- Incenter : l'intersection des bissectrices angulaires du triangle
- Centroïde : l'intersection des lignes de chaque sommet du triangle au milieu de son côté opposé
- Circumcenter : l'intersection des bissectrices perpendiculaires des côtés
- Orthocentre : l'intersection des altitudes du triangle
Plus tard, Euler a prouvé que le centroïde, le circumcenter et l'orthocentre sont colinéaires dans n'importe quel triangle. La ligne sur laquelle ces trois points se trouvent dans un triangle est appelée la ligne d'Euler . Il est défini pour chaque triangle sauf un triangle équilatéral, où tous les points coïncident.
Votre défi consiste à créer le programme ou la fonction la plus courte qui, lorsqu'elle reçoit deux entrées, génère un centre spécifique ou la ligne d'Euler du triangle. Le premier spécifie les coordonnées de chaque sommet d'un triangle. Le second est un entier de 1 à 5, déterminant ce qu'il faut sortir.
1 - Incenter
2 - Centroid
3 - Circumcenter
4 - Orthocenter
5 - Equation of Euler Line
(if the Euler Line is vertical, output the `x` value of the line
(e.g. output `5` if the equation of the line is `x = 5`))
Vous pouvez supposer que les sommets donnés ne seront jamais colinéaires et qu'ils seront toujours des coordonnées entières (cela exclut également la possibilité d'avoir un triangle équilatéral en entrée, conformément au commentaire de @ R.Kap ).
Le tableau d'entrée doit être un tableau imbriqué valide dans votre langue et l'entrée doit être dans un format raisonnable. Toutes les valeurs flottantes doivent être affichées à au moins 3 décimales, mais pas moins. Un point en sortie doit être un tableau valide dans votre langue, correspondant au format d'entrée.
Cas de test:
Input: [(-2, 0), (1, 0), (0, 1)] 1
Output: (-0.089, 0.451)
Input: [(-2, 0), (1, 0), (0, 1)] 2
Output: (-0.333, 0.333)
Input: [(-2, 0), (1, 0), (0, 1)] 3
Output: (-0.5, -0.5)
Input: [(-2, 0), (1, 0), (0, 1)] 4
Output: (0, 2)
Input: [(-2, 0), (1, 0), (0, 1)] 5
Output: 5x + 2
Clarification: L'entrée peut provenir de stdin, être séparée par des espaces ou des nouvelles lignes, ou comme arguments d'une fonction. Cependant, la sortie doit être écrite sur stdout.
y=f(x)
.(if the triangle is equilateral, output the point at which the centers meet)
car il n'est pas possible de créer un triangle équilatéral sur le plan de coordonnées en utilisant uniquement des coordonnées entières.Réponses:
Python -
908870De nouvelles lignes ont été ajoutées pour réduire le défilement. Cela pourrait probablement être joué plus loin.
Cas de test (annotés):
Comme vous pouvez le voir, il peut y avoir des erreurs causées par l'utilisation de virgule flottante.
Golf:
Sur la base des suggestions dans les commentaires ci-dessous, j'ai réussi à le réduire.
la source
R=r.append
et ensuite l'utiliser tout au long pour économiser des octets?AutoHotkey - 731
La fonction peut être plus réduite (à environ 600 caractères OU moins) en raccourcissant les noms de variables comme midx_a, midx_b et ainsi.
Appel de la fonction
la source
Python 3.5,
851772 octets:Prend l' entrée sous la forme d'une séquence de coordonnées séparées par des virgules suivie d'un entier indiquant ce qui doit être sorti. Par exemple, si les coordonnées d'entrée sont
(1,0),(2,1),(1,4)
et que vous voulez que l'orthocentre du triangle correspondant à ces coordonnées, vous appelez simplement la fonction comme suit:Sorties au format d'un tuple si un point spécifique est nécessaire, au format d'une chaîne avec l'équation sous la forme
y=mx+b
si la ligne Euler est nécessaire et la ligne n'est pas verticale, ou simplement lax
valeur de la ligne si la ligne Euler est nécessaire mais la ligne est verticale.Donc, en utilisant le triangle avec des sommets
(1,0),(2,1),(1,4)
, les sorties seraient:J'essaierai de jouer au golf au fil du temps où et quand je le pourrai.
Essayez-le en ligne! (Ideone)
la source