Вызов
При входном целом число n > 0
, выходном число простых чисел ( другом , чем n
, если n
сам по себе является простой) , который может быть получен путем изменения одну цифры в десятичном разложении п (без изменения количества цифр).
Примеры
Например, n = 2
. Изменяя одну цифру в десятичном разложении 2
, мы можем придумать три дополнительных простых числа 3, 5, 7
, поэтому a(n) = 3
.
Для другого примера n = 13
. Изменяя одну цифру, вы можете получить простые числа 11, 17, 19, 23, 43, 53, 73, 83
, так a(13) = 8
.
Для окончательного примера n = 20
. Изменяя одну цифру, вы можете получить простые числа 23, 29
, так a(20) = 2
.
Последовательность
Вот первые 20 условий, чтобы вы начали. Это OEIS A048853 .
4, 3, 3, 4, 3, 4, 3, 4, 4, 4, 7, 4, 8, 4, 4, 4, 7, 4, 7, 2
правила
- Можно предположить, что ввод и вывод соответствуют целочисленному типу вашего языка.
- Ввод и вывод может быть дан в любом удобном формате .
- Игнорировать ведущие нули (например,
03
это не простое число в этой формулировке). - Либо полная программа или функция приемлемы. Если функция, вы можете вернуть вывод, а не распечатать его.
- Если возможно, укажите ссылку на среду онлайн-тестирования, чтобы другие люди могли опробовать ваш код!
- Стандартные лазейки запрещены.
- Это код-гольф, поэтому применяются все обычные правила игры в гольф, и выигрывает самый короткий код (в байтах).
code-golf
sequence
arithmetic
primes
AdmBorkBork
источник
источник
n
для которых выход0
. Я думаю , что этоn = 200
. Я также думаю , что они приходят в пучках:200,202,204,206,208
,320,322,...,328
,510,...,518
,620,...628
,840,...,848
и т.д.Ответы:
05AB1E ,
17161411 байтОбъяснение:
Попробуйте онлайн! или до 100 .
источник
.L
? Шутки в сторону?.L
?!?!L
.<
чтобы сохранить байт. Даже если фильтр не удаляет100
/1000
/10000
/ и т. Д., Он все равно никогда не будет простым, поэтому не повлияет на вывод.Python 2 ,
146 136 127 121118 байтСпасибо @ Mr.Xcoder за предложения
Объяснение:
Генерируйте числа с длиной, равной длине ввода, пропуская сначала (1,10,100,1000, ...)
Убедитесь, что сгенерированное число отличается от введенного значения только на одну цифру
Проверьте для премьер
подсчитывать
Попробуйте онлайн!
источник
r=range
, так как вы используете это много раз ...?143
? Потому что я вижуrange(1,10)
, что это исключает0
и103
является основным0
вr(0,10)
.r(10)
достаточно.lambda I,r=range:
Javascript (ES6) 148 байт
Принимает ввод как строку и возвращает как число
Пример кода:
источник
Желе ,
211815 байт3 байта благодаря Денису.
Попробуйте онлайн! или Проверьте все тестовые случаи .
источник
æḟ⁵æR×⁵$DnDS€ċ1
сохраняет несколько байтов.Mathematica, 105 байт
Попробуйте онлайн!
Function
который ожидает положительное целое число#
. Устанавливаетf
равный функции,IntegerDigits
которая возвращает список цифр своего ввода. БеретRange
отg
до10g
(включительно), гдеg=10^Length@f@#/10
находится самая большая мощность10
меньше или равно входному#
, то таким образом, что . проверяет, является ли простое число, проверяет, есть ли разница между списком цифр и имеет форму , и проверяет, что и есть .Count
n
PrimeQ@n&&MatchQ[f@n-f@#,{x=0...,_,x}]&&n!=#
PrimeQ@n
n
MatchQ[f@n-f@#,{x=0...,_,x}]
n
#
{0..., _, 0...}
n!=#
n
#
Unequal
источник
JavaScript (ES6),
153142139 байтПринимает ввод в виде строки. Неопределенное поведение для неверного ввода, хотя оно должно завершаться без ошибок в любой строке, о которой я могу думать. Не обязательно до тепловой смерти вселенной, особенно для длинных струн.
демонстрация
улучшения
Сохранено 11 байтов путем рефакторинга
reduce()
вызовов вmap()
вызовы и путем неявного копирования массиваa
в параметре функции, а не в контекстеsplice()
вызова.Сохранено 3 байта благодаря предложению @Neil преобразовать
[...Array(10)]
в[...''+1e9]
.Унифицированный код
объяснение
Функция использует двухуровневую
map()
сумму для суммирования перестановок, которые проходят тест на простоту, который был заимствован и изменен из этого ответа .(Оригинальный ответ)
Например, чтобы вычислить сумму массива, вы должны передать значение
initialValue
of0
и вернуть значение,aggregate
равноеaccumulator + currentValue
. Немного изменив этот подход, мы вместо этого вычисляем количество перестановок, которые проходят тест на простоту:По сути, это внутреннее
reduce()
, которое повторяет все перестановкиdigitArray
, изменяя каждуюdecimal
на конкретнуюpermutatedDigit
. Затем нам нужно внешнееreduce()
для итерации всех возможных,permutatedDigit
чтобы заменить каждыйdecimal
, который является просто0-9
.Нарушения в реализации
[...''+1e9].map((u,j)=>...
был самым коротким путем @Neil мог придумать, чтобы итерация аргумент0
через9
. Было бы предпочтительнее сделать этоu
, ноu
в этом случае это бесполезно для каждого элемента в массиве.i+j
в троичной проверке состояния, чтобы гарантировать, что0
не возможно перестановка старшей цифры, согласно спецификации вызова.j!=c
гарантирует, что оригиналn
не является кандидатом на прохождение теста на первичность.(a.splice(i,1,j),a.join``)
это своего рода беспорядок.splice()
заменяет цифру atdecimal == i
наpermutatedDigit == j
, но, посколькуsplice()
возвращает[a[i]]
вместо удаленного массива удаленные элементы (в данном случае равные ), мы должны использовать оператор запятой, чтобы передать измененный массивa
в тест на простоту, но не передjoin()
его выполнением. в числовую строку.Наконец,
eval()
необходимо сохранить байт, поскольку по сравнению с более каноническим подходом он короче:Ссылка на простой тест
p
инициализируется в неиспользованном аргументеmap()
вызова.источник
[...''+1e9]
что короче.Python 2 , 134 байта
Попробуйте онлайн!
Более элегантная, длинная версия:
Ввод принимается как строка.
Пояснение (старая версия)
lambda x,r=range,l=len:
- Определяет лямбду с параметром Stringx
и двумя постоянными параметрамиr=range
иl=len
.sum(1...)
- Получить длину, которая экономит 1 байтlen([...])
.for f in r(10**~-l(x),10**l(x))
- Генерирует абсолютно все числа с тем же порядком величины, что и вход (ожидаемо для0
). Например, ввод3
, приведет к[1, 2, 3, 4, 5, 6, 7, 8, 9]
.sum(1for t in r(l(x))if`f`[t]==x[t])==~-l(x)and f>1
- Проверяет, находится ли текущее число точно на 1 цифре от входа и превышает ли оно 1.all(f%v for v in r(2,f))
- Проверяет, является ли текущий номер простым.источник
sum(1for..ifBOOL)
чтобыsum(BOOLfor)
сохранить несколько байтов</joke>
)JavaScript (ES6), 137 байт
Адаптирует мой другой ответ к представлению полной программы с использованием методов Web API
prompt()
иalert()
.источник
Бин , 126 байт
Попробуйте онлайн!
Адаптация моей полной программы JavaScript .
Эквивалент JavaScript
объяснение
a
неявно инициализируется как первая строка ввода в виде строки, а последний операторs
неявно выводится, который содержит сумму простых перестановок.источник
Шелуха , 32 байта
Попробуйте онлайн!
Ungolfed / Пояснение
источник
Japt ,
2823 байта-5 байт благодаря @ETHproductions.
Принимает строку в качестве ввода.
Попробуйте онлайн!
источник
¬x@AÇ|Y©+UhYZsÃâ kUn)èj
?PHP ,
151147141140136134129128 байт-6 байт благодаря @Einacio; -1 байт благодаря @Titus
Попробуйте онлайн!
Отформатировано, с комментариями:
Чтобы это было как можно короче, я должен:
$f = $t = 1
;++
приращение как часть другого выражения$f += $i % $t++ == 0
(приращение выполняется после операции модуля и поэтому не влияет на его результат);if
оператор для условного приращения, использовался тот факт, что логическое значение true, когда приведение к целому числу становится 1, используется$c += $f == 2;
вместоif ($f == 2) $c++;
.источник
levenshtein
. Хорошая идея!$i%$t++<1
короче чем$i%$t++==0
.Perl 6 , 83 байта
Попробуйте онлайн!
источник
X~
вместоmap
? 81 байтPHP, 100 + 1 байт
Запустите как трубу с
-nR
или попробуйте онлайн .сломать
источник
Java 8,
201194 байтаОбъяснение:
Попробуй это здесь.
new Integer(s.substring(0,i)+j+(i<l?s.substring(i+1):"")
приведет к этим целым числам:Для
0-9
:1, 2, 3, 4, 5, 6, 7, 8, 9
.Для
10
:10, 20, 30, 40, 50, 60, 70, 80, 90, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19
.Для
11
:11, 21, 31, 41, 51, 61, 71, 81, 91, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19
.и т.п.
источник
JavaScript (ES7), 118 байт
Принимает ввод в виде строки.
Попробуйте онлайн!
комментарии
источник
Рубин с
-rprime
, 101 байт-rprime
Попробуйте онлайн!
источник