Codegolf - Отойди От Меня, Сатана-Прайм!

  • Автор темы Fint Ushami
  • Обновлено
  • 22, Oct 2024
  • #1

Сатана-Праймс

кто они?
они есть

 n 
containing 6662->6661 10000->6661 66697->66697 (a SP returns himself) 328765->326663 678987->676661 969696->966677
это Сатана-Праймы: 26669
это НЕТ : [6661, 16661, 26669]

Сюжет

За каждым числом больше 6661 стоят сатанинские простые числа.

Вызов

Учитывая целое число n=30000 find the Satan-Prime позади (или равно) и ближе всего самому себе.

Примеры

Целое число n>6661 has 3 Satan-Primes(SP) behind it: [462667,665669,36363631,555] .
Ваш код должен вернуться [46663,266677,666599,666683,616669] which is the closest behind it

Тестовые случаи

Ввод->Вывод

666

Правила

Ваш код должен работать для любого Primes in the range of your language.

Это , поэтому побеждает самый короткий ответ в байтах!

#код-гольф #код-гольф #простые числа

Fint Ushami


Рег
17 Apr, 2015

Тем
92

Постов
228

Баллов
718
  • 26, Oct 2024
  • #2

Нейм, 9 байт

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ef&/`T*3\6P_TSQ - Full program, with implicit input (Q) at the end

SQ - Range [1,Q]

f              - Filter.

P_T   - Is prime?

&             - And

/`T*3\6      - It contains 666.
e               - Last element.

- Implicitly output the result.

