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.append
y 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+b
si se necesita la línea de Euler y la línea no es vertical, o simplemente elx
valor 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