소수 범위의 첫 번째 및 마지막 소수


12

도전

주어진 양의 정수 범위의 경우 0을 포함하여 예외적으로 0을 포함하여 소수로 완전히 구성된 첫 번째와 마지막 소수를 찾으십시오 ( 숫자 의 경우 0-2 범위는 2-2를 출력해야 함). 범위가 포함됩니다. 숫자가 없으면 예상 출력은 0입니다. 그러한 숫자가 하나만 있으면 예상 출력이 해당 숫자의 두 배입니다.

  • 1–100 범위의 경우 첫 번째 소수는 2이고 마지막 소수는 73입니다 (7과 3은 소수).
  • 70-80 범위의 경우 첫 번째 소수는 73이고 마지막 소수는 73입니다 (주어진 범위에 하나의 올바른 숫자 만 있으므로 두 번 반환합니다).
  • 190–200 범위의 경우 정답이 없으므로 0을 반환합니다.
  • 2000-2100 범위의 경우 첫 번째 소수는 2003이고 마지막 소수는 2053입니다 (숫자 0은 생략하지만 다른 모든 숫자는 소수 임)

이것은 이므로 바이트 단위의 가장 짧은 코드가 이깁니다!

모든 표준 허점이 적용됩니다.

입력

  • 두 정수를 입력으로 자유롭게 사용할 수 있지만 fit, stack, function argument (s), CLI argument, stdin이 표시 될 수 있습니다.
  • 당신은 해야한다 두 개의 정수를받을 수 있습니다.

산출

  • 당신은 있어야 하나, 스택에두고 (언어 지원이 경우 튜플, 배열, 다중 반환) 결과를 반환하거나 (이 경우, 그들은 어떻게 든 구분해야합니다)를 인쇄 할 수 있습니다.
  • 출력 순서는 관련이 없습니다.
  • 앞 / 뒤에 대괄호와 줄 바꿈이 허용됩니다.
  • 답이 같더라도 같은 경우에도 두 개의 숫자를 반환해야합니다.
  • 응답이 없으면 0을 반환해야합니다.

대답이있을 때 정수 목록을 반환하는 경우 응답이 없을 때 0을 포함하는 목록을 반환 할 수 있습니까? 0대신에 돌아올 필요 는 [0]없습니까?
OUurous

답변:



5

Perl 6, 105 94 90 86 바이트

{my @b=grep {is-prime all($_,|.comb>>.Int Xor 2)},$^a..$^b;say @b??"@b[0] @b[*-1]"!!0}

4

자바 스크립트 (ES6), 83 바이트

카레 구문에서 범위 [ab] 를 사용합니다 (a)(b). 2 요소 배열 또는 0을 리턴합니다 .

n=>g=(m,a=0)=>n>m?a:g(m-1,(P=d=>m%--d?P(d):d>1|/[14689]/.test(m))(m)?a:[m,a[1]||m])

테스트 사례



3

젤리 , 14 바이트

æRµDo2ÆPẠµÐf.ị

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

작동 원리

æRµDo2ÆPẠµÐf. ~ 전체 프로그램.

æR ~ 포함 소수 범위.
  µ µÐf ~ 조건을 만족하는 것만 유지하십시오.
   Do2ÆPẠ ~ 필터 조건 :
   D ~ 현재 숫자의 10 진수입니다.
    o2 ~ 논리 또는 2 (0에서 2까지, 다른 숫자는 자체로 매핑)
      ÆP ~ 소수 (요소 별)입니까?
        Ạ ~ 모든 자리가 조건을 만족하는지 확인하십시오.
            .ị ~ 모듈 식 지수 0.5에서 요소를 구합니다. 일부 세부 사항 :
                 ~ 젤리는 1 인덱싱되므로 1은 0이지만 첫 번째 요소를 제공합니다.
                   우리에게 마지막 요소를 제공합니다.
                 ~ 주어진 숫자 N의 천장과 바닥이 일치하지 않으면, 
                   그런 다음 Jelly는 색인 floor (N)  ceil (N) 의 항목을 반환합니다 .
                 ~ 목록이 비어 있으면 0이 나오므로 매우 편리합니다.

전체 범위를 취하는 것이 허용된다면 (그렇지 않아야한다고 생각하지만) 12 바이트 :

Do2,ÆPȦµÐf.ị

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


13 바이트 는 비슷하지는 않지만. 방금 직접 게시해야합니까? 원하는 경우 가져갈 수 있지만 솔루션을 유지할 것인지 알려주세요.
dylnan

OP는 말합니다 For a given positive integers range. 나는 명확하게 요청합니다
dylnan

그럼에도 불구하고 @dylnan은 버전이 유효하지 않다는 점에 유의하십시오 ( 0어떤 이유로 든 소수 자릿수로 처리해야하기 때문에 도전 과제의 예외입니다). 어쨌든, 나는 짧은 게시 하고 유효한 버전
씨 Xcoder에게

오 나는 0 총리 규칙이 변경되었다한다 생각
dylnan

3

Brachylog , 16 바이트

⟦₂{ṗṗᵐ}ˢ⟨⌋≡⌉⟩|∧0

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

완전히 무의미한 "프라임이 없으면 0을 반환"하면 |∧0아무런 이유없이 3 바이트 ( )를 잃게됩니다 ( false.추가하지 않으면 반환 됩니다)

설명

⟦₂                Range from the smallest element of the input to the biggest
  {   }ˢ          Select on that range:
   ṗ                Numbers that are primes
    ṗᵐ              And whose digits are primes
        ⟨   ⟩     Fork on this new list:
         ⌋          Minimum
           ⌉        maximum
          ≡         Do nothing and return [Minimum, Maximum]
             |∧0  If all of this fails (i.e. the list after selection is empty), return 0

숫자 0을 소수로 처리하지 않기 때문에 유효하지 않습니다 (챌린지에 지정된대로). 따라서, 실패[2000, 2100]
씨 Xcoder

3

Pyth , 24 바이트

내 초기 접근 방식을 사용하면 짧아집니다.

.x,eKfP#I_M-+TjT;0}EQhKZ

여기 사용해보십시오!

(방금 23으로 업데이트했지만 Steven이 나를 이겼습니다 )

?KfP#I_M-+TjT;0}FQhM_BK0

여기 사용해보십시오!

당연히 hM_BK로 대체 할 수 있습니다 ,hKeK.

25 바이트

.x,eKf.AmP_|d2+TjT;}EQhKZ

여기 사용해보십시오!

26 바이트

|>2.<f.AmP_|d2+TjT;*2}EQ1Z

여기 사용해보십시오!

|>2.<fP#I_M|R2+TjT;*2}EQ1Z

여기 사용해보십시오!


작동 방식

.x,eKfP#I_M-+TjT;0}EQhKZ ~ Full program. Q, E = first, second inputs

.x                     Z ~ Try-catch block. If the code errors, output 0.
     f            }EQ    ~ Filter the range [E ... Q] for (uses a variable T):
            +TjT;          ~ Append T to the list of its digits.
           -     0         ~ Remove the zeros.
         _M                ~ Multiply each by -1 (for primality testing).
        I                  ~ Check if the result is invariant over...
      P#                   ~ Removing non-prime items.
    K                    ~ Assigned the filtered range to a variable K.
  ,e                     ~ Pair the last element of K with...
                     hK  ~ Its first element.

