사탄 프라임 내 뒤를 잡아!


22

사탄-프라임

그들은 누구입니까?
그들은 이것들이 사탄-프라임들을 Primes포함 666
하고 있습니다 : [46663,266677,666599,666683,616669]
이것들은 아닙니다 :[462667,665669,36363631,555]

음모

6661보다 큰 숫자는 그 뒤에 사탄-프림이 있습니다

도전

정수가 주어지면 n>6661사탄-프라임이 뒤에 있고 (또는 같음) 가장 가깝 습니다.

Integer n=30000에는 3 개의 Satan-Primes (SP)가 있습니다 [6661, 16661, 26669].
코드는 26669가장 가까운 코드를 반환해야 합니다.

테스트 사례

입력-> 출력

6662->6661    
10000->6661    
66697->66697 (a SP returns himself)  
328765->326663  
678987->676661
969696->966677

규칙

코드는 n언어 범위 내 에서 작동 합니다.

이것은 이므로 바이트 단위의 최단 답변이 이깁니다!


1
"약 1 분"을 정의하십시오. +-30 초입니까? 나는 개인적으로 나는이 생각에 ... 또한 30 분 분 그 정도 ... 또한 보너스는 일반적으로 눈살을 찌푸렸다됩니다 다르지 않다라고 생각 수도 더 나은 AS를왔다 output the nth satan prime... 도전
소크라테스 피닉스

ok ok people ... 보너스가 제거됩니다 ...

도전 제목을 수정 한 내용이 마음에 들지 않기를 바랍니다.
Shaggy

3
@Shaggy 타이틀 변경은 어떤 점에서 ...?
코너 오브라이언

3
@ ConorO'Brien Rhyming이 나타나고 고풍스러워 보입니다.
wizzwizz4

답변:


7

수학, 82 바이트

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

잠깐, 당신은 이것에 대한 내장이 없다는 것을 의미합니까?
기금 모니카의 소송

7

Neim , 9 바이트

>ͻ:D+6S𝕚÷

설명:

>         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

온라인으로 사용해보십시오!


"66 앞에 숫자를 붙인다"라는 문구가 실제로 내장되어 있습니까? O_O Neim이 진행되었습니다.
Outgolfer Erik

1
+6666을 어떻게 푸시합니까? 아니면 니임은 그 금속 일까?
Robert Fraser

6
@RobertFraser 분명히 +x612 + 문자 코드를 의미 x합니다. 코드는 654이므로 612 + 54 = 666입니다.
fergusq

@EriktheOutgolfer 음, Neim은 두 바이트를 사용하여 세 자리 숫자와 네 자리 숫자를 모두 나타낼 수 있습니다.
Okx

2
@EriktheOutgolfer '\+*=100,356,612,868 (그리고 다음 문자의 서수)
Jonathan Allan

7

젤리 , 10 9 바이트

@Dennis 덕분에 10 % 절약되었습니다!

ÆRwÐf666Ṫ

온라인으로 사용해보십시오!

설명

Æ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)

대안 :ÆRẇ@Ðf666Ṁ
Mr. Xcoder

5
나는 꼬리 (666 직후)가 십자가처럼 보입니다.
kaine

4
w대신 작동해야합니다 ẇ@.
Dennis

@Dennis s / sh / w / 물론 작동합니다 : p
Outgolfer Erik

5

Pyth , 15 14 바이트

Dave의 도움으로 1 바이트를 저장했습니다 .

969696내 컴퓨터에서 메모리 오류가 발생 하지만 메모리가 충분하면 문제가 없습니다.

ef&/`T*3\6P_TS

여기에서 시도 하거나 Test Suite를 확인 하십시오 .


방법?

ef & /`T * 3 \ 6P_TSQ-전체 프로그램, 끝에 암시 적 입력 (Q)

             SQ-범위 [1, Q]
 f-필터.
          P_T-소수인가?
  &-그리고
   /`T * 3 \ 6-666을 포함합니다.
e-마지막 요소
                -결과를 내재적으로 출력합니다.

Pyth , 14 바이트

ef/`T*\63fP_TS

여기 사용해보십시오!


