Asal aralık aralığına sahip ilk ve son asal sayılar


12

Meydan okuma

Belirli bir pozitif tamsayı aralığı için, istisnai olarak 0 dahil olmak üzere tamamen asal sayı basamaklarından oluşan ilk ve son asal sayıları bulun ( basamaklar için 0-2 aralığı 2-2 vermelidir). Aralık dahil. Herhangi bir sayı bulunamazsa, beklenen çıktı 0'dır. Böyle bir sayı varsa, beklenen çıktı o sayıdır.

Örnekler

  • 1-100 aralığı için, ilk asal sayı 2 ve sonuncusu 73'tür (7 ve 3 asal sayılardır).
  • 70–80 aralığı için, ilk asal sayı 73 ve sonuncusu da 73'tür (Verilen aralıkta yalnızca bir doğru sayı olduğundan, iki kez döndürürüz).
  • 190–200 aralığı için doğru cevap yoktur, bu nedenle 0 değerini döndürürsünüz.
  • 2000-2100 aralığı için, ilk asal sayı 2003 ve sonuncusu 2053'tür (0 rakamını atlarız, ancak diğer tüm rakamlar asaldır)

Bu , yani bayt en kısa kod kazanmak!

Tüm standart boşluklar geçerlidir.

Giriş

  • İki tamsayıyı girdi olarak kabul etmekte özgürsünüz ancak fit, stack, fonksiyon argüman (lar) ı, CLI argüman, stdin görebilirsiniz.
  • Yalnızca iki tamsayı almanız gerekir .

Çıktı

  • Sen gerekir , ya yığını üzerine bırakın (dil destekleri o eğer bir kayıt düzeni bir dizi, çok getiriyi) sonucu döndüren, ya da (bu durumda, onlar nasılsa ayrılmalıdır) yazdırın.
  • Çıktıların sırası önemsizdir.
  • Öncü / sondaki parantez ve yeni satırlara izin verilir.
  • Bir cevap varsa, aynı olsalar bile, iki sayı döndürmelisiniz.
  • Yanıt yoksa 0 döndürmeniz gerekir.

Sadece cevaplar olduğunda bir tamsayı listesi döndürüyorsam, cevap olmadığında sadece 0 içeren bir liste döndürebilir miyim? Bunun 0yerine geri dönmem gerekmiyor [0]mu?
17'de

Yanıtlar:



5

Perl 6, 105 94 90 86 bayt

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

4

JavaScript (ES6), 83 bayt

Körleme sözdiziminde [ab] aralığını alır (a)(b). 2 elemanlı bir dizi veya 0 döndürür .

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

Test senaryoları



3

Jöle , 14 bayt

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

Çevrimiçi deneyin!

Nasıl çalışır

æRµDo2ÆPẠµÐf.ị ~ Tam program.

æR ~ Kapsayıcı asal aralık.
  µ µÐf ~ Sadece bir koşulu karşılayanları saklayın.
   Do2ÆPẠ ~ Filtre koşulu:
   D ~ Geçerli sayının ondalık basamakları.
    o2 ~ Mantıksal veya 2 ile (0'dan 2'ye ve başka bir rakam kendi kendine eşlenir).
      ~P ~ Asal mı (element olarak)?
        All ~ Tüm rakamların koşulu sağlayıp sağlamadığını kontrol edin.
            ị Elemanı 0,5 modüler indekste alın. Bazı detaylar:
                 ~ Jelly 1 endekslidir, bu yüzden 1 bize ilk elementi verirken, 0
                   bize son elementi verir.
                 ~ Verilen N sayısının tavanı ve zemini uyuşmuyorsa, 
                   daha sonra Jelly, indeks tabanındaki (N) ve tavandaki (N) öğeleri döndürür .
                 ~ Liste boşsa, bu 0 verir, bu nedenle çok uygundur.

(Ben olmamalı düşünüyorum rağmen) tüm aralığı alarak izin olurdu, o zaman 12 bayt:

Do2,ÆPȦµÐf.ị

Çevrimiçi deneyin!


13 bayt Süper benzer olmasa da. Sadece kendim mi göndermeliyim? İsterseniz alabilirsin ama çözümünüzü koruyacağınızı bana bildirin.
dylnan

OP diyor For a given positive integers range.
Açıklığa

@dylnan, sürümünüzün yine de geçersiz olduğunu unutmayın ( 0herhangi bir nedenden ötürü asal basamak olarak ele alınması gerektiğinden, meydan okumadan istisnadır). Her neyse, daha kısa ve geçerli bir versiyon yayınladım
Bay Xcoder

Ah 0'ın asıl kuralın değiştiğini
sanıyordum

3

Brachylog , 16 bayt

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

Çevrimiçi deneyin!

Tamamen mantıksız "eğer bir Başbakan yoksa 0 dönüş" |∧0hiçbir sebepten dolayı 3 bayt ( ) kaybetmemizi sağlar ( false.onları eklemezsek dönecekti )

açıklama

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

Geçersiz, çünkü 0 rakamını asal olarak ele almaz (meydan okumada belirtildiği gibi). Böylece, başarısız[2000, 2100]
Bay Xcoder

3

Pyth , 24 bayt

İlk yaklaşımımı kullanmak daha kısa çıkıyor.

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

Burada deneyin!

(Sadece 23'e güncelleme yapıyordum ama Steven beni dövdü )

?KfP#I_M-+TjT;0}FQhM_BK0

Burada deneyin!

Doğal olarak, hM_BKile değiştirilebilir ,hKeK.

25 bayt

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

Burada deneyin!

26 bayt

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

Burada deneyin!

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

Burada deneyin!


Onlar nasıl çalışır

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


Bu, [70, 80] test durumunda [73] 'ün iki örneğini döndürmez.
Steven H.

1'den fazla geride bıraktın, şimdi 25'te.
Steven H.

@StevenH. Seni 1 yaşında geride bıraktı, şimdi 24 yaşında.
Bay Xcoder

Yarışma yoğunlaşıyor ... 23 yaşında!
Steven H.

2

Mathematica 85 Bayt

Benzer bir cevap olduğunu biliyorum, ama buradaki yaklaşım oldukça farklı.

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

Bu 83 karakterlik cevap Mathematica'da yapıştırılıp çalıştırılacaktır. TIO sitesi ∞'ın nasıl yorumlanacağını bilmiyor.


2

Jöle , 14 bayt

Do2ÆPẠ
æRÇÐf.ị

Çevrimiçi deneyin!

æ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

Hata gidermek için Outgolfer Erik'e teşekkürler . Sayesinde Sn Xcoder için .ịhile.


Misiniz ṙ-ḣ2için çalışma Ḣ,Ṫ(biraz daha değiştirmek gerekebilir) bunu düzeltmek için?
Zacharý

@ Zacharý bu çıktıyı yanlış sırada veriyor. Ve işe yaramadı: \
Ven

@ Mr.Xcoder Jelly odası beni aynı çözüme götürdü. Teşekkürler!
Ven

.ịde işe yarayabilir (Bay XCoder'den çalınan tür)
Zacharý

Haklısın! Bu iyi.
Ven



1

Perl 6 ,  68 66 65 61  58 bayt

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

Dene

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

Dene

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

Dene

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

Dene

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

Dene

Expanded:

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

(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çıklama:

Burada deneyin.

(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

Temiz , 142 131 125 bayt

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]

Ungolfed:

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]

Çevrimiçi deneyin!


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.