Digamos que usted tiene un entero positivo N . Primero, construya un polígono regular , que tenga N vértices, con una distancia entre vértices vecinos de 1. Luego, conecte las líneas de cada vértice a cualquier otro vértice. Por último, calcule la longitud de todas las líneas sumadas juntas.
Ejemplo
Dada la entrada N = 6 , construye un hexágono con líneas que conectan cada vértice con los otros vértices.
Como puede ver, hay un total de 6 líneas de borde (longitud = 1), 3 líneas que tienen el doble de la longitud del borde (longitud = 2) y otras 6 líneas que, utilizando el Teorema de Pitágoras, podemos calcular la longitud para , cual es
Si sumamos las longitudes de las líneas juntas obtenemos (6 * 1) + (3 * 2) + (6 * 1.732) = 22.392 .
Información Adicional
Como las estructuras con 2 o menos vértices no se consideran polígonos, la salida 0 (o NaN
, dado que la distancia entre un solo vértice no tiene mucho sentido) para N = 1, ya que un solo vértice no se puede conectar a otros vértices, y 1 para N = 2, ya que dos vértices están conectados por una sola línea.
Entrada
Un entero N, en cualquier formato razonable.
Salida
La longitud de todas las líneas se sumaron juntas, con una precisión de al menos 3 decimales, ya sea como función de retorno o directamente impresas stdout
.
Reglas
- Las lagunas estándar están prohibidas.
- Este es el código de golf , por lo que gana el código más corto en bytes, en cualquier idioma.
¡Buena suerte!
Casos de prueba
(Input) -> (Output)
1 -> 0 or NaN
2 -> 1
3 -> 3
5 -> 13.091
6 -> 22.392
1
? Mi entrada actual volvería ennan
lugar de cero, por ejemplo, y solo requeriría una carcasa especial para ello.nan
está bien, ya que la distancia entre un solo vértice no tiene mucho sentido de todos modos.n=1
, creo.N
, ya que las salidas se hacen más grandes y los flotantes se vuelven menos precisos.Respuestas:
Python 3
(con sympy ),61 60 58 5448 bytes-6 (tal vez incluso -10 si no necesitamos manejarlo
n=1
) gracias a xnor (mayor simplificación trigonométrica más golf adicional para manejar el caso de borde de 1 y guardar paréntesis moviendo unfloat
molde (ahora innecesario) ).Esperemos que seavencible sin bibliotecas deterceros? ¡¡Si!!perovamos a poner las cosas en marcha ...Pruébalo en línea!
Utiliza una fórmula para la suma de las longitudes si se inscribe un polígono dentro de un círculo unitario,
n*cot(pi/2/n)/2
y ajusta el resultado a uno para que la longitud del lado sea uno dividiendo por el pecado de esa longitud del cablesin(pi/n)
.La primera fórmula se adquiere considerando las
n-1
longitudes de cable de todas las diagonales que emanan de una esquina que son de longitudessin(pi/n)
(nuevamente)sin(2*pi/n)
, ...,sin((n-1)pi/n)
. La suma de esto escot(pi/2/n)
hayn
esquinas por lo que multiplicamos porn
, pero luego hemos contado dos veces todos los cables, por lo que dividimos por dos.El resultado
n*cot(pi/2/n)/2/sin(pi/n)
fue luego simplificado por xnor paran/2/(1-cos(pi/n))
(manteniendon>1
)... esto (siempre y cuando la precisión sea aceptable) ahora ya no requiere
sympy
más delmath
módulo incorporado (math.pi=3.141592653589793
).fuente
n/2/(1-cos(pi/n))
.0.25
an=1
- pero carcasa especial puede ser más corto también ...)1/4
es el resultadon=1
. Se puede parchar con1%n*
. Además, los parens se pueden guardar moviendo elfloat
interior afloat(1-cos(pi/n))
. No sé mucho sobre Sympy, pero tal vez haya una forma aritmética de forzar un flotador.float
movimiento). sympy genera una expresión, por ejemplo, paran=6
ningún resultado de conversión en una expresión con una representación3.0/(-sqrt(3)/2 + 1)
, bien puede haber una forma más corta, pero aún no lo sé.Python , 34 bytes
Pruébalo en línea!
Utiliza la fórmula
n/2/(1-cos(pi/n))
simplificada de Jonathan Allan . Neil ahorró 10 bytes al señalar que Python puede calcular las raíces de la unidad como potencias fraccionarias de1j
.Python sin importaciones no tiene funciones trigonométricas integradas
pi
, oe
. Hacern=1
dar en0
lugar de dar0.25
, anteponemos1%n*
.Una versión más larga que usa solo poderes de números naturales:
Pruébalo en línea!
fuente
lambda n:1%n*n/(1-(1j**(2/n)).real)/2
abs()
hace.MATL ,
1615 bytesPruébalo en línea! O verificar todos los casos de prueba .
Esto usa un commit que introdujo la función FFT (Transformación rápida de Fourier) y que antecede el desafío en 8 días.
Explicación
El código usa este truco (adaptado a MATL) para generar las raíces de la unidad. Estos dan las posiciones de los vértices como números complejos, excepto que la distancia entre vértices consecutivos no está normalizada a 1. Para resolver eso, después de calcular todas las distancias por pares, el programa las divide por la distancia entre vértices consecutivos.
fuente
Saltamontes, 25 primitivas (11 componentes, 14 cables)
Leí una meta publicación sobre programas en GH y LabVIEW, y sigo instrucciones similares para medir un lenguaje visual.
Imprimir
<null>
para N =0, 1, 2
, porquePolygon Primitive
no puede generar un polígono con 2 o menos aristas y obtendrá una lista vacía de líneas.Componentes de izquierda a derecha:
Side count
control deslizante: entradaPolygon Primitive
dibuja un polígono basado en el radio, necesitamos escalar la formafuente
Mathematica, 26 bytes
usa la fórmula de @Jonathan Allan
Pruébalo en línea!
-1 byte junghwan min
fuente
N@Cot[Pi/2/#]/2Csc[Pi/#]#&
since1/sin(x) = csc(x)
.5Csc[x=Pi/#]Cot[x/2]#&
Haskell , 27 bytes
Pruébalo en línea!
Acabo de sumergirme en Haskell, por lo que resulta ser un buen golf para principiantes (es decir, copiar la fórmula de otras respuestas).
También he intentado ponerlo en
$
algún lugar, pero el compilador me sigue gritando, así que esto es lo mejor que tengo. :PAGfuente
Jalea ,
131211 bytesUtiliza la fórmula de Jonathan Allan (y gracias a él por guardar 2 bytes)
Pruébalo en línea!
Siempre he estado bastante fascinado con Jelly, pero no lo he usado mucho, por lo que esta podría no ser la forma más simple.
fuente
ɓ
para alinear su enlace auxiliar de la siguiente manera:ØP÷ÆẠCḤɓn1×÷
’
y lógico yȧ
:ØP÷ÆẠCḤɓ’ȧ÷
:)Javascript (ES6), 36 bytes
Port of @ JonathanAllan's Python 3 respuesta
fuente