Dado um número inteiro, n
onde 3 <= n < 2^32
, calcule a área de um regular n
-gon com um apótema de 1; a fórmula para qual é n * tan(π / n)
. Para aqueles que não sabem o que é o apotema:
Produza a área do n
-gon como um ponto flutuante com não menos que 8 casas decimais.
Casos de teste
3
5.1961524227
6
3.4641016151
10
3.2491969623
20
3.1676888065
99
3.1426476062
1697
3.1415962425
15000
3.1415926995
Nota: Os casos de teste acima incluem mais 2 dígitos do que o necessário para a saída.
Area@RegularPolygon
deveria serArea@*RegularPolygon
; como está agora, não pode ser capturado em uma variável. Ou seja,f = Area@RegularPolygon; f[3]
não funciona. Meta-discussão relevanteJava (OpenJDK 9) , 24 bytes
Experimente online!
fonte
Na verdade , 5 bytes
Experimente online!
Quão?
Alternativa:
ß╦/T*
. o_O Na verdade, é melhor do que Jelly !!!fonte
Código de máquina x87, 11 bytes
Os bytes de código acima definem uma função que calcula a área de um n-gon regular com um apótema de 1. Ele usa instruções x87 FPU (a unidade clássica de ponto flutuante nos processadores x86) para fazer esse cálculo.
Após uma convenção de chamada padrão baseada em registro x86 (neste caso
__fastcall
), o argumento da função é um ponteiro para o número inteiro passado noECX
registro. O resultado da função é um valor de ponto flutuante, retornado na parte superior da pilha de ponto flutuante x87 (registradorST0
).Experimente online!
Mnemônicos de montagem não destruídos:
Como você pode ver, isso é basicamente apenas um cálculo direto da fórmula fornecida,
result = n * tan (π / n)
Apenas algumas coisas interessantes merecem destaque:
FLDPI
). Isso raramente era usado, mesmo no passado (e obviamente muito menos agora), mas é menor em tamanho do que incorporar uma constante ao seu binário e carregá-lo.FPTAN
substitui o valor do registro de entrada (a parte superior da pilha da FPU) pelo resultado, mas também coloca uma constante 1,0 na parte superior da pilha da FPU. Isso é feito para compatibilidade retroativa com o 8087 (não tenho idéia do por que isso foi feito no 8087; provavelmente um bug). Isso significa que precisamos extrair esse valor desnecessário da pilha. A maneira mais rápida e curta de fazer isso é simplesFSTP st0
, como usamos aqui. Também poderíamos ter feito um multiplique e pop , pois multiplicar por 1.0 não mudará o resultado, mas isso também é de 2 bytes (portanto, não há ganho no tamanho do código), provavelmente será executado mais lentamente e poderá introduzir indeterminação desnecessária. o resultado.Embora um programador ou compilador moderno usasse o conjunto de instruções SSE (e posterior), em vez do x87 antigo, isso exigiria mais código para implementar, pois não há uma instrução única para calcular uma tangente nesses novos ISAs.
fonte
Gelatina , 6 bytes
Experimente online!
O π interno da geléia tem> 8 casas decimais.
fonte
Braquilog , 9 bytes
Experimente online!
fonte
Sakura , 4 bytes
Isso é expandido para
*ij/π⓪⓪
, que éfonte
R , 25 bytes
Entrada de stdin, saída para stdout.
Experimente online!
fonte
cat()
. 5 bytes a menos.MATL , 7 bytes
Experimente online!
fonte
Japonês , 7 bytes
Teste-o
Explicação
Apenas implementa o forumla, onde
Mt
é tan,MP
é pi eU
é a entrada.fonte
Ohm v2 , 7 bytes
Experimente online!
Quão?
fonte
var'aq , 51 bytes
Explicação
fonte
Lisp comum, 29 bytes
Experimente online!
fonte
JavaScript (ES6), 24 bytes
Tente
fonte
Python 2 , 45 bytes
Experimente online!
fonte
Pitão , 9 bytes
Suíte de teste.
Quão?
fonte
Gaia , 5 bytes
Experimente online!
Quão?
fonte
Rápido , 35 bytes
Com avisos do compilador:
Experimente aqui!
Sem avisos do compilador, 40 bytes :
fonte
Excel, 16 bytes
fonte
Perl, 14 + 16 = 30
14 bytes para o programa apropriado e 16 para as opções de linha de comando
fonte
Prolog (SWI) , 25 bytes
Experimente online!
Esta é a minha primeira submissão ao codegolf, espero que eu esteja bem. Escrito como uma função.
fonte
IBM / Lotus Notes Formula Language, 13 bytes
Entrada obtida por meio de um campo denominado a no mesmo formulário do campo que contém a fórmula. Nenhum TIO disponível, portanto, captura de tela de todos os casos de teste mostrados abaixo:
fonte
PowerShell , 38 bytes
Experimente online!
Faz exatamente o que diz na lata, só demora um pouco mais devido às longas
[math]::
chamadas do .NET.fonte
Ruby , 27 bytes
Experimente online!
fonte
Pari / GP , 14 bytes
Experimente online!
fonte
C # (compilador Mono C #) , 24 bytes
Experimente online!
fonte
n=>
ao início para transformar isso em uma função de seta (leve isso com uma pitada de sal, não sei C #) que é válido.System.Func<T, T>
, o que levaria afloat
como entrada e outro como saída. A declaração ficaria assim:System.Func<float, float> f = n=>n*Math.Tan(Math.PI/n);
onde o número de bytes começarian=>
. No meu exemplo eu omitido dois de seus suportes para salvar 2 bytes;)RPNGolf 0.6 / 0.7 , 12 bytes
Minha primeira postagem usando o RPNGolf, minha nova linguagem baseada em pilha!
Este é um programa completo que lê um número inteiro da entrada padrão e imprime a saída na saída padrão (sem uma nova linha à direita).
Explicação:
fonte