Вам нужно сгенерировать наименьшее простое число с n
цифрами, и оно будет содержать только цифры, указанные в списке k
.
Примеры:
Входные данные:
4
1 2
Для этого вы должны сгенерировать наименьшее простое число с 4
цифрами, и это простое число должно содержать только цифры 1
и 2
.
Выход:
2111
Входные данные:
10
0 4 7
Выход:
4000000007
Входные данные:
6
5 5 5 5 5 5 5 5 5 5 1 5 5 5 5 5 5 5 5 5 5
Выход:
115151
Вы можете гарантировать, что ввод всегда будет в указанном вами формате, и вы можете сделать что угодно, если получите неправильный ввод (например, ввод n
без цифры k
).
Если такого решения для входа не существует, ваша программа может выполнить любое из следующих действий:
- Распечатать
banana
- Выбросить ошибку
- Бежать навсегда
- Что-нибудь еще
Поскольку это код-гольф , постарайтесь найти самый короткий код.
Ввод может быть в любом формате, который вы укажете. Например, если вы хотите, чтобы ваш ввод был похож на любой из следующих, это нормально.
4
[1, 2]
[1,2]4
1,2
4
4 12
Вы можете написать программу или функцию, и она должна либо вернуть правильное значение, либо распечатать его.
Пробелы разрешены где угодно.
Этот вызов вдохновлен A036229 .
Ответы:
Брахилог (2), 8 байт
Попробуйте онлайн!
Очень медленно для задач, которые имеют много возможных цифр, или которые содержат 0 в наборе возможных цифр (это работает в этом случае; просто это намного медленнее, чем время ожидания TIO, если проблема не очень проста). Как обычно для Brachylog, это функция, а не полная программа.
Ввод принимается в формате
[ndigits,[list of digits]]
, например[10,[[0,4,7]]]
.объяснение
При взгляде с чисто декларативной точки зрения это говорит: «найдите простое число с заданным количеством цифр, где все цифры являются одной из заданных цифр». Чтобы найти наименьшее такое число, мы используем подсказки порядка оценки, чтобы обеспечить порядок, в котором мы тестируем числа, от наименьшего к наибольшему; в этом случае
ᵐ
решения в начале списка менее подвержены изменениям, чем решения в конце (это естественный порядок, который совпадает с лексикографическим и, следовательно, числовой порядок целых чисел), и поэтому{o∋}ᵐ
имеет два порядка оценки подсказки, «измените последние несколько цифр в первую очередь» (изᵐ
естественного порядка) в качестве более важной подсказки и «проверьте меньшие цифры перед большими цифрами» (отo
до∋
, который выступает в качестве подсказки в этом контексте) как тай-брейк.{o∋}ᵐ
может быть записан как эквивалентoᵐ∋ᵐ
для сохранения байта.источник
Пакет bash + bsd-игр, 28 байт
Ввод в командной строке в виде n, а затем k в виде списка без разделителей.
Попробуйте онлайн.
источник
Python 2 , 66 байт
Попробуйте онлайн!
Принимает участие как
f(3,{'9','3','8'})
.Python не имеет встроенных модулей для простых чисел, поэтому функция генерирует их, используя теорему Вильсона, чтобы проверить каждое потенциальное значение,
k
в свою очередь, на предмет простоты.Цепное неравенство
10**~-n<p%k*k<s>=set(`k`)
объединяет три условияk
:10**~-n<k
:k
содержит как минимумn
цифры. Нам не нужно точно проверять, потому что, если мы достигнем большего количества цифр, не должно быть никакого решенияp%k>0
:k
простое, через условие теоремы Вильсона сp=(n-1)!^2
. Такp%k
как 0 или 1, это может быть объединено с предыдущим условием как10**~-n<p%k*k
s>=set(`k`)
: Все цифрыk
в набореs
. Это может быть объединено, потому что Python 2 считает наборы больше, чем числа.Если ток
k
не удовлетворяет всем этим, функция возвращается кk+1
, добавляя 1 к полученному результату. Так как выход заканчивается сTrue
которого равно1
иk
начинается в1
, выход равенk
. Это параллельное отслеживаниеk
ударов, выводимыхk
непосредственно на успех.источник
JavaScript (ES7), 100 байт
Вводит в виде количества цифр
n
и строки разрешенных цифрs
в синтаксисе каррирования(n)(s)
. Возвращает,undefined
если решение не найдено.Работает довольно быстро до 6 цифр, может работать до 7 и определенно слишком медленно - и требует много памяти - сверх этого.
Тест
Показать фрагмент кода
источник
n=>s=>[...Array(10**n).keys()].find(i=>eval(`/[${s}]{${n}}/`).test(i)&(p=j=>i%--j?p(j):j==1)(i))
Желе , 12 байт
Принимает набор и целое число в качестве аргументов командной строки. Печатает 0, если решения не существует.
Попробуйте онлайн!
Как это работает
источник
Пайк,
1816 байтПопробуй это здесь!
Работает вечно, если не найдено значений
источник
Mathematica, 64 байта
Чистая функция, где первый аргумент - это (отсортированный) список разрешенных цифр, а второй аргумент - это допустимая длина.
Tuples@##
вычисляет все списки разрешенных цифр разрешенной длины, затем мы находим те,FirstCase
которые совпадаютx:{f_,___}
, так что первая цифраf
не является,0
а целое числоy=FromDigits@x
является простым и заменяет его наy
.источник
/;
тест, чтобы выбрать кортеж, но также и:>
конвертировать в желаемый выходной формат. (Я вижу в документации, что это разрешено, но только после прочтения этого ответа!) Вы должны указать, что ваша функция требует сортировки разрешенных цифр: она дает неправильный ответ3331
вместо3313
вызова с[{3,1},4]
.Select[FromDigits/@Tuples[Sort@#,#2],PrimeQ][[1]]&@@#&
?0
и@@#&
кажется излишним.Брахилог , 15 байт
Попробуйте онлайн!
Это довольно медленно.
объяснение
источник
JavaScript (ES6), 86 байт
Принимает ввод через синтаксис карри, например,
(4)('12')
Для запуска в строгом режиме (для оптимизации хвостового вызова [TCO] ). Если ваша среда не поддерживает TCO, это приведет к ошибке переполнения стека для простых чисел, превышающих стек сред.
Для неверных вводов он будет работать вечно.
Заметка:
chrome://flags/#enable-javascript-harmony
и включить этот флаг для запуска приведенного выше фрагмента с поддержкой TCO.источник
F=i=>(P=j=>i%--j?P(j):1==j)(i)&&...
MATL, 17 байт
Эта функция принимает два ввода: целое число, указывающее количество цифр, и массив символов, указывающий возможные значения. В случае отсутствия простых чисел отображается ошибка.
Попробуйте онлайн!
объяснение
источник
Pyth -
1312 байтТестовый пакет .
источник
Sage, 62 байта
Принимает ввод формы:
f( 4 , {'1','2'} )
источник
Perl 6 , 43 байта
Работает вечно, если решения не существует.
источник
05AB1E , 17 байт
Попробуйте онлайн!
источник
05AB1E ,
221918 байт (-1 @Riley)Попробуйте онлайн!
источник
,
в конце.Perl5, 77 байт
Запустите так:
источник
Рубин,
7776 байтФормат ввода: число и строка.
Пример:
источник
Perl 6 , 68 байт
Попытайся
Возвращает,
Nil
если не найдено такое простое число.Expanded:
источник
Python 2 + primefac ,
9185 байтПопробуйте онлайн
Ввод похож
4,{'1','2'}
.источник
1,{'1'}
неверный ввод (потому что 1 не простое число), поэтому вы можете делать там все, что захотите.PHP, 82 байта
Принимает число и строку цифр из аргументов командной строки. Беги с
-nr
.сломать
источник
Java 7,
139141 байт+2 байта, поддерживая числа выше 32-битных (изменено
int
наlong
)Формат ввода: целое число (т.е.
4
) и строка (т.е."12"
)Объяснение:
Тестовый код:
Попробуй это здесь.
ПРИМЕЧАНИЕ. Второй контрольный пример отключен, поскольку он зацикливается очень долго.
Выход:
источник