Số nguyên tố đầu tiên và cuối cùng với các chữ số nguyên tố của phạm vi


12

Thử thách

Đối với một phạm vi số nguyên dương nhất định, hãy tìm số nguyên tố đầu tiên và cuối cùng hoàn toàn bao gồm các chữ số số nguyên tố, đặc biệt bao gồm 0 (đối với các chữ số , phạm vi 0-2 sẽ xuất ra 2-2). Phạm vi bao gồm. Nếu không tìm thấy số nào, đầu ra dự kiến ​​là 0. Nếu chỉ có một số như vậy, thì đầu ra dự kiến ​​là số đó hai lần.

Ví dụ

  • Đối với phạm vi 1 100100, số nguyên tố đầu tiên là 2 và cuối cùng là 73 (7 và 3 là số nguyên tố).
  • Đối với phạm vi 70 Ném80, số nguyên tố đầu tiên là 73 và số cuối cùng cũng là 73 (Vì chỉ có một số chính xác trong phạm vi đã cho, chúng tôi trả lại số đó hai lần).
  • Đối với phạm vi 190 Vang200, không có câu trả lời đúng, vì vậy bạn trả về 0.
  • Đối với phạm vi 2000-2100, số nguyên tố đầu tiên là 2003 và số cuối cùng là 2053 (chúng tôi bỏ qua chữ số 0, nhưng tất cả các chữ số khác là số nguyên tố)

Đây là , vì vậy mã ngắn nhất tính bằng byte sẽ thắng!

Tất cả các sơ hở tiêu chuẩn áp dụng.

Đầu vào

  • Bạn có thể chấp nhận hai số nguyên làm đầu vào tuy nhiên bạn có thể thấy sự phù hợp, ngăn xếp, đối số hàm, đối số CLI, stdin.
  • Bạn chỉ phải nhận hai số nguyên.

Đầu ra

  • Bạn phải trả về kết quả (một tuple, một mảng, đa trả về nếu ngôn ngữ của bạn hỗ trợ nó), để nó trên ngăn xếp hoặc in nó (trong trường hợp này, chúng phải được tách ra bằng cách nào đó).
  • Thứ tự của các đầu ra là không liên quan.
  • Bạn được phép dẫn đầu / dấu ngoặc và dòng mới.
  • Bạn phải trả lại hai số, nếu có câu trả lời, ngay cả khi chúng giống nhau.
  • Bạn phải trả về 0 nếu không có câu trả lời.

Để chắc chắn, nếu tôi trả về danh sách các số nguyên khi có câu trả lời, tôi có thể trả về danh sách chỉ chứa 0 khi không có câu trả lời không? Tôi không cần phải quay lại 0thay vì [0]?
Οurous

Câu trả lời:



5

Perl 6, 105 94 90 86 byte

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

4

JavaScript (ES6), 83 byte

Lấy phạm vi [ab] trong cú pháp currying (a)(b). Trả về mảng 2 phần tử hoặc 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])

Các trường hợp thử nghiệm



3

Thạch , 14 byte

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

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

µRầnDo2ÆPẠ âm Đf.ị ~ Chương trình đầy đủ.

æR ~ Phạm vi nguyên tố bao gồm.
  Tiêu chí ~ Chỉ giữ những người thỏa mãn một điều kiện.
   Do2ÆPẠ ~ Điều kiện lọc:
   D ~ Các chữ số thập phân của số hiện tại.
    o2 ~ Hợp lý hoặc có 2 (ánh xạ 0 đến 2 và bất kỳ chữ số nào khác với chính nó).
      ÆP ~ Là số nguyên tố (phần tử khôn ngoan)?
        Ạ ~ Kiểm tra xem tất cả các chữ số có thỏa mãn điều kiện không.
            .ị ~ Lấy phần tử ở chỉ số mô-đun 0,5. Một số chi tiết:
                 ~ Jelly được lập chỉ mục 1, vì vậy 1 cung cấp cho chúng tôi phần tử đầu tiên, trong khi 0
                   cho chúng ta yếu tố cuối cùng.
                 ~ Nếu trần và sàn của số N đã cho không khớp nhau, 
                   sau đó Jelly trả lại các vật phẩm ở chỉ số sàn (N)  trần (N).
                 ~ Nếu danh sách trống, điều này mang lại 0, do đó nó rất thuận tiện.

Nếu lấy toàn bộ phạm vi sẽ được cho phép (mặc dù tôi nghĩ rằng nó không nên), thì 12 byte:

Do2,ÆPȦµÐf.ị

Hãy thử trực tuyến!


