Los círculos y cuadrados tienen un único punto central definido. Sin embargo, la noción del centro de un triángulo ha sido discutida durante mucho tiempo. Los antiguos griegos conocían cuatro centros diferentes:
- Incentro : la intersección de las bisectrices angulares del triángulo
- Centroide : la intersección de las líneas desde cada vértice del triángulo hasta la mitad de su lado opuesto
- Circuncentro : la intersección de las bisectrices perpendiculares de los lados.
- Ortocentro : la intersección de las altitudes del triángulo
Euler luego demostró que el centroide, el circuncentro y el ortocentro son colineales en cualquier triángulo. La línea en la que se encuentran estos tres puntos en un triángulo se llama Línea de Euler . Se define para cada triángulo, excepto un triángulo equilátero, donde todos los puntos coinciden.
Su desafío es crear el programa o función más corto que, cuando se le dan dos entradas, emite un centro específico o la línea de Euler del triángulo. El primero especifica las coordenadas de cada vértice de un triángulo. El segundo es un número entero de 1 a 5, que determina qué generar.
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`))
Puede suponer que los vértices dados nunca serán colineales, y que siempre serán coordenadas enteras (esto también excluye la posibilidad de tener un triángulo equilátero como entrada, según el comentario de @ R.Kap ).
La matriz de entrada debe ser una matriz anidada válida en su idioma, y la entrada debe estar en cualquier formato razonable. Cualquier valor flotante debe mostrarse con al menos 3 decimales, pero no menos. Un punto de salida debe ser una matriz válida en su idioma, que coincida con el formato de entrada.
Casos de prueba:
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
Aclaración: La entrada puede ser desde stdin, espacio o nueva línea separada, o como argumentos para una función. La salida, sin embargo, debe escribirse en stdout.

y=f(x).(if the triangle is equilateral, output the point at which the centers meet)ya que no es posible crear un triángulo equilátero en el plano de coordenadas utilizando solo coordenadas enteras.Respuestas:
Python -
908870Se agregaron nuevas líneas para reducir el desplazamiento. Esto probablemente podría ser más golfizado.
Casos de prueba (anotados):
Como puede ver, posiblemente haya errores causados por el uso del punto flotante.
Golf adicional:
Según las sugerencias en los comentarios a continuación, he logrado hacer esto más pequeño.
fuente
R=r.appendy luego usarlo para guardar bytes?AutoHotkey - 731
La función se puede minimizar (a unos 600 caracteres O menos) acortando los nombres de las variables como midx_a, midx_b, etc.
Llamando a la función
fuente
Python 3.5,
851772 bytes:Toma la entrada como una secuencia de coordenadas separadas por comas seguidas de un número entero que transmite qué generar. Por ejemplo, si las coordenadas de entrada son
(1,0),(2,1),(1,4)y desea que el ortocentro del triángulo correspondiente a esas coordenadas simplemente llame a la función de esta manera:Salidas en el formato de una tupla si se necesita un punto específico, en el formato de una cadena con la ecuación en la forma
y=mx+bsi se necesita la línea de Euler y la línea no es vertical, o simplemente elxvalor de la línea si la línea de Euler es necesario pero la línea es vertical.Entonces, usando el triángulo con vértices
(1,0),(2,1),(1,4), las salidas serían:Trataré de jugar más golf con el tiempo donde y cuando pueda.
¡Pruébelo en línea! (Ideona)
fuente