Bilangan prima pertama dan terakhir dengan digit utama rentang

12

Tantangan

Untuk rentang bilangan bulat positif tertentu, temukan bilangan prima pertama dan terakhir yang seluruhnya terdiri dari angka bilangan prima, termasuk 0 (untuk digit , kisaran 0-2 harus menghasilkan 2-2). Rentang ini inklusif. Jika tidak ada angka yang ditemukan, output yang diharapkan adalah 0. Jika hanya ada satu nomor, output yang diharapkan adalah angka itu dua kali.

Contohnya

  • Untuk rentang 1-100, bilangan prima pertama adalah 2 dan yang terakhir adalah 73 (7 dan 3 adalah bilangan prima).
  • Untuk rentang 70–80, bilangan prima pertama adalah 73 dan yang terakhir juga 73 (Karena hanya ada satu nomor yang benar dalam rentang yang diberikan, kami mengembalikannya dua kali).
  • Untuk rentang 190-200, tidak ada jawaban yang benar, jadi Anda mengembalikan 0.
  • Untuk rentang 2000-2100, bilangan prima pertama adalah 2003 dan yang terakhir adalah 2053 (kami menghilangkan digit 0, tetapi semua digit lainnya adalah bilangan prima)

Ini adalah , jadi kode terpendek dalam byte menang!

Semua celah standar berlaku.

Memasukkan

  • Anda bebas untuk menerima dua bilangan bulat sebagai input namun Anda mungkin melihat kecocokan, tumpukan, argumen fungsi, argumen CLI, stdin.
  • Anda hanya harus menerima dua bilangan bulat.

Keluaran

  • Anda harus mengembalikan hasilnya (tuple, array, multi-return jika bahasa Anda mendukungnya), meninggalkannya di tumpukan, atau mencetaknya (dalam hal ini, mereka harus dipisahkan entah bagaimana).
  • Urutan output tidak relevan.
  • Anda diizinkan untuk memimpin / mengikuti tanda kurung dan baris baru.
  • Anda harus mengembalikan dua angka, jika ada jawaban, meskipun sama.
  • Anda harus mengembalikan 0 jika tidak ada jawaban.
LamaDelRay
sumber
Hanya untuk memastikan, jika saya mengembalikan daftar bilangan bulat ketika ada jawaban, saya dapat mengembalikan daftar yang hanya berisi 0 ketika tidak ada jawaban? Saya tidak perlu kembali, 0bukan [0]?
Surous

Jawaban:

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}
Yang Mulia
sumber
4

JavaScript (ES6), 83 byte

Mengambil rentang [ab] dalam sintaks currying (a)(b). Mengembalikan array 2 elemen atau 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])

Uji kasus

Arnauld
sumber
4

Mathematica, 91 byte