13 byte Mặc dù nó không giống nhau. Tôi có nên tự đăng nó không? Bạn có thể lấy nó nếu bạn muốn nhưng hãy cho tôi biết nếu bạn sẽ giữ giải pháp của mình.
dylnan

OP nói For a given positive integers range. Tôi sẽ yêu cầu làm rõ
dylnan

@dylnan lưu ý rằng dù sao thì phiên bản của bạn không hợp lệ ( 0là ngoại lệ của thử thách, vì nó phải được coi là một chữ số chính vì một số lý do). Dù sao, tôi đã đăng một phiên bản ngắn hơn hợp lệ
Ông Xcoder

Ồ tôi nghĩ rằng 0 là quy tắc chính đã được thay đổi
dylnan

3

Brachylog , 16 byte

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

Hãy thử trực tuyến!

"Trả về 0 hoàn toàn không nhạy cảm" nếu không có số nguyên tố "khiến chúng tôi mất 3 byte ( |∧0) mà không có lý do (nó sẽ trả về false.nếu chúng tôi không thêm chúng)

Giải trình

⟦₂                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

Không hợp lệ vì nó không xử lý chữ số 0 là số nguyên tố (như được chỉ định trong thử thách). Do đó, nó thất bại cho[2000, 2100]
Ông Xcoder

3

Bình thường , 24 byte

Sử dụng phương pháp ban đầu của tôi hóa ra là ngắn hơn.

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

Hãy thử nó ở đây!

(Tôi mới cập nhật lên 23 nhưng Steven đã đánh bại tôi )

?KfP#I_M-+TjT;0}FQhM_BK0

Hãy thử nó ở đây!

Đương nhiên, hM_BK có thể được thay thế bởi ,hKeK.

25 byte

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

Hãy thử nó ở đây!

26 byte

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

Hãy thử nó ở đây!

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

Hãy thử nó ở đây!


Chúng hoạt động như thế nào

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


Điều này không trả về hai trường hợp [73] trong trường hợp thử nghiệm [70, 80].
Steven H.

Vượt xa bạn trở lại 1, bây giờ là 25.
Steven H.

@StevenH. Vượt xa bạn trở lại 1, bây giờ là 24.
Ông Xcoder

Cuộc thi đang trở nên căng thẳng ... ở tuổi 23!
Steven H.

2

Toán học 85 byte

Tôi biết đã có một câu trả lời tương tự, nhưng cách tiếp cận ở đây hoàn toàn khác.

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

Câu trả lời 83 ký tự này sẽ dán và chạy trong Mathicala. Trang web TIO không biết cách giải thích.


2

Thạch , 14 byte

Do2ÆPẠ
æRÇÐf.ị

Hãy thử trực tuyến!

æ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

Cảm ơn Erik, Outgolfer đã giúp sửa lỗi. Cảm ơn ông Xcoder về .ịmánh khóe.


Sẽ ṙ-ḣ2làm việc Ḣ,Ṫđể sửa nó (có thể phải sửa đổi thêm một chút)?
Zacharý

@ Zacharý cung cấp đầu ra theo thứ tự sai, mặc dù. Và nó dường như không hoạt động: \
Ven

@ Mr.Xcoder Phòng Jelly dẫn tôi đến cùng một giải pháp. Cảm ơn!
Ven

.ịcũng có thể hoạt động tốt (loại bị đánh cắp từ ông XCoder)
Zacharý

Bạn đúng! Điều đó thật tuyệt.
Ven



1

Perl 6 ,  68 66 65 61  58 byte

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

Thử nó

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

Thử nó

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

Thử nó

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

Thử nó

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

Thử nó

Mở rộng:

{  # 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

Java 8, 165 164 byte

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

Giải trình:

Hãy thử nó ở đây.

(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

Sạch sẽ , 142 131 125 byte

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]

Ung dung:

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]

Hãy thử trực tuyến!


1

Pyth, 28 25 23 byte

.xhM_BfP#I_M #+TjT;}FQ0

Bộ thử nghiệm. Trả về [2003,2053] cho trường hợp thử nghiệm cuối cùng, vì năm 2053 là số nguyên tố.


Haha, không hợp lệ Trả về [0, 0]thay vì0
Ông Xcoder

À, bắn đi. Tôi sẽ sửa nó.
Steven H.

@ Mr.Xcoder Đã sửa!
Steven H.

Chúa ơi, tôi cũng vừa mới cập nhật với 23
Ông Xcoder

Tôi nghĩ bạn nói rằng bạn sẽ đi ngủ ... Bạn lừa bạn: P
Steven H.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.