Это математическая задача, которая ставит под сомнение довольно много вещей, что делает ее довольно сложной, и, как вы уже догадались, это кодовый гольф, поэтому он должен быть как можно короче.
Ввода , n
является любое целое число (должно по крайней мере поддержки целых чисел, но не обязательно должны быть ограничены). Выход является средним из:
n
- Площадь
n
- Ближайшее простое число к
n
- Ближайшее число
n
в последовательности Фибоначчи
Вскоре программа должна печатать на стандартный вывод канала на результат в(n+(n*n)+closestPrime(n)+closestFib(n))/4
.
Ты не нужно заботиться о возможных переполнениях и т. Д. Нормальная точность с плавающей запятой тоже подойдет.
Способ ввода данных полностью зависит от вас. Самая короткая программа (в символах) выигрывает, как всегда, с кодом игры в гольф.
В случае, если при поиске ближайшего вам подходит галстук, выберите один из следующих вариантов:
- Подниматься
- Опускаться
- Выберите один случайно
Ответы:
Python 160 символов
Небольшое объяснение о ближайшей части Фибоначчи:
источник
[b,a][2*N-a-b<0]
:)GolfScript, 59 символов
Этот скрипт не удовлетворяет некоторым требованиям:
n >= 2
, в противном случае происходит сбой.n
Краткое описание кода:
~:N..*
Ввод сохраняется в N, и мы сразу же нажимаемn
и квадрат, и квадратn*n
..,2>
Мы сгенерируем список простых чисел путем фильтрации массива[2..n*n]
. Мы использовали наше предыдущее вычислениеn*n
в качестве (очень плохой!) Верхней границы для нахождения простого числа, большего чем n.{:P{(.P\%}do(!},
Наш предыдущий массив фильтруется пробным делением. Каждое целое число P проверяется на каждое целое число [P-1..1].{{N-.*}$0=}:C~
Сортирует предыдущий массив по расстоянию доn
и получает первый элемент. Теперь у нас есть ближайший штрих.[1.{.@+.N<}do]C
Мы генерируем Фибоначчи, пока не получимn
. К счастью, этот алгоритм естественным образом отслеживает предыдущие Фибоначчи, поэтому мы бросаем их обоих в массив и используем нашу раннюю сортировку по расстоянию. Теперь у нас есть самые близкие Фибоначчи.+++4/
Средний. Обратите внимание, что GolfScript не поддерживает поплавки, поэтому результат усекается.GolfScript, 81 символ
Вот вариант, который отвечает всем требованиям.
Чтобы обеспечить правильное поведение для
n<2
, я избегаю2<
(сбой, когда массив маленький), и вместо этого использую3,|2,^
. Это гарантирует, что массив-кандидат будет именно[2]
тогда, когдаn < 2
. Я изменил верхнюю границу для следующего простого числа сn*n
на2*n
( постулат Бертрана ). Также 0 считается числом Фибоначчи. Результат рассчитывается по математике с фиксированной точкой в конце. Интересно, что кажется, что результат всегда в четвертых (0, .25, .5, .75), поэтому я надеюсь, что 2 десятичных знака точности достаточно.Моя первая попытка использования GolfScript, я уверен, что есть возможности для улучшения!
источник
JavaScript, 190
[257]
несжатый:
источник
a=0
и увеличивать положительно. Вместо проверкиisPrime
дляa
иb
, просто проверитьisPrime(n+a)
иisPrime(n-a)
. Вы могли бы, вероятно, смешать все это в одно безумное троичное утверждение, но я ужасен с javascript.function closestPrime(n,o){return isPrime(n+o)?n+o:isPrime(n-o)?n-o:closestPrime(n,o+1);}
. Назовите это как,closestPrime(n,0)
и это сработает само. Укоротить по мере необходимости.Mathematica,
7069 байтОдин байт сохранен благодаря Sp3000 (иногда встроенные модули - не лучший способ).
Это определяет безымянную функцию, принимающую целое число и производящую точное среднее значение как рациональное число. В случае связей выбирается меньшее простое число / число Фибоначчи.
Это очень неэффективно для больших входов, потому что на самом деле генерирует первые
2n
простые числа и числа Фибоначчи, прежде чем выбирать самые близкие.источник
#&@@#
.. а?#
аргумент чистой функции (off
). В данном случае это фактически сама функция, посколькуf
она применяется кPrime
иFibonacci
. Так что это#@Range@...
применяет данную функцию к каждому целому числу в диапазоне. Тогда#&@@
это всего лишь удачный способ извлечь первый элемент списка. Он работает, применяя#&
к списку, который является функцией, которая просто возвращает свой первый аргумент.Q, 119
Не самый эффективный.
источник
MATLAB 88 символов
n ваше целое число
Работает с нецелыми числами, насколько я тестировал, он работает и с очень большими числами, тоже работает чертовски быстро.
источник
Скала 299
Тест и вызов:
Вопрос говорит о том,
any Integer
но проблема не так интересна для значений ниже 0. Однако - с чего начать? В 0? На 1? А какой следующий прайм для 11? 11 сама?Идея разрешить следующий больший или меньший в случае ничьей плоха, потому что это делает сравнение бесполезным. Если ваши результаты отличаются, они могли выбрать другой фиб, другой простейший, другой фиб и другой простый, или ваш неверный, или результат другого человека неверный, или это комбинация: другой выбор, но неправильно, хотя, может быть, оба не правы.
источник