Ваша задача, если вы решите принять ее, состоит в том, чтобы закодировать в гольф функцию, которая возвращает истину или ложь (или какое-либо аналогичное значащее представление «да» и «нет»), если число соответствует следующим критериям:
- Целое число само является простым числом ИЛИ
- Любое из соседних целых чисел является простым
Например:
ввод 7
вернул бы True.
Ввод 8
также вернул бы True.
Вход 15
вернул бы False. (Ни 14, 15, ни 16 не являются простыми)
Входные данные должны быть в состоянии правильно возвращать числа от 2 ^ 0 до 2 ^ 20 включительно, поэтому не нужно беспокоиться о проблемах со знаками или целочисленных переполнениях.
code-golf
number
primes
decision-problem
Мистер лама
источник
источник
Ответы:
J, 17
Возвращает логические значения, закодированные как коды возврата процесса: ноль для true, ненулевое значение для false. Образец использования:
источник
*/0 p:<:,],>:
короче и правильная (лямбда) функция есть([:*/0 p:<:,],>:)
Haskell, 47 символов
источник
Python
8580Впервые на Code Golf, так что, возможно, мне не хватает некоторых хитростей.
источник
[]
. все будут более чем рады работать с выражением генератора. Если вы не против того, чтобы ваш код был некрасивым, вы также можете удалить пробелы между0
иfor
, и)
иor
.f=lambda n:any(all(m%i for i in range(2,m))for m in[n,n-1,n+1])
Не реальный претендент на нехватку кода каким-либо образом, но все еще подчиняющийся, так как определение простоты по регулярному выражению искажено во многих отношениях!
Python (2.x), 85 символов
источник
Рубин (55 или 50 как лямбда)
или как лямбда (используйте,
g[23]
чтобы назвать это)Кофейня (53)
источник
Скучная Mathematica, 35 р-р !
источник
Or@@PrimeQ/@{n-1,n,n+1}
.Or@@PrimeQ@{#-1,#,#+1}&
(косая черта в его коде не нужна)С
1128272 символаПосле комментария Ильмари Каронен, сохранив 30 символов, удалив
main
, теперьP
возвращает true / false. Также заменены циклы с рекурсией и еще несколько твиков.Оригинальная версия:
источник
main(n,m)int**m;
.Mathematica, 24 байта
Не знаю, почему этот старый пост появился в моем списке сегодня, но я понял, что Mathematica здесь конкурентоспособна.
Безымянная функция, принимающая целочисленный аргумент и возвращающая
True
илиFalse
. Прямая реализация.источник
PrimeQ
потоки над списками, такOr@@PrimeQ@{#-1,#,#+1}&
(илиOr@@PrimeQ[#+{-1,0,1}]&
) также работает, для -1 байт. (Хотя, я думаю, я не знаю,PrimeQ
переплетались ли списки в 2012 году.)Stax , 6 байт
Запустите и отладьте его
Объяснение (без упаковки):
источник
JavaScript (71
7380)Демо: http://jsfiddle.net/ydsxJ/3/
Изменить 1: Изменить
for(i=2;i<j;i++)
наfor(i=1;++i<j;)
(спасибо@minitech
). Перевестиif
заявление в троичное. Переместилсяr|=p
иp=1
во внешнее,for
чтобы устранить внутренние скобы. Сохранено 7 символов.Изменить 2: Объединить
p=1
и,j++<=n
чтобыp=j++<=n
сохранить 2 символа (спасибо@ugoren
).источник
for(i=1;++i<j;)
вместо того,for(i=2;i<j;i++)
чтобы сохранить еще 1 символ.!j%i
не будет работать из-за приоритета. Рабочая альтернатива естьj%i<1
.p=j++<=n
? Если Javascript здесь похож на C, он должен работать.Регулярное выражение (ECMAScript), 20 байтов
^x?x?(?!(x+)(x\1)+$)
Попробуйте онлайн!
Вышеприведенная версия неправильно обрабатывает ноль, но это занимает всего 1 дополнительный байт:
^x?x?(?!(x+)(x\1)+$)x
В качестве дополнительного бонуса, вот версия, которая дает ответное совпадение
1
для одного меньше простого,2
для простого и3
для одного больше простого:^x?x??(?!(x+)(x\1)+$)x
Попробуйте онлайн!
источник
C #, 96
Возвращает -1,0,1 для истины, все остальное ложно.
Любые предложения, чтобы сделать его короче было бы замечательно!
Расширенная форма:
источник
if(i==r-1)break;
и изменить серединуfor
цикла сi<r
наi<r-1
. Это приведет вас к 82.GolfScript: 26
Пояснение: самый внутренний блок
{.:i,{i\%!},,2=@|\(}
определяет, является ли вершина стека простой, проверяя, есть ли ровно на 2 фактора меньше вершины стека. Затем он разделяет это со вторым элементом в стеке, который хранит состояние того, было ли еще замечено простое число. Наконец, это уменьшает число на вершине стека.Начните с увеличения входного значения, инициализации исходного состояния и повторите блок 3 раза. Так как это будет уменьшаться вдвое, но мы начали с приращения, это будет охватывать
n+1
иn-1
.источник
C #,
8797 символовисточник
CJam, 12 байт
CJam намного моложе этой задачи, поэтому этот ответ не имеет права на зеленую галочку (которая в любом случае должна быть обновлена до ответа randomra). Тем не менее, игра в гольф на самом деле была довольно забавной - я начал с 17 байтов, а затем полностью изменил свой подход три раза, экономя один или два байта каждый раз.
Это блок, ближайший эквивалент функции в CJam, которая ожидает ввода в стек и оставляет 1 (истинно) или 0 (ложно) в стеке.
Проверьте это здесь.
Вот как это работает:
источник
F #, 68 байт (не конкурирует)
Попробуйте онлайн!
Вот почему я люблю код гольф. Я все еще очень хорошо разбираюсь в F #, но я так много узнаю о том, как работает язык и что он может делать с помощью таких задач.
источник
APL (Dyalog Classic) , 20 байтов
Попробуйте онлайн!
источник
Сетчатка , 22 байта
Попробуйте онлайн!
Принимает унарный в качестве ввода
источник
Java 8, 83 байта
Возвращает
true
/false
как истинные / ложные значения.Попробуйте онлайн.
Объяснение: "
Так что
int p(int n)
это приведет к-1
forn=0
и non-primes, и приведет кn-1
forn=1
или primes. Такp(0)+p(1)+p(2)
как станет-1+0+1 = 0
и вернет false (даже если2
это простое число),n=1
это крайний случай с использованием этого подхода.Один цикл без отдельного метода будет 85 байтов :
Возвращает
1
/0
как истинные / ложные значения.Попробуйте онлайн.
Объяснение:
источник
Japt , 7 байт
Попробуйте онлайн!
источник
R, 68 символов
Использование (1 для TRUE, 0 для FALSE):
источник
i(n-1)|i(n)|i(n+1)
вместоifelse(i(n-1)|i(n)|i(n+1),1,0)
?C ++
источник
Q,
43 символа36источник
J, 16 символов
источник
Питон,
6967 символов8**7 > 2**20
будучи немного короче, чтобы написатьисточник
Рубин, 47 символов, но очень читабельный
источник
C ++ 97
Угорен, кажется, избил меня до умного решения. Таким образом, он является короткой версией цикла трижды:
источник
Forth (gforth) , 104 байта
Попробуйте онлайн!
объяснение
Первичная проверка (р)
Основная функция (е)
источник
Юлия 0,4 , 23 байта
Попробуйте онлайн!
источник
Желе , 5 байт
Попробуйте онлайн!
Как это устроено
источник