14 바이트 :ef&/`T*3\6P_TS
데이브

실수로 결말 Q를 추가했습니다. 14
Dave

"666"문자열 666을 설명하는 덜 효율적인 방법입니다*3\6
Dave


4

Bash + Core Utils, 51 49 바이트

seq $1|tac|factor|awk 'NF==2&&/666/&&!a--&&$0=$2'

명령 행 인수를 사용합니다. 숫자가 클수록 속도가 느려질 수 있습니다.


모든 "사탄 프라임"을 6661까지 출력하지만 입력 아래에서 가장 가까운 것을 인쇄해야합니다 . 온라인으로 시도하십시오 . 한 가지 수정은 |head -1끝에 추가 하는 것입니다.
저스틴 마리너

@JustinMariner lol, 으악, 고쳐
markasoftware

4

수학, 64 62 61 53 바이트

#//.i_/;!PrimeQ@i||ToString@i~StringFreeQ~"666":>i-1&

@KellyLowder 덕분에 -1 바이트

@Notatree 덕분에 -8 바이트 (wow)

설명

입력하십시오. 다음과 같은 조건에서 감소시킵니다.

  • 입력이 소수가 아님, 또는

  • 입력의 숫자는 행에 3 개의 6을 포함하지 않습니다.

우리는 사탄 프라임에이를 때까지 이것을 반복합니다.


2
아주 좋아요 프라임은 6으로 끝날 수 없기 때문에 끝에 _를 더 잃을 수 있습니다.
Kelly Lowder

@KellyLowder 좋은 점
정환 민

1
이것은 끈으로 더 짧습니다 :#//.i_/;!PrimeQ@i||ToString@i~StringFreeQ~"666":>i-1&
나무가 아닙니다

1
@Notatree 와우! 좋은!
JungHwan Min


3

apt , 14 바이트

õ fj w æ_sø666

그것을 테스트

거기로보고 되었다 : 50 %의 시간 기반 보너스 : 재생 완료 테스트 케이스 9696960.5 초 미만이다.


설명

정수의 묵시적 입력 U.

õ

에서 1까지 의 정수 배열을 생성합니다 U.

fj

필터 ( f) 프라임.

w

역.

æ_

다음 1을 확인하는 함수를 통과 할 때 참 값 (이 경우 ) 을 반환하는 첫 번째 요소를 반환 합니다.

sø666

문자열 ( s) 로 변환 된 정수 는 ( ø) 666을 포함합니다.


빠른 대안, 15 바이트

다시 말하지만, 원래 시간 기반 보너스가있는 것으로 보았을 때, 더 이상 골프를 칠 수없는 대안이며 훨씬 빠른 해결책이 있습니다.

U-@j *U´sø666}a

그것을 테스트


2

PowerShell , 128 바이트

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--}

온라인으로 사용해보십시오!

PowerShell에는 기본 인수 분해 기능이 내장되어 있지 않으므로 Prime Factors Buddies 에 대한 답변에서 코드를 빌립니다 .

입력 $n을받은 다음 function f입력 인수를 계산 하는 새로운 것을 선언합니다 $a. 입력 $a이 소수이면 이것은 단지을 반환 $a합니다.

프로그램의 주요 부분은 무한 for()루프입니다. 루프 내에서 $n -matches에 대한 666여부 $n와 소수 인지 여부를 확인합니다 (즉,의 $n모든 요소와 일치 $n). 그렇다면 $n파이프 라인과 exit에 묵시적 출력으로 배치합니다. 그렇지 않으면 $n--루프를 줄이고 계속 진행합니다.


트림 된 광산 버전이 다운되어 바이트 수의 절반을 기록했습니다. : D-codegolf.stackexchange.com/a/140539/571
TessellatingHeckler

2

파이썬 2 , 77 76 바이트

편집 : @ Mr.Xcoder 덕분에 -1 바이트

느린 실행 시간 O(n^2)

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

온라인으로 사용해보십시오!

다른 76 바이트 솔루션

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

온라인으로 사용해보십시오!

SymPy 73 바이트

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

온라인으로 사용해보십시오!


76 바이트 : lambda x:max(q for q in range(x+1)if"666"in`q`*all(q%t for t in range(2,q)))- max()대신 사용[][-1]
Mr. Xcoder

2

PowerShell , 71 69 64 바이트

param($s)for(;$s-notmatch666-or(2..($s/2)|?{!($s%$_)});$s--){}$s

온라인으로 사용해보십시오!

  • 328765는 내 컴퓨터에서 ~ 30 초가 걸리지 만 Tio.run에서 60 초 제한을 초과합니다.

  • 678987 ~ 1.5 분이 소요됩니다.

  • 969696은 ~ 4.5 분이 걸립니다.

요인을 수행하는 영리한 방법.
AdmBorkBork

2

MATL, 16 바이트

ZqP"@V'666'Xf?@.

MATL Online 에서 사용해보십시오

설명

         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

2

C ++ 389 바이트

#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<<" ";}

이것은 전체 프로그램입니다!
컴파일하려면 Boost가 필요합니다. (또는 좋아하는 온라인 C ++ 셸에 복사하여 붙여 넣습니다.)
명령 줄에서 실행하십시오 . n 을 인수로 지정.

언 골프 드 :

#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 << " ";
}

난수 테스트 측면에서 바로 가기가 이루어졌습니다. 원래 코드는 6661에서 가능한 소수를 테스트하기 시작했으며 2 씩 증가했습니다. npos 대신 (-1) 때문에 컴파일러 경고가 나타납니다.

아직도, 이것은 꽤 빨리 실행됩니다. 내 오래된 AMD Sempron 130에서 1,000,000 미만의 214 개의 사탄 프라임을 모두 찾는 데 약 40 초가 걸렸습니다.

: ^ D




1

자바 스크립트 (ES6), 55 54 바이트

@ThePirateBay 덕분에 -1 바이트.

f=n=>/666/.test(d=n)&eval("while(n%--d);d<2")?n:f(n-1)

큰 입력에서는 매우 느립니다. 이 코드 골프 답변 에서 채택 된 원시성 테스트 .

타이밍

  • 입력 10000에 10 초가 걸렸습니다
  • 입력 328765은 3 분이 걸렸습니다
  • 입력하는 678987데 9 분
  • 입력 969696은 16 분이 걸렸습니다

테스트

이 중 일부는 몇 분 동안 브라우저를 중단합니다.

더 빠른 버전, 56 바이트

1 초 안에 각 테스트 사례를 완료합니다.

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)}`))


