В 1946 году Эрдос и Коупленд доказали, что определенное число является нормальным числом , то есть цифры в его десятичном разряде распределены равномерно.
Пользователи будут вводить последовательность цифр, и вы найдете наименьшее простое число, которое содержит эту строку в базе 10.
Пример:
input -> output
"10" -> 101
"03" -> 103
"222" -> 2221
"98765" -> 987659
Самый короткий код в байтах побеждает. Я знаю, что некоторые языки (mathematica, sage, pari-gp ...) поставляются со встроенными функциями, связанными с простыми числами. -50 байт, если ваша программа не использует такие функции. Не пытайтесь обмануть это, пожалуйста, если ваш язык уже имеет огромное преимущество, не претендуйте на бонус.
редактировать
Согласно нескольким комментариям ниже, наименьшее простое число, которое содержит «03», равно 3. Это действительно имеет значение? Единственное, о чем я могу думать, это то, что, возможно, числа легче обрабатывать, чем строки.
В таких случаях, как «03», предпочтительным выводом будет 103. Однако я не считаю его основной частью вашей программы, поэтому вы можете игнорировать любой начальный ноль, если он дает вам меньшее количество байтов.
Ответы:
Golfscipt,
3332 байта = -18 баллОбъяснение:
2{...}{)}/
- начиная с2
, пока что-то верно, увеличивать вершину стека;;x
- отбросьте промежуточные значения, собранные{}{}/
и введенные данные, затем поместите последнее проверенное значение:x,2>
- хранить значение , какx
, то список от2
доx-1
{x\%!},!!
- оставьте те, которыеx
делятся на, затем приведите к логическому (не пустому)x`3?)!
- поискать ввод в текстовом видеx
(-1
если не найден), приращение, отрицание.|
- илиисточник
Программа на Haskell, 97 символов = 47 баллов
Функция Haskell, 75 символов = 25 баллов
тип
p
есть(Integral a, Show a) => [Char] -> a
. Если вы предоставляете свой собственный целочисленный тип, вы можете искать по инфиксам в своем собственном представлении этих значений. СтандартInteger
использует ожидаемые десятичные обозначения для целых чисел.Не очень быстро Квадратичное значение (не размер) вывода.
версия без золота:
пример:
источник
Ява - 175 символов.
источник
indexOf(a[0])>=0)
и{System.out.println(n)
.boolean p=true
их чем-то вродеint p=1
и так далее.Mathematica 58
Относительная синхронизация на моем Mac (2,6 ГГц i7 с 8 ГБ памяти).
Найдите наименьшее простое число, содержащее «01».
Найдите наименьшее простое число, содержащее «012345».
Найдите наименьшее простое число, содержащее «0123456».
источник
StringFreeQ
чтобы сделать его короче.Мудрец , 72
Запускается в интерактивном режиме
Primes().unrank(i)
даетi
простое число, причем 0-е простое число равно 2.источник
R, 56 знаков -50 = 6
Примите вход как стандартный. Увеличивает k, пока k не станет простым числом (проверяется путем суммирования экземпляров, для которых k mod 2 и k равны нулю, следовательно, FALSE, поскольку 0 превращено в логическое, равно FALSE) и содержит строку, заданную в качестве входных данных (проверено с помощью простого grep, здесь grepl так как мы хотим логичный результат).
Использование:
источник
оболочки оболочки (coreutils): 45 знаков
Не определяя здесь функцию ... просто единый аргумент, который принимает один аргумент
$n
и сканирует целочисленный диапазон (фактически немного больше, чтобы сделать код короче). Версия из 55 символов:Это даже не слишком медленно. Для
n=0123456
возвращается201234563
в81.715s
. Это впечатляюще быстро для длинного конвейера с двумя строковыми процессорами.Удалив два символа (до 53) и один канал, мы можем запустить его еще быстрее:
И, наконец, немного
sed
волшебства, чтобы уменьшить его до 45 символов , хотя распечатка уродлива:источник
J - 38 символов -50 = -12 баллов
Обычно в J вы бы использовали очень оптимизированные встроенные функции, предназначенные для простых чисел, поэтому я не собираюсь извиняться за медлительность выполнения.
Разъяснение:
>:@]^:(...)^:_&2
- Начиная с 2, увеличивать до тех пор, пока не(...)
вернется значение false.(+.i.)@]
- Возьмите GCD счетчика с каждым целым числом меньше его. (Мы используем соглашение GCD (X, 0) = X.)]=*/@
- Возьмите произведение всех этих чисел и проверьте на равенство со счетчиком. Если счетчик прост, список был все 1, за исключением GCD с 0; иначе будет хотя бы один GCD, который больше 1, поэтому продукт будет больше, чем счетчик.>./@(E.":)
- Проверьте,":
содержит ли строковое представление counter ( ) строку (E.
) в любой точке.>./
является функцией max, и мы используем ее, потому чтоE.
возвращает логический вектор с 1, где подстрока начинается в основной строке.*:
- Логически NAND результаты вместе. Это будет ложью, только если оба входа были истинны, то есть если счетчик был простым и содержал подстроку.Использование:
Для потомков, вот версия, использующая встроенный прайм (длиной 30 символов, но без бонуса):
1 p:]
проверяет счетчик на простоту вместо трюка GCD.источник
Brachylog (v2), 3 байта в кодировке Brachylog
Попробуйте онлайн!
Передача функции, принимая входные данные из правого аргумента, выводя их путем изменения левого аргумента. (Это противоположно обычному соглашению Brachylog; см. Этот мета-пост для дальнейшего обсуждения. Замена аргументов в более обычный порядок будет стоить три байта.) Ссылка TIO имеет оболочку, которая вызывает функцию с соответствующим соглашением о вызовах и печатает результат.
объяснение
К сожалению, Brachylog настолько подходит для этой задачи, что в соответствии с правилами в этой задаче я даже не могу попытаться получить бонус (что по иронии судьбы означает, что он не способен выиграть).
Одна из причин, по которой мне так нравится Brachylog, заключается в том, что программирование - это связь между человеком и компьютером, и, таким образом, «идеальный» язык позволил бы вам просто перевести спецификацию проблемы на английский напрямую; идеи, с помощью которых была сформулирована проблема, и посредством которых написана программа, были бы одинаковыми. Брахилог может удивлять этот идеал на удивление часто; вопрос здесь заключается в том, чтобы «найти наименьшее простое число, содержащее данную подстроку», и я могу буквально связать воедино понятия «наименьшая простое число, содержащее подстроку» в правильном порядке и получить работающую программу. Таким образом, Brachylog говорит гораздо больше о природе общения, чем язык, на котором вы должны были явно указать алгоритм для решения проблемы; иногда при общении с другими людьми, мы пытаемся объяснить проблему, объясняя шаги, которые вы предпримете для ее решения, но это редко. Так почему же наши языки должны отличаться?
источник
JavaScript 83 байта = 33 балла
Golfed:
Неуверенный (немного):
источник
Javascript (Node.JS) - 93 байта = 43 балла
В извлеченном виде с разумными именами переменных:
источник
Ржавчина 0,9 136 байт = 86 баллов
Очень явный, несмотря на компактность. Слишком много места потрачено на поиск строки. :(
Вот версия без пробелов (136 символов)
источник
Japt, 10 байт
Попытайся
источник
Приборка , 37 байт
Попробуйте онлайн!
источник
Perl 6 , 36 - 50 = -14 очков
Попробуйте онлайн!
Учитывая
$_%%one ^$_
, что только 2 байтаменьше,чем.is-prime
, я думаю, это стоит того, чтобы получить бонус. Это время ожидания для последнего контрольного примера.Объяснение:
источник
:$
Python 3 ,
8079 байтов - 50 =3029 баллов-1 байт благодаря творческому использованию @ ASCII-only
%s
вместоstr
Контрольный пример "98765" еще не подтвержден из-за того, сколько времениуходитна тестирование.Подтверждено для контрольного примера "98765" через пару часов, но с аналогичным подходом, который использует оценку короткого замыкания, чтобы избежать проверки на простоту, он работает намного быстрее. В качестве альтернативы, это может быть примерно в 2 раза быстрее, если мы знаем, что «2» не является входом (мы можем избежать проверки четных чисел на простоту), устанавливаяi=3
изначально иi+=2
в цикле, без дополнительных затрат в байтах.Попробуйте онлайн!
Объяснение
while
условия ((x in"%s"%i)*all(i%j for j in range(2,i))-1
):(x in"%s"%i)
:True
/1
если текущий счетчик содержит желаемую последовательность чисел в нем;False
/0
иначе.all(i%j for j in range(2,i))
:True
/1
если текущий счетчик всегда имеет остаток при делении на любое целое число от 2 (включительно) до себя (исключая), т.е. является простым;False
/0
иначе.В
*
умножает два условия вместе, и выступает в качествеand
оператора - продуктTrue
/1
тогда и только тогда , когда оба условияTrue
/1
.-1
Выступает в качествеnot
оператора:False
/0
- 1 приводит к-1
, который считается истинным, тогда какTrue
/1
- 1 приводит к0
, который считается ложным. Таким образом, цикл продолжается, пока число либо не содержит желаемой последовательности чисел, либо не является простым.Замените
*
сand
и добавьте круглые скобки вокруг всего, но-1
для гораздо более быстрого, эквивалентного решения (которое немного длиннее).76 байт - 50 = 26 баллов раствор в Python 2 дается @ ASCII - только (использует
``
вместо тогоstr()
,Попробуйте онлайн!
источник
return I
JavaScript, 65 - 50 = 15 баллов
Попробуйте онлайн!
источник