Объяснение:

 
 
 
 
 
 ḟo`€d666dfṗṫ
 

Попробуйте онлайн!

 

Black876


Рег
09 Oct, 2006

Тем
69

Постов
196

Баллов
551
  • 26, Oct 2024
  • #3

Математика, 82 байта

for(i=n;n%--i>0;); ||answer||

Желе, 10 9 байт

Сэкономили 10% благодаря @Dennis!

n->{ // Method with integer as both parameter and return-type for(int i=++n; // Increase the input by 1 // Set `i` to this input+1 (setting `i` to anything above 1 is fine) i>1 // Continue looping as long as `i` is not 0 nor 1 |!(n+"").contains("666");) // or if `n` as String does not contain "666" as substring: for(i=--n; // Decrease `n` by 1 first // And then set `i` to this new `n` n%--i // Decrease `i` by 1 before every iteration >0;); // And continue looping as long as `n` does NOT evenly divide `i` return n;} // After both loops, return the modified `n` as result

Попробуйте онлайн!

Объяснение

n->{for(int i=++n;i>1|!(n+"").contains("666");)for(i=--n;n%--i>0;);return n;} ||answer||

Пиф, 15 14 байт

Сэкономлен 1 байт с помощью Дэйва..

Ошибки памяти для Ƶé· and anything higher on my machine, but it is fine if it is given enough memory.

Ž2ć

Попробуйте здесь или проверьте Тестовый набор.


Как?

666

Пиф, 14 байт

ÅP # Push a list of primes below or equal to the (implicit) input-integer R # Reverse this list .Δ # Find the first value which is truthy for: 666å # Check whether it contains "666" as substring # (after which the found result is output implicitly)

Попробуйте здесь!

 

Du_Lac


Рег
22 May, 2011

Тем
65

Постов
193

Баллов
538
  • 26, Oct 2024
  • #5

Bash + Core Utils, 51 49 байт

f

Принимает аргумент командной строки. Может быть довольно медленным с большими числами.

 

Devmax


Рег
22 Dec, 2006

Тем
63

Постов
212

Баллов
537
  • 26, Oct 2024
  • #6

Математика, 64 62 61 53 байта

Func<int,int> f = null

-1 байт благодаря @KellyLowder

-8 байт (вау) благодаря @Notatree

Объяснение

Введите данные. Мы уменьшаем его при следующих условиях:

  • ввод не является простым, ИЛИ

  • цифры входных данных не содержат трех шестерок подряд.

Мы повторяем это до тех пор, пока не будет достигнут прайм Сатаны.

 

Qwww


Рег
14 Feb, 2011

Тем
73

Постов
195

Баллов
580
  • 26, Oct 2024
  • #8

Япт, 14 байт

func f

Проверьте это

Видя, как там был бонус 50% по времени: завершение тестового примера int in under half a second.


Объяснение

Неявный ввод целого числа f=>{for(int i=f;i>1;i--){int p=1,j=2;while(j<i)if(i%j++<1)p=0;if(p>0&$"{i}".Contains("666"))return i;}return 0;} .

my&f={/666/&&.is-prime??$_!!f $_-1}

Сгенерировать массив целых чисел из <?php $p=[2];$s=[];for($i=3;$i<=$argv[1];$i++){foreach($p as $q)if($i%$q===0)continue 2;$p[]=$i;if(strpos($i,'666')!==false)$s[]=$i;}echo end($s);?> to 2^64 .

~2^52

Фильтр ( ->z{z.downto(1).find{|x|/666/=~x.to_s&&x.prime?}} ) primes.

-rprime

Обеспечить регресс.

+7

Верните первый элемент, который возвращает истинное значение (в данном случае f=n=>/666/.test(n)&&eval("for(d=2;n%d++;);d>n")?n:f(n-1) ;[6662, 10000, 328765, 678987, 969696].forEach(n=>console.log(`f(${n}) -> ${f(n)}`)) ) when passed through a function that checks if ...

Tests<br> <button onclick="test(6662)">6662</button> <button onclick="test(10000)">10000</button> <button onclick="test(328765)">328765</button> <button onclick="test(678987)">678987</button> <button onclick="test(969696)">6662</button><br> Result<br> <input id=O type=text size=25 readonly>

Целое число, преобразованное в строку ( f=n=>/666/.test(d=n)&eval("while(n%--d);d<2")?n:f(n-1) function test(n) { O.value="Working..." setTimeout(_=>{ let t = Date.now() O.value=`f(${n}) = ${f(n)} in ${(Date.now()-t)/1000}s` }, 10) } ) contains ( 969696 ) 666.


Более быстрая альтернатива, 15 байт

Опять же, учитывая, что изначально существовал бонус, основанный на времени, вот альтернативное и гораздо более быстрое решение, в котором я, похоже, больше не могу играть в гольф.

678987

Проверьте это

 

Spinorog


Рег
07 Oct, 2008

Тем
74

Постов
186

Баллов
586
  • 26, Oct 2024
  • #9

PowerShell, 128 байт

328765

Попробуйте онлайн!

PowerShell не имеет встроенных функций простой факторизации, поэтому здесь заимствован код из моего ответа на Друзья Prime Factors.

Мы принимаем данные 10000 , then declare a new f=n=>/666/.test(d=n)&eval("while(n%--d);d<2")?n:f(n-1) который вычисляет факторы входа O(n^2) . If the input lambda k:max(x for x in range(k+1)if"666"in str(x)*all(x%i for i in range(2,x))) является простым, то это вернет просто library(conf.design);function(n){a=primes(1:n) a[max(which(grepl("666",as.character(a),fixed=T)))]} .

Основная часть программы - бесконечная conf.design loop. Inside the loop, we check if grepl (a=conf.design::primes(scan():1))[which(grepl(666,a))[1]] es against ^w:pc$666$#! Full program, implicit input-parsing ^ Increment input w do-while: :p Previous prime c$ Copy and stringify 666$ Push "666" # Number of occurences ! Logical not Implicit output и ли ü>:Ñb/VP6─ is prime (i.e., primes 2 $[$1+1]|grep 666|tail -1 соответствует всем факторам #include <iostream> #include <boost/multiprecision/cpp_int.hpp> #include <boost/multiprecision/miller_rabin.hpp> using namespace boost::random; typedef boost::multiprecision::cpp_int integer; int main( int argc, char** argv ) { mt19937 mt( clock() ); independent_bits_engine <mt11213b, 256, integer> rng( mt ); integer input {argv[ 1 ]}; integer possible; while (possible++ <= input) if ( // is_prime( possible ) miller_rabin_test( possible, 25, rng ) && // possible has "666" in it (possible.convert_to <std::string> ().find( "666" ) != std::string::npos)) std::cout << possible << " "; } ). If it is, we place #include <iostream> #include <boost/multiprecision/cpp_int.hpp> #include <boost/multiprecision/miller_rabin.hpp> using namespace boost::random;typedef boost::multiprecision::cpp_int Z;int main(int,char**v){mt19937 m(clock());independent_bits_engine<mt11213b,256,Z>g(m);Z n{v[1]},p;while(p++<=n)if(miller_rabin_test(p,25,g)&&p.convert_to<std::string>().find( "666" )!=-1)std::cout<<p<<" ";} на трубопроводе и Implicitly grab input (n) Zq Compute the primes up to n (output is in increasing order) P Flip the array (so larger primes come first) " For each prime @V Convert it to a string '666' Push the string literal '666' to the stack Xf Find the location of '666' in the prime ? If it was present... @. Push it to the stack and break Implicitly display the stack contents , with implicit output. Otherwise, we decrement ZqP"@V'666'Xf?@. и продолжаем цикл.

 

Kerner


Рег
17 Oct, 2009

Тем
68

Постов
194

Баллов
564
  • 26, Oct 2024
  • #10

Питон 2, 77 76 байт

Редактировать: -1 байт благодаря @Mr.Xcoder

Медленное время бега, бежит param($s)for(;$s-notmatch666-or(2..($s/2)|?{!($s%$_)});$s--){}$s

lambda x:max(q for q in primerange(0,x+1)if"666"in`q`) from sympy import*

Попробуйте онлайн!

Еще одно 76-байтовое решение

lambda x:max(q*("666"in`q`*all(q%t for t in range(2,q)))for q in range(x+1))

Попробуйте онлайн!

С СимПи 73 байта

lambda x:max(q for q in range(x+1)if"666"in`q`*all(q%t for t in range(2,q)))

Попробуйте онлайн!

 

Маргоса


Рег
25 Mar, 2015

Тем
72

Постов
200

Баллов
570
  • 26, Oct 2024
  • #11

PowerShell, 71 69 64 байт

O(n^2)

Попробуйте онлайн!

  • 328765 занимает около 30 секунд на моей машине, но время ожидания превышает 60-секундный лимит на Tio.run.

  • 678987 занимает ~1,5 минуты.

  • 969696 занимает ~4,5 минуты.
 

Silu


Рег
10 Oct, 2010

Тем
80

Постов
219

Баллов
639
  • 26, Oct 2024
  • #12

MATL, 16 байт

$n--

Попробуйте это в МАТЛ Онлайн

Объяснение

exit ||answer||

С++ 389 байт

$n

Это полная программа!
Для его компиляции вам понадобится Boost. (Или скопируйте и вставьте в свою любимую онлайн-оболочку C++.)
Запустите его из командной строки, указав н как аргумент.

Негольфед:

$n

Были сделаны сокращения с точки зрения тестирования случайных чисел. Исходный код начал проверку возможных простых чисел с 6661 и увеличил их на два. Вы также получите предупреждение компилятора из-за этого (-1) вместо npos.

Тем не менее, это происходит довольно быстро. На моем старом AMD Sempron 130 потребовалось всего около 40 секунд, чтобы найти все 214 простых чисел сатаны меньше 1 000 000.

:^Д

 

Doncarbwn100


Рег
25 Oct, 2024

Тем
70

Постов
201

Баллов
601
  • 26, Oct 2024
  • #14

Стакс, 10 байты

$n

Запустите и отладьте его

Пояснение (распаковано):

666 ||answer||

Р, 57 байт

-match

-42 байта из огромного гольфа Доминика Ван Эссена.

использует $n to coerce values to string(since 666 cannot be considered a regex) and check for truthy values.

Проходит по массиву в обратном порядке, чтобы сэкономить 2 байта.

Р + for() , 81 78 99 байт

$a

Попробуйте на rdrr.io!

Моё первое решение на языке R.

+21 байт после включения имени библиотеки.

Простой фильтр. grepl возвращает true по индексам с 666, что возвращает правдивые индексы, а max получает требуемый индекс простого числа.

 

Bykz


Рег
07 Mar, 2007

Тем
68

Постов
204

Баллов
614
  • 26, Oct 2024
  • #16

JavaScript (ES6), 55 54 байта

-1 байт благодаря @ThePirateBay.

function f

Очень медленный с большими входами. Тест на простоту адаптирован из этот код для ответа на гольф.

Тайминги

  • Вход $n took 10 seconds
  • Вход param($n)function f($a){for($i=2;$a-gt1){if(!($a%$i)){$i;$a/=$i}else{$i++}}}for(){if($n-match666-and($n-eq(f $n))){$n;exit}$n--} took 3 minutes
  • Вход U-@j *U´sø666}a took 9 minutes
  • Вход ø took 16 minutes

Тесты

Некоторые из них зависают ваш браузер на несколько минут.

s sø666

Более быстрая версия, 56 байт

Завершает каждый тестовый пример менее чем за секунду.

1 ||answer||

Рубин, 67, 66, 58, 56 байт

Включает æ_ bytes for w

f

Это довольно быстро, вычисляя значения до fj in about a second and U менее чем за 5 минут (2011 MBP, Ruby 2.3.1).

 

Serous


Рег
23 Feb, 2007

Тем
75

Постов
201

Баллов
636
  • 26, Oct 2024
  • #19

С# (.NET Core), 117 115 112 байт

U

Попробуйте онлайн!

  • 2 байта сэкономлены за счет удаления ненужных скобок.
  • 3 байта сохраняются путем объединения 969696 declarations.

Я уверен, что это можно было бы сделать короче; возможно, рекурсивно вызывая õ fj w æ_sø666 and removing the outer {$f=0|sqrt;1while$_%$f--;/666/*!$f||$_--*redo} -петля.

Рекурсивный подход, 85 байт

-p

Попробуйте онлайн!

Я не уверен, насколько хорошо этот подход вписывается в рамки код-гольфа, поскольку необходимо установить #//.i_/;!PrimeQ@i||ToString@i~StringFreeQ~"666":>i-1& first, and that seq $1|tac|factor|awk 'NF==2&&/666/&&!a--&&$0=$2' вызывается снова, но не учитывается в байтах. Любые разъяснения будут оценены по достоинству.

 

ToseTrelold


Рег
10 Apr, 2014

Тем
63

Постов
186

Баллов
511
  • 26, Oct 2024
  • #20

05AB1E, 9 байты

ƒNpN666å*iN

Попробуйте онлайн. (Нет набора тестов со всеми тестовыми примерами, потому что это слишком медленно.)

Объяснение:

ef/`T*\63fP_TS

ef&/`T*3\6P_TS can alternatively be 969696 (сжатый 666) или ÆR # All primes in range [2, input] Ðf # Keep those which satisfy w # truthy if y is in x 666 # ^ (this is y) Ṫ # Tail (take the last element) (compressed 333 and then doubled).

 

Танюша1997


Рег
06 Apr, 2011

Тем
70

Постов
211

Баллов
611
  • 26, Oct 2024
  • #21

Java 8, 77 байт

ÆRwÐf666Ṫ

Попробуйте онлайн.

Объяснение:

Last@Select[Prime@Range@PrimePi@#,!FreeQ[Subsequences[IntegerDigits@#],{6,6,6}]&]&

Если > Increment input ͻ Start infinite loop : Previous prime D Duplicate +6 Push 666 S Swap ??? See if 666 is a substring of the top of the stack ÷ If true, break results in \$i<2\$, it means \$n\$ is a prime number (note: эта главная шашка работает только для \$n\geq2\$, в данном случае это нормально).

 

Uggshf46


Рег
25 Oct, 2024

Тем
65

Постов
188

Баллов
573
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно