Дано целое число, n
где 3 <= n < 2^32
, вычислите площадь правильного n
-гона с апотемой 1; формула для которой есть n * tan(π / n)
. Для тех, кто не знает, что такое апофема:
Апофемом правильного многоугольника является отрезок от центра до середины одной из его сторон.
Выведите площадь n
-gon в виде числа с плавающей запятой, содержащего не менее 8 десятичных знаков.
Контрольные примеры
3
5.1961524227
6
3.4641016151
10
3.2491969623
20
3.1676888065
99
3.1426476062
1697
3.1415962425
15000
3.1415926995
Примечание. Приведенные выше тестовые примеры содержат на 2 цифры больше, чем требуется для вывода.
Area@RegularPolygon
должно бытьArea@*RegularPolygon
; как сейчас, он не может быть записан в переменной. То естьf = Area@RegularPolygon; f[3]
не работает. Соответствующая мета-дискуссияJava (OpenJDK 9) , 24 байта
Попробуйте онлайн!
источник
На самом деле , 5 байтов
Попробуйте онлайн!
Как?
Альтернатива:
ß╦/T*
. о_О На самом деле на самом деле бьет желе !!!источник
Машинный код x87, 11 байт
Приведенные выше байты кода определяют функцию, которая вычисляет площадь обычного n-гона с апофемом 1. Для этого вычисления используются инструкции FPU x87 (классическая единица с плавающей запятой на процессорах x86).
Следуя стандартному соглашению о вызовах на основе регистров x86 (в данном случае
__fastcall
), аргумент функции является указателем на целое число, переданное вECX
регистре. Результатом функции является значение с плавающей запятой, возвращаемое вверху стека с плавающей запятой x87 (регистрST0
).Попробуйте онлайн!
Неуправляемая сборка мнемоники:
Как вы можете видеть, это в основном простое вычисление по заданной формуле,
результат = n * tan (π / n)
Только пара интересных вещей указывает на то, что:
FLDPI
). Это редко использовалось, даже в те времена (и, очевидно, намного меньше сейчас), но оно короче по размеру, чем встраивание константы в ваш двоичный файл и его загрузка.FPTAN
заменяет значение входного регистра (вершина стека FPU) на результат, но также помещает константу 1.0 в верхнюю часть стека FPU. Это сделано для обратной совместимости с 8087 (я понятия не имею, почему это было сделано на 8087; вероятно, ошибка). Это означает, что мы должны вытолкнуть это ненужное значение из стека. Самый быстрый и короткий способ сделать это - простойFSTP st0
, как мы используем здесь. Мы могли бы также сделать умножение-и-всплытие , поскольку умножение на 1,0 не изменит результат, но это также 2 байта (поэтому нет выигрыша в размере кода), вероятно, будет выполняться медленнее и может привести к ненужной неопределенности в результат.Хотя современный программист или компилятор будет использовать набор инструкций SSE (и более поздних), а не устаревший x87, для этого потребуется больше кода для реализации, поскольку нет единой инструкции для вычисления касательной в этих более новых ISA.
источник
Желе , 6 байт
Попробуйте онлайн!
Π встроенный в желе имеет> 8 десятичных знаков.
источник
Брахилог , 9 байт
Попробуйте онлайн!
источник
Сакура , 4 байта
Это расширяется до
*ij/π⓪⓪
, который являетсяисточник
R , 25 байт
Ввод из stdin, вывод в stdout.
Попробуйте онлайн!
источник
cat()
. На 5 байт меньше.MATL , 7 байт
Попробуйте онлайн!
источник
Japt , 7 байт
Проверь это
объяснение
Просто реализует форум, где
Mt
загар,MP
пи иU
это вход.источник
Ом v2 , 7 байт
Попробуйте онлайн!
Как?
источник
var'aq , 51 байт
объяснение
источник
Common Lisp, 29 байт
Попробуйте онлайн!
источник
JavaScript (ES6), 24 байта
Попытайся
источник
Python 2 , 45 байт
Попробуйте онлайн!
источник
Pyth , 9 байт
Тестирование.
Как?
источник
Gaia , 5 байт
Попробуйте онлайн!
Как?
источник
Swift , 35 байт
С предупреждениями компилятора:
Попробуй это здесь!
Без предупреждений компилятора, 40 байт :
источник
Excel, 16 байт
источник
Perl, 14 + 16 = 30
14 байтов для самой программы и 16 для переключателей командной строки
источник
Пролог (SWI) , 25 байт
Попробуйте онлайн!
Это моя первая подача в Codegolf, надеюсь, у меня все хорошо. Написано как функция.
источник
IBM / Lotus Notes Formula Language, 13 байтов
Ввод осуществляется через поле с именем a в той же форме, что и поле, содержащее формулу. TIO недоступен, поэтому скриншот всех тестовых случаев показан ниже:
источник
PowerShell , 38 байт
Попробуйте онлайн!
Делает именно то, что говорит на жестяной банке, просто занимает немного больше времени из-за длительных
[math]::
вызовов .NET.источник
Рубин , 27 байт
Попробуйте онлайн!
источник
Пари / ГП , 14 байтов
Попробуйте онлайн!
источник
C # (моно C # компилятор) , 24 байта
Попробуйте онлайн!
источник
n=>
в начало, чтобы превратить это в функцию стрелки (возьмите это с щепоткой соли, я не знаю C #), что является допустимым.System.Func<T, T>
, который будет принимать вfloat
качестве входных данных, а другой - в качестве выходных. Декларация будет выглядеть следующим образом:,System.Func<float, float> f = n=>n*Math.Tan(Math.PI/n);
где начнется bytecountn=>
. В моем примере я опустил две скобки, чтобы сохранить 2 байта;)RPNGolf 0,6 / 0,7 , 12 байт
Мой первый пост с использованием RPNGolf, моего нового стекового языка!
Это полная программа, которая читает целое число из стандартного ввода и печатает вывод в стандартный вывод (без завершающей строки).
Объяснение:
источник