2
절대 그렇게하지 않아야합니다. 이것은 코드 골프이며 성능은 전혀 관련이 없습니다. 이전 55 바이트 답변으로 롤백하는 것이 좋습니다. 또한, 당신은 대체하여 54 바이트로 줄일 수 d==1d<2이후 n>6661.

52 바이트 : f=n=>/666/.test(n)&(g=d=>n%--d?g(d):d<2)(n)?n:f(n-1)숫자가 크면 재귀 오류가 발생합니다.
Shaggy

f=n=>/666/.test(d=n)-eval("while(n%--d);d")?f(n-1):n
l4m2

1

루비, 67 , 66 , 58 , 56 바이트

+7바이트 포함-rprime

->z{z.downto(1).find{|x|/666/=~x.to_s&&x.prime?}}

매우 빠르며 최대 ~2^521 초 2^64안에 5 분 안에 값을 계산할 수 있습니다 (2011 MBP, Ruby 2.3.1).


1

Stax , 10 바이트

ü>:Ñb/VP6─

실행 및 디버깅

설명 (포장 풀기) :

^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

좋은 프로그램입니다. stax를 이용해 주셔서 감사합니다. 참고로,이 같은 "구분"옵션을 사용하여 여러 사례를 할 수도 있습니다
재귀

@recursive 아, thx
wastl



0

C # (.NET 코어) , 117 (115) 112 바이트

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;}

온라인으로 사용해보십시오!

  • 불필요한 괄호를 제거하여 2 바이트를 절약했습니다.
  • int선언 을 결합하여 3 바이트를 절약했습니다 .

나는 이것이 더 짧아 질 수 있다고 확신한다. 아마도 func f외부 for루프 를 재귀 적으로 호출 하고 제거함으로써 .

재귀 적 접근, 85 바이트

i=>{int p=1,j=2;while(j<i)if(i%j++<1)p=0;return p>0&$"{i}".Contains("666")?i:f(--i);}

온라인으로 사용해보십시오!

Func<int,int> f = null첫 번째 설정으로 인해이 방법이 코드 골프 범위에 얼마나 잘 맞는지 잘 모르겠습니다. f다시 호출되지만 바이트 수에 포함되지 않습니다. 모든 설명을 부탁드립니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.