|>2.<f.AmP_|d2+TjT;*2}EQ1Z ~ Full program.

                   *2}EQ   ~ Inclusive range, repeated twice..
     f                     ~ Filter, using T as the current number.
                jT;        ~ Base-10 digits of T.
              +T           ~ Concatenated with T.
        mP_|d2             ~ Prime check after performing OR 2 (makes 0 be treated as prime)
      .A                   ~ Do all satisfy this condition?
   .<                   1  ~ Rotate by one place cyclically to the left.
 >2                        ~ Last two elements (ignored if there aren't enough)
|                        Z ~ Logical or with 0.


이것은 [70, 80] 테스트 사례에서 [73]의 두 인스턴스를 반환하지 않습니다.
Steven H.

1시 25 분에 아웃백했습니다.
Steven H.

@StevenH. 당신이 24에서 지금은 1 백 Outgolfed
씨 Xcoder

23 일에 경쟁이 치열 해지고 있습니다!
Steven H.

2

매스 매 티카 85 바이트

나는 비슷한 대답이 이미 있다는 것을 알고 있지만 여기의 접근법은 상당히 다릅니다.

MinMax@Cases[Range@##,x_/;PrimeQ@x&&DisjointQ@@IntegerDigits/@{x,14689}]/.{_,∞}->0&

이 83 자 답변은 Mathematica에서 붙여 넣어 실행됩니다. TIO 사이트는 ∞를 해석하는 방법을 모릅니다.


2

젤리 , 14 바이트

Do2ÆPẠ
æRÇÐf.ị

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

æRÇÐf.ị            Main link
æR                 Prime range
   Ðf              Filter the range with...
  Ç                The helper link
      ị            At index (decimal, returns [xs[floor], xs[ceil]], otherwise 0)
     .             0.5

Do2ÆPẠ             Helper link
D                  For each decimal
 o2                Replace 0s with 2s, an actual prime prime (could be 3, 5, or 7).
   ÆP              Filter primes (1 if true, 0 if false)
     Ạ             Check if all are true

버그 수정에 도움을 준 Outgolfer Erik에게 감사합니다 . 트릭을 위해 Xcoder 씨에게 감사합니다 .ị.


그것을 고치기 위해 ṙ-ḣ2노력할 것 Ḣ,Ṫ입니까 (조금 더 수정해야 할 수도 있습니까)?
Zacharý

그래도 @ Zacharý는 잘못된 순서로 출력을 제공합니다. 그리고 그것은 작동하지 않는 것 같습니다 : \
Ven

@ Mr.Xcoder Jelly 방은 저를 같은 해결책으로 이끌었습니다. 감사!
Ven

.ị뿐만 아니라 (종류 씨 XCoder에서 도난의) 작동 할 수 있습니다
재커리

네가 옳아! 좋은 데요
Ven



1

펄 6 ,  68 66 65 61  58 바이트

{($_=($^a..$^b).grep({.is-prime&&/^<[02357]>+$/})[0,*-1])[1]??$_!!0}

시도 해봐

{($_=($^a..$^b).grep({.is-prime&&!/<[14689]>/})[0,*-1])[1]??$_!!0}

시도 해봐

{($_=($^a..$^b).grep({.is-prime*!/<[14689]>/})[0,*-1])[1]??$_!!0}

시도 해봐

{($_=($^a..$^b).grep({.is-prime*!/<[14689]>/}))??.[0,*-1]!!0}

시도 해봐

{($_=grep {.is-prime*!/<[14689]>/},$^a..$^b)??.[0,*-1]!!0}

시도 해봐

넓히는:

{  # bare block lambda with two placeholder parameters 「$a」 and 「$b」

  (
    $_ =  # store the list in 「$_」 for later use

      grep {
          .is-prime

        *              # True * True == 1 (all others equal 0)

          !/<[14689]>/ # doesn't contain a non-prime other than 0
      },

      $^a .. $^b       # inclusive Range

  )            # is the list Truish (not empty)
  ?? .[0,*-1]  # if so output the first and last values (from 「$_」)
  !! 0         # otherwise return 0
}


1

자바 8 165 164 바이트

(a,b)->{for(;a<=b&!p(a);a++);for(;b>a&!p(b);b--);return a>b?"0":a+" "+b;}boolean p(int n){int N=n,i=2;for(;i<N;N=N%i++<1?0:N);return(n+"").matches("[02357]+")&N>1;}

설명:

여기에서 시도하십시오.

(a,b)->{            // Method with two integer parameters and String return-type
                    //  (Input `a` is the lowest input, input `b` is the highest input)
  for(;a<=b         //  Increase `a` as long as it's smaller than or equal to `b`,
       &!p(a);a++); //   and it's not a prime, and not all of its digits are prime-digits
  for(;b>a          //  Decrease `b` as long as it's larger than `a`,
       &!p(b);b--); //   and it's not a prime, and not all of its digits are prime-digits
  return a>b?       //  If `a` is now larger than `b`:
    "0"             //   Return 0, because nothing is found
   :                //  Else:
    a+" "+b;}       //   Return the resulting `a` and `b`

boolean p(int n){int N=n,i=2;for(;i<N;N=N%i++<1?0:N);return(n+"").matches("[02357]+")&N>1;}
                    // Separate method that returns whether the input integer is a prime,
                    //  and all of its digits are also primes (or 0)

1

면도 , 142 (131) 125 바이트

import StdEnv
@a b#l=[n\\n<-[a..b]|and[gcd p n<2&&or[c==k\\k<-:"02357"]\\p<-[1..n-1],c<-:toString n]]
|l>[]=[hd l,last l]=[0]

언 골프 드 :

import StdEnv
fn start finish
    # primes
        = [ n
            \\
            n <- [start..finish]
            | and [ gcd p n == 1 && isMember c ['0','2','3','5','7'] 
                \\
                p <- [1..n-1],
                c <-: toString n
            ]
        ]
    | isEmpty primes
        = [0]
    = [hd primes, last primes]

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


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