Фон
Эти металлические средства , начиная с известной золотой середины , определены для любого натурального числа (положительное целое число), и каждый из них является иррациональным константа (она имеет бесконечное расширение единовременных десятичную).
Для натурального числа , то металлическое среднее является корнем квадратного уравнения
Корни всегда
но металлическое среднее обычно дается как положительный корень. Так что по этому вопросу он будет определяться:
В результате получается знаменитое золотое сечение:
Вызов
Ваш код должен принимать 2 входа: n и p (порядок не важен, если он последовательный)
- n - натуральное число, указывающее, какое металлическое среднее
- p - натуральное число, указывающее, сколько десятичных разрядов точности
Ваш код должен выводить n-е металлическое среднее с точностью до десятичных знаков.
Период действия
Ваш код действителен, если он работает для значений n и p от 1 до 65 535.
Вы должны вывести десятичное число в виде
цифра (ы). цифра (ы) (без пробелов)
Например, золотая середина до 9 знаков после запятой
1,618033988
Выведите последнюю цифру без округления, как это будет отображаться в более длинном десятичном разряде. Следующая цифра в золотом среднем - 7, но последние 8 в примере не следует округлять до 9.
Количество десятичных цифр должно быть p, что означает, что любые завершающие нули также должны быть включены.
Ответы формы
не действительны - вы должны использовать десятичное расширение.
Вы можете вывести до 1 новой строки и до 1 новой строки. Вы не можете выводить пробелы или любые другие символы, кроме цифр и одиночной точки / полной остановки / периода.
Гол
Это стандартный код гольфа: ваш счет - это количество байтов в вашем коде.
Leaderboard
(Используя фрагмент списка лидеров Мартина )
R, 116 байт
Это читает два целых числа из STDIN и печатает результат в STDOUT. Вы можете попробовать это онлайн .
Ungolfed + объяснение:
Если у вас не установлена
Rmpfr
библиотека, вы можете,install.packages("Rmpfr")
и все ваши мечты сбудутся.источник
Mathematica, 50 байтов
Определяет анонимную функцию, которая принимает
n
иp
в порядке. Я используюFloor
для предотвращения округления сSetAccuracy
, что мне нужно для получения десятичного вывода.источник
p>15
.CJam, 35 байт
Сначала читает p , затем n .
Попробуйте онлайн в интерпретаторе CJam .
Как это устроено
Мы просто вычисляем формулу из вопроса для n × 10 p , получаем целую и дробную часть результата, разделенную на 10 p , дополняем дробную часть начальными нулями, чтобы получить p цифр, и печатаем части, разделенные точкой.
источник
Python 2, 92 байта
Сейчас, когда я смотрю на ответы, похоже, что в ответе CJam используется тот же базовый метод, что и здесь. Он рассчитывает ответ
n*10**p
и затем добавляет десятичную точку. Это невероятно неэффективно из-за способа вычисления целочисленной части квадратного корня (просто добавляя 1, пока он не попадет туда).источник
PHP,
8578 байтОн использует математическое расширение BC Math, которое в некоторых системах недоступно. Это должно быть включено во время компиляции , указав параметр
--enable-bcmath
командной строки. Он всегда доступен в Windows, и кажется, что он включен в версию PHP в комплекте с OSX.Обновить :
Я применил все хаки, предложенные @blackhole в их комментариях (спасибо!), Затем я сжал инициализацию для
$n
первого использования (еще 3 байта сохранено), и теперь код помещается в одну строку в поле кода выше.источник
echo
, просто оставьте после них пробел.bcscale
возвратаtrue
, вы можете использовать$n=$argv[bcscale($argv[2])];
и сохранить еще 2 байта.bcpow($n,2)
вместо того, чтобыbcmul($n,$n)
сэкономить 1 байт.J, 27 байт
Объяснение:
Назовите это так:
Другое, немного более прохладное решение:
Который вычисляет корни многочлена x ^ 2 - nx - 1. К сожалению, способ, которым J форматирует результат, делает получение нужного корня немного длиннее.
источник