Dado un número entero, n
donde 3 <= n < 2^32
, calcule el área de un n
gón regular con una apotema de 1; la fórmula para la cual es n * tan(π / n)
. Para aquellos que no saben cuál es la apotema:
n
Genere el área de -gon como punto flotante con no menos de 8 decimales.
Casos de prueba
3
5.1961524227
6
3.4641016151
10
3.2491969623
20
3.1676888065
99
3.1426476062
1697
3.1415962425
15000
3.1415926995
Nota: Los casos de prueba anteriores incluyen 2 dígitos más de los que se requieren para generar.
Area@RegularPolygon
debería serArea@*RegularPolygon
; tal como está ahora, no se puede capturar en una variable. Es decir,f = Area@RegularPolygon; f[3]
no funciona. Meta discusión relevanteJava (OpenJDK 9) , 24 bytes
Pruébalo en línea!
fuente
En realidad , 5 bytes
Pruébalo en línea!
¿Cómo?
Alternativa:
ß╦/T*
. o_O En realidad realmente vence a Jelly !!!fuente
Código de máquina x87, 11 bytes
Los bytes de código anteriores definen una función que calcula el área de un n-gon regular con una apotema de 1. Utiliza instrucciones de FPU x87 (la unidad clásica de punto flotante en los procesadores x86) para hacer este cálculo.
Siguiendo una convención estándar de llamadas basadas en registros x86 (en este caso
__fastcall
), el argumento de la función es un puntero al número entero, pasado en elECX
registro. El resultado de la función es un valor de coma flotante, devuelto en la parte superior de la pila de coma flotante x87 (registroST0
).Pruébalo en línea!
Mnemónicos de ensamblaje sin golf:
Como puede ver, esto es básicamente un cálculo directo de la fórmula dada,
resultado = n * tan (π / n)
Solo un par de cosas interesantes se destacan:
FLDPI
). Esto rara vez se usaba, incluso en el pasado (y obviamente mucho menos ahora), pero es más corto en tamaño que incrustar una constante en su binario y cargar eso.FPTAN
reemplaza el valor del registro de entrada (la parte superior de la pila FPU) con el resultado, pero también empuja un constante 1.0 en la parte superior de la pila FPU. Esto se hace para la compatibilidad con el 8087 (no tengo idea de por qué esto se hizo en el 8087; probablemente sea un error). Eso significa que necesitamos extraer este valor innecesario de la pila. La forma más rápida y rápida de hacerlo es simpleFSTP st0
, como la que usamos aquí. También podríamos haber hecho una multiplicación y pop , ya que multiplicar por 1.0 no cambiará el resultado, pero esto también es de 2 bytes (por lo que no hay ganancia en el tamaño del código), probablemente se ejecutará más lentamente y puede introducir indeterminaciones innecesarias en el resultado.Aunque un programador o compilador moderno usaría el conjunto de instrucciones SSE (y posterior), en lugar del antiguo x87, esto requeriría más código para implementar, ya que no hay una sola instrucción para calcular una tangente en estas ISA más nuevas.
fuente
Jalea , 6 bytes
Pruébalo en línea!
El π incorporado de Jelly tiene> 8 decimales.
fuente
Brachylog , 9 bytes
Pruébalo en línea!
fuente
Sakura , 4 bytes
Esto se expande a
*ij/π⓪⓪
, que esfuente
R , 25 bytes
Entrada de stdin, salida a stdout.
Pruébalo en línea!
fuente
cat()
. 5 bytes menos.MATL , 7 bytes
Pruébalo en línea!
fuente
Japt , 7 bytes
Pruébalo
Explicación
Simplemente implementa el forumla, donde
Mt
es tan,MP
es pi yU
es la entrada.fuente
Ohm v2 , 7 bytes
Pruébalo en línea!
¿Cómo?
fuente
var'aq , 51 bytes
Explicación
fuente
Lisp común, 29 bytes
Pruébalo en línea!
fuente
JavaScript (ES6), 24 bytes
Intentalo
fuente
Python 2 , 45 bytes
Pruébalo en línea!
fuente
Pyth , 9 bytes
Banco de pruebas.
¿Cómo?
fuente
Gaia , 5 bytes
Pruébalo en línea!
¿Cómo?
fuente
Swift , 35 bytes
Con advertencias del compilador:
Pruébalo aquí!
Sin advertencias del compilador, 40 bytes :
fuente
Excel, 16 bytes
fuente
Perl, 14 + 16 = 30
14 bytes para el programa propiamente dicho y 16 para los interruptores de línea de comando
fuente
Prólogo (SWI) , 25 bytes
Pruébalo en línea!
Esta es mi primera presentación a codegolf, espero que esté bien. Escrito como una función.
fuente
Lenguaje de fórmulas IBM / Lotus Notes, 13 bytes
Entrada tomada a través de un campo llamado a en el mismo formulario que el campo que contiene la fórmula. No hay TIO disponible, así que la captura de pantalla de todos los casos de prueba se muestra a continuación:
fuente
PowerShell , 38 bytes
Pruébalo en línea!
Hace exactamente lo que dice en la lata, solo toma un poco más de tiempo debido a las largas
[math]::
llamadas .NET.fuente
Rubí , 27 bytes
Pruébalo en línea!
fuente
Pari / GP , 14 bytes
Pruébalo en línea!
fuente
C # (compilador Mono C #) , 24 bytes
Pruébalo en línea!
fuente
n=>
al inicio para convertir esto en una función de flecha (tome esto con una pizca de sal, no sé C #) que es válido.System.Func<T, T>
, que tomaría unfloat
como entrada y otro como salida. La declaración se vería así:,System.Func<float, float> f = n=>n*Math.Tan(Math.PI/n);
donde comenzaría el bytecountn=>
. En mi ejemplo, omití dos de sus corchetes para guardar 2 bytes;)RPNGolf 0.6 / 0.7 , 12 bytes
¡Mi primera publicación usando RPNGolf, mi nuevo lenguaje basado en pila!
Este es un programa completo que lee un número entero desde la entrada estándar e imprime la salida a la salida estándar (sin una nueva línea final).
Explicación:
fuente