Учитывая положительное целое число в качестве входных данных, определите, является ли оно великодушным числом.
Великодушное число - это число, такое, что любая вставка +
знака между любыми двумя цифрами в основании 10 приводит к выражению простого целого числа.
Например, 40427 великодушно, потому что
4+0427 = 431 is prime
40+427 = 467 is prime
404+27 = 431 is prime
4042+7 = 4049 is prime
Выход
Вы должны вывести два разных значения: одно, когда вход великодушный, и другое, когда вход не велик.
счет
Целью этого конкурса будет сделать размер исходного кода, написанного для решения этой задачи, в байтах, как можно меньше.
Тестовые случаи
1 -> True
2 -> True
4 -> True
10 -> False
98 -> True
101 -> True
109 -> False
819 -> False
4063 -> True
40427 -> True
2000221 -> True
1
со знаком плюс, вставленным между любыми двумя символами (без вставки), можно получить только результат1
, который сам не является простым.1
и2
не две цифры множества выражений пуст. Все члены пустого множества простые. Кроме того, ни один из них не является, но это помимо смысла. Это немного сбивает с толку, я дам вам это, но я думаю, что это имеет больше смысла, чем альтернативы.Ответы:
05AB1E , 10 байтов
Код
Использует кодировку 05AB1E . Попробуйте онлайн! или проверьте все контрольные примеры!
объяснение
источник
1 - 9
. Произведение пустого набора равно 1? Зачем?1
умножения его на каждый предмет в наборе, так что ...sum
на[]
это эквивалентно0
, с помощью индукции собственности при реализации была довольно умна.C (gcc) , 83
848583848675111байтовВсе оптимизации отключены и только на GCC 32-bit.
-1 байт благодаря @ceilingcat
+ несколько байтов для
1
дела.+ несколько байтов для многоразовых функций.
Принимает ввод как целое число. Верните 1 для ложных случаев, 0 для истинных случаев.
Попробуйте онлайн!
Смотрите мой другой ответ для кода Mathematica (55 байт).
источник
1
,98
и4063
.Сетчатка , 38 байт
Попробуйте онлайн!
Принты
1
для великодушных номеров и0
прочее.объяснение
Мы начинаем с сопоставления каждой позиции между двумя цифрами (позициями, которые не являются границами слов) и вставляем как префикс, так и суффикс этого совпадения в унарной форме, используя
_
в качестве унарной цифры. Таким образом, вместо того, чтобы вставлять+
s, мы напрямую вставляем туда унарный результат суммы.Теперь мы разбиваем строку вокруг цифр, так что каждая сумма идет своей строкой, и мы избавляемся от этих цифр (также будет пустая начальная и конечная строки, но это не важно).
Это стандартное регулярное выражение для сопоставления не простых чисел в унарных. Использование
G
стадии повторения здесь означает, что мы просто сохраняем все строки, содержащие положительные не простые числа (отбрасывая пустые строки).Наконец, мы проверяем, является ли строка пустой. Если вход был великодушным, предыдущий этап отбросит все строки (потому что все они были простыми числами), и это дает нам
1
. В противном случае, если какая-либо строка не была простой, она останется в строке, и регулярное выражение завершится неудачно, давая0
.источник
Python 2 ,
827978 байтЭто медленно и может справиться только с контрольными случаями с запоминанием.
Попробуйте онлайн!
Альтернативная версия, 79 байт
Ускоряется за счет одного байта.
Попробуйте онлайн!
источник
Желе , 12 байт
Попробуйте онлайн!
Проверьте все контрольные примеры.
источник
d
!Java 8,
1751719488 байт-77 благодаря @PeterTaylor , используя арифметику (вместо String with
.substring
) и избавляясь от отдельного метода, чтобы проверить, является ли целое число простым числом.-6 байт, используя метод первичной проверки @SaraJ, так что убедитесь, что проголосовали за нее!
Попробуй это здесь.
Объяснение:
источник
p
рекурсию; во-вторых, накапливайте результаты таким образом, что главной функции требуется только одинreturn
оператор, делая значение Sentinel изp
be-1
и используя&
для проверки, что все возвращаемые значения являются-1
.n->{for(long d=10,m=1;d<n;d*=10)m|=p(n/d+n%d,2)-2;return m>0;}long p(long n,int i){return i<n?p(n%i<1?1:n,i+1):n;}
d<=n
чтобы справиться10
. Переполнение стека не является проблемой (спецификация не дает диапазона ввода, который должен быть обработан), но может быть исправлено и может быть получена большая экономия путем возврата к циклу и вставке .Pyth , 14 байт
Попробуйте онлайн! Будет отображаться,
True
если число великодушно, вFalse
противном случае. Принимает число в виде строки.Пояснения
источник
Python 2 ,
104 102 98 96103 байтi
полностью анонимным, так как вызывается только один раз.x-1
толькоx
для проверки первичной проверки.x=10
, добавив, таким образом, 7 байт, благодаря @Dennis и @Wheat Wizard за его обнаружение: моя ранняя версия считала 1 простым числомПопробуйте онлайн!
источник
x-1
в конце диапазона; Ассортимент эксклюзив справа.Japt ,
2416 байтЭто было в значительной степени сотрудничество между @Shaggy, @ETHproduction и мной.
Попробуйте онлайн!
Принимает ввод в виде строки.
источник
x
автоматически преобразует элементы в массиве в числа ;-)XîU
это гений. Я думаю, чтоU¯X
работает на ту же длину, но все жеПип ,
2524 байтаПопробуйте онлайн!
объяснение
a
это первый аргумент командной строки.1,#a
генерирует диапазон, содержащий числа1
черезlen(a)-1
. Для этого мы сопоставляем лямбда-функцию:Далее мы сопоставляем другую лямбда-функцию
0N_%,_=1
, которая проверяет на простоту. Я взял это из этого ответа ; Вы можете прочитать объяснение там. Наконец, мы складываем список по логическому AND ($&
). Результат1
если все суммы были простыми,0
если таковые не были.Пример, с вводом
4063
:источник
CJam , 22 байта
Попробуйте онлайн!
Выводит положительное целое число для правды, ноль для фальсификации.
-1 благодаря умному трюку Питера Тейлора .
-3 благодаря другому совету Питера Тейлора.
источник
0&!
короче1+:*
!
возвращает логическое значение, и использовали пересечение множеств с ложным значением,0
так что вы можете делать0&!
в 3 вместо1&!!
...,
вместо оператора используется оператор фильтраf
.!
для преобразования в логическое значение: это было стандартным в GolfScript и стандартным в CJam. И1&!!
было бы неправильно:0&!
это очевидный тест, потому что требование полностью, а не существует.Japt , 23 байта
Принимает ввод в виде строки.
Черт возьми; избитый ударом по более короткой альтернативе, над которой я работал.
Попробуй это
источник
¬£i+YÄÃe@OxX j
4063
(должен быть истиной, ложь). Хитрость заключается в том, что JS считает, что ведущий0
означает, что вы хотите восьмеричный ...40043
например) Просто добавьте+
после,0
чтобы исправить это.Mathematica, 75 байт
Function
который ожидаетString
.PrimeQ@ToExpression@StringInsert[#,"+",n]
Возвращает, дает ли вставка+
послеn
цифры th простое число.Table[...,{n,2,StringLength@#}]
дает список этих значений в видеn
диапазонов от2
длины строки. Затем мы беремAnd
каждый из элементов этого списка. Удобно, еслиStringLength@#<2
, тоTable[...]
есть пустой список, для которогоAnd@@{}==True
источник
Математика, 55
504549505462байтовКажется, я должен опубликовать это отдельно.
+6 байт для длины кода переизмерено.
+5 байт благодаря ngenisis.
Принимает входные данные как целое число и возвращает обычные
True
иFalse
.
В промежутке между Юникодом 0xF4A1, коротки дляFunction[,]
. Длина кода измеряется по размеру файла (UTF-8 без спецификации), прокомментируйте, если он указан неверно.PowerRange[x]
возвращает 1, 10, 100 ... не больше, чемx
введено в Mathematica 10.источник
Простой английский
4,204341315251241240 байт(Повторно) включил тестирование простоты в библиотеку простого английского языка, переместив 3863 байта в библиотеку простого английского. Удалил 26 байт пустого пространства. Сохранено 64 байта путем сокращения локальных переменных. Сохранено 10 байт за счет сокращения интерфейса. Согласно предложению РосЛюП , 1 байт был сохранен путем изменения инициализации и приращения m.
Неуправляемая версия финального кода:
Примечания. Среда IDE на простом английском языке доступна по адресу github.com/Folds/english . IDE работает в Windows. Компилируется в 32-битный код x86.
Osmosian Order «s динамическая вилка равнинных Английский уже в проверки простоты версии 4700, но он использовал очень неэффективный алгоритм (по состоянию на январь-июнь 2017 года). В версиях 4001-4011 динамического разветвления сайта GitHub пропущено тестирование первичности. Версия 4013 динамического разветвления сайта GitHub включает тестирование первичности. Код для тестирования первичности был разработан как часть предыдущих версий этого ответа.
источник
Perl 6 , 58 байт
Попробуйте онлайн!
10, 10 * * ...^ * > $_
является геометрической последовательностью, кратной десяти, взятой до единицы перед элементом, который превышает входной параметр$_
. Затем мы просто проверяем, что для каждой степени десяти сумма входного параметра, взятого div и mod, равна простому.источник
Haskell,
114110 байтРазгромленный с объяснением:
источник
p x=[x]==[i|i<-[2..x],x`mod`i<1]
качестве основной проверки, вы можете сохранить 2 байта.divMod x$10^i
вместоx`divMod`(10^i)
Аксиома, 88 байт
тест и результаты
источник
Брахилог , 11 байт
Попробуйте онлайн!
источник
Perl 6 , 35 байт
Попробуйте онлайн!
Объяснение:
источник
С накоплением , 51 байт
Попробуйте онлайн!
Это функция. Он работает путем преобразования своего аргумента в string (
tostr
), дублирования его и получения его length (:#'
), вычитая 1 (1-
), делая диапазон от 1 до этого числа (~>
). Стек выглядит примерно так, для ввода40427
:Мы выполняем векторизацию
splitat
, в результате чего следующий массив оказывается на вершине стека:Транспонируя это с
tr
, мы получаем:Затем мы отображаем функцию
['+',' '#
# ~ prime](with
map`). Эта функция делает:Затем, после карты, мы объединяем
1
. Это так какall
возвращаетundef
пустой список.источник
JavaScript (ES6), 70 байт
Сбой в последнем случае в моем браузере из-за ошибки "слишком много рекурсии" при расчете
P(200023)
. Надеюсь, это не сделает его недействительным.источник
QBIC , 38 байт
объяснение
источник
CJam (21 байт)
Интернет демо , онлайн набор тестов
рассечение
источник
Pyth,
1514 байтовТестирование
Сохраненный байт с использованием новейшего изменения Pyth.
источник
APL (NARS), символы 35, байты 70
тест:
Это был бы перевод в APL с поста algo здесь.
источник
PHP, 100 байт
печатает,
1
если вход великодушный, пустой вывод, если нет. Запустите как трубу с-nR
или попробуйте онлайн .источник
Perl 5
-p
, 42 байтаПопробуйте онлайн!
источник