範囲の素数を持つ最初と最後の素数


12

チャレンジ

特定の正の整数範囲について、例外的に0を含む、完全に素数の数字で構成される最初と最後の素数を見つけます(数字の場合、0-2の範囲は2-2を出力します)。範囲は包括的です。数字が見つからない場合、期待される出力は0です。そのような数字が1つしかない場合、期待される出力はその数字の2回です。

  • 1〜100の範囲では、最初の素数は2で、最後の素数は73です(7と3は素数です)。
  • 70〜80の範囲では、最初の素数は73で、最後の素数も73です(指定された範囲には正しい数が1つしかないため、2回返します)。
  • 190〜200の範囲では、正解がないため、0を返します。
  • 2000-2100の範囲では、最初の素数は2003で、最後は2053です(数字0は省略しますが、他のすべての数字は素数です)

これはなので、バイト単位の最短コードが勝ちです!

すべての標準的な抜け穴が適用されます。

入力

  • 入力として2つの整数を自由に受け入れることができますが、fit、stack、function argument(s)、CLI argument、stdinが表示される場合があります。
  • 2つの整数のみを受け取る必要あります。

出力

  • あなたはしなければならないのいずれか(この場合には、彼らは何とか分離しなければならない)(あなたの言語がサポートしている場合は、タプル、配列、マルチリターン)、結果を返すスタックにそれを残す、またはそれを印刷します。
  • 出力の順序は関係ありません。
  • 先頭/末尾のブラケットと改行を使用できます。
  • 答えがあれば、たとえ同じであっても、2つの数字を返す必要があります。
  • 応答がない場合は、0を返す必要があります。

念のため、答えがあるときに整数のリストを返す場合、答えがないときに0だけを含むリストを返すことができますか?0代わりに戻る必要はありません[0]か?
17

回答:



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

JavaScript(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の要素を取得します。いくつかの詳細:
                 〜Jellyは1から始まるので、1は最初の要素を、0は
                   最後の要素を提供します。
                 〜指定された数Nの天井と床が一致しない場合、 
                   その後、Jellyはインデックスfloor(N)および ceil(N)のアイテムを返します。
                 〜リストが空の場合、これにより0が得られるため、非常に便利です。

範囲全体をとることが許可されている場合(そうではないはずですが)、12バイト:

Do2,ÆPȦµÐf.ị

オンラインでお試しください!


13バイトそれはあまり似ていませんが。自分で投稿するだけですか?必要に応じて使用できますが、ソリューションを維持するかどうかをお知らせください。
ディルナン

OPは言いFor a given positive integers rangeます。明確にするようお願いします
ディルナン

@dylnan 0は、それでもバージョンが無効であることに注意してください(何らかの理由でプライムディジットとして扱われる必要があるため、チャレンジの例外です)。とにかく、私は短い投稿有効なバージョン
氏Xcoder

ああ、私は0が主なルールが変更されたと思った
ディルナン

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]
Mr. Xcoder

3

Pyth、24バイト

私の最初のアプローチを使用する方が短いことがわかりました。

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

ここで試してみてください!

(私はちょうど23に更新していましたが、スティーブンはそれに私を打ち負かしました

?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]の2つのインスタンスを返しません。
スティーブンH.17年

あなたは今25で、1バックOutgolfed
スティーブンH.

@stevenH。あなたは今24で、1バックOutgolfed
氏Xcoder

競争は激化しています... 23時!
スティーブンH.

2

Mathematica 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

バグの修正に協力してくれたアウトゴルファーのエリックに感謝します。おかげ氏Xcoderための.ịトリック。


それを修正するṙ-ḣ2ためḢ,Ṫに働くでしょうか(もう少し修正する必要があるかもしれません)?
ザカリー

ただし、間違った順序で出力を行う@Zacharý。そして、それは動作していないようです:\
Ven

@ Mr.Xcoder Jellyルームは、私に同じソリューションをもたらしました。ありがとう!
ベン

.ị同様に機能する可能性があります(XCoder氏から盗まれたようなもの)
ザカリー

あなたが正しい!それはすばらしい。
ヴェン



1

Perl 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

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

オンラインでお試しください!


1

Pyth、28 25 23バイト

.xhM_BfP#I_M #+TjT;}FQ0

テストスイート。2053は素数であるため、最後のテストケースの[2003,2053]を返します。


ハハ、無効。戻り値[0, 0]の代わりに0
氏Xcoder

あ、撃って。それを修正します。
スティーブンH.

@ Mr.Xcoder修正!
スティーブンH.

神は、私はちょうどで更新した畜生すぎ23
氏Xcoder

I thought you said you were going to bed... You tricky you :P
Steven H.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.