If[(s=Select[Range@##,(p=PrimeQ)@#&&And@@((p@#||#<1)&/@IntegerDigits@#)&])!={},MinMax@s,0]&

Cobalah online!

J42161217
sumber
3

Jelly , 14 byte

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

Cobalah online!

Bagaimana itu bekerja

æRµDo2ÆPẠµÐf.ị ~ Program lengkap.

æR ~ Kisaran utama inklusif.
  µ µÐf ~ Hanya simpan yang memenuhi syarat.
   Do2ÆPẠ ~ Kondisi filter:
   D ~ Digit desimal dari angka saat ini.
    o2 ~ Logis atau dengan 2 (peta 0 hingga 2 dan digit lainnya untuk dirinya sendiri).
      ÆP ~ Apakah prima (unsur-bijaksana)?
        Ạ ~ Periksa apakah semua digit memenuhi kondisi.
            .ị ~ Dapatkan elemen pada indeks modular 0,5. Beberapa detail:
                 ~ Jelly adalah 1-diindeks, jadi 1 memberi kita elemen pertama, sementara 0
                   memberi kita elemen terakhir.
                 ~ Jika langit-langit dan lantai dari angka yang diberikan N tidak cocok, 
                   kemudian Jelly mengembalikan item di lantai indeks (N) dan langit - langit (N).
                 ~ Jika daftar ini kosong, ini menghasilkan 0, maka itu sangat nyaman.

Jika mengambil seluruh jajaran akan diizinkan (meskipun saya pikir seharusnya tidak), maka 12 byte:

Do2,ÆPȦµÐf.ị

Cobalah online!

Tuan Xcoder
sumber
13 byte Meskipun tidak super mirip. Haruskah saya mempostingnya sendiri? Anda dapat mengambilnya jika Anda mau, tetapi beri tahu saya jika Anda akan menyimpan solusinya.
dylnan
Kata OP For a given positive integers range. Saya akan minta klarifikasi
dylnan
@dylnan perhatikan bahwa versi Anda tidak valid ( 0adalah pengecualian dari tantangan, karena itu harus diperlakukan sebagai digit utama karena beberapa alasan). Bagaimanapun, saya memposting versi yang lebih pendek dan valid
Tn. Xcoder
Oh saya pikir 0 adalah aturan utama telah diubah
dylnan
3

Brachylog , 16 byte

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

Cobalah online!

"Return 0 jika tidak ada prime" yang sepenuhnya |∧0tidak masuk akal membuat kita kehilangan 3 byte ( ) tanpa alasan (itu akan kembali false.jika kita tidak menambahkannya)

Penjelasan

⟦₂                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
Fatalisasi
sumber
Tidak valid karena tidak menangani angka 0 sebagai prima (sebagaimana ditentukan dalam tantangan). Jadi, gagal untuk[2000, 2100]
Tn. Xcoder
3

Pyth , 24 byte

Menggunakan pendekatan awal saya ternyata lebih pendek.

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

Coba di sini!

(Saya baru saja memperbarui ke 23 tetapi Steven mengalahkan saya untuk itu )

?KfP#I_M-+TjT;0}FQhM_BK0

Coba di sini!

Secara alami, hM_BKbisa diganti oleh ,hKeK.

25 byte

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

Coba di sini!

26 byte

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

Coba di sini!

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

Coba di sini!


Bagaimana mereka bekerja

.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.
Tuan Xcoder
sumber
Yang ini tidak mengembalikan dua contoh [73] dalam kasus uji [70, 80].
Steven H.
Mengalahkan Anda kembali 1, sekarang jam 25.
Steven H.
@ SevenH. Mengalahkan Anda kembali dengan 1, sekarang jam 24.
Tuan Xcoder
Persaingan semakin ketat ... pada 23!
Steven H.
2

Mathematica 85 Bytes

Saya tahu sudah ada jawaban yang sama, tetapi pendekatan di sini sangat berbeda.

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

Jawaban 83 karakter ini akan ditempel dan dijalankan di Mathematica. Situs TIO tidak tahu bagaimana menafsirkan ∞.

Kelly Lowder
sumber
2

Jelly , 14 byte

Do2ÆPẠ
æRÇÐf.ị

Cobalah online!

æ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

Terima kasih kepada Erik Outgolfer untuk bantuan memperbaiki bug. Terima kasih kepada Tn. Xcoder untuk .ịtriknya.

Yang Mulia
sumber
Apakah ṙ-ḣ2berhasil untuk Ḣ,Ṫmemperbaikinya (mungkin harus memodifikasi sedikit lagi)?
Zacharý
@ Zacharý yang memberikan output dalam urutan yang salah. Dan sepertinya itu tidak berhasil: \
Ven
@ Mr.Xcoder Ruang Jelly membawaku ke solusi yang sama. Terima kasih!
Ven
.ịmungkin bekerja juga (agak dicuri dari Tn. XCoder)
Zacharý
Kamu benar! Itu bagus.
Ven
1

Ruby , 87 byte

->a,b{(z=(a..b).select{|x|(2...x).none?{|r|x%r<1}&&/[14689]/!~"%d"%x})[0]?(z.minmax):0}

Cobalah online!

GB
sumber
1

Perl 6 ,  68 66 65 61  58 byte

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

Cobalah

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

Cobalah

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

Cobalah

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

Cobalah

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

Cobalah

Diperluas:

{  # 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
}
Brad Gilbert b2gills
sumber
1

Perl 5 , 79 + 2 ( -ap) = 81 byte

map{$f=0|sqrt;1while$_%$f--;$s||=$_,$\=-$_ if!$f&&!/[14689]/}$F[0]..$F[1];$_=$s

Cobalah online!

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

Penjelasan:

Coba di sini.

(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)
Kevin Cruijssen
sumber
1

Bersih , 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]

Tidak Disatukan:

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]

Cobalah online!

Suram
sumber
1

Pyth, 28 25 23 byte

.xhM_BfP#I_M #+TjT;}FQ0

Suite uji. Pengembalian [2003,2053] untuk kasus uji terakhir, karena 2053 adalah prima.

Steven H.
sumber
Haha, tidak valid. Pengembalian [0, 0]bukan0
Tn. Xcoder
Ah, tembak. Saya akan memperbaikinya.
Steven H.
@ Mr.Xcoder Diperbaiki!
Steven H.
Sialan, aku baru saja memperbarui dengan 23 juga
Mr Xcoder
Saya pikir Anda mengatakan Anda akan tidur ... Anda menipu Anda: P
Steven H.