หมายเลขเฉพาะและหมายเลขสุดท้ายที่มีจำนวนเฉพาะของช่วง


12

ท้าทาย

สำหรับช่วงจำนวนเต็มบวกที่กำหนดให้หาจำนวนเฉพาะและหมายเลขสุดท้ายที่ประกอบด้วยตัวเลขจำนวนเฉพาะทั้งหมดโดยเฉพาะอย่างยิ่งรวมถึง 0 (สำหรับตัวเลขช่วง 0-2 ควรส่งออก 2-2) ช่วงนี้รวม หากไม่พบจำนวนผลลัพธ์ที่คาดหวังคือ 0 หากมีเพียงหมายเลขเดียวดังกล่าวเอาต์พุตที่คาดหวังคือหมายเลขนั้นสองครั้ง

ตัวอย่าง

  • สำหรับช่วง 1-100 จำนวนเฉพาะตัวแรกคือ 2 และตัวสุดท้ายคือ 73 (7 และ 3 เป็นหมายเลขเฉพาะ)
  • สำหรับช่วง 70-80 หมายเลขเฉพาะแรกคือ 73 และสุดท้ายคือ 73 (เนื่องจากมีหมายเลขที่ถูกต้องเพียงหนึ่งหมายเลขในช่วงที่กำหนดเราจึงส่งกลับสองครั้ง)
  • สำหรับช่วง 190–200 ไม่มีคำตอบที่ถูกต้องดังนั้นคุณส่งคืน 0
  • สำหรับช่วง 2000-2100 จำนวนเฉพาะตัวแรกคือ 2003 และอันสุดท้ายคือ 2053 (เราไม่ใส่ตัวเลข 0 แต่หลักอื่น ๆ ทั้งหมดเป็นจำนวนเฉพาะ)

นี่คือดังนั้นโค้ดที่สั้นที่สุดเป็นไบต์จะชนะ!

ช่องโหว่มาตรฐานทั้งหมดใช้

อินพุต

  • คุณมีอิสระที่จะรับจำนวนเต็มสองจำนวนเป็นอินพุตได้ แต่คุณอาจเห็นว่าเหมาะสม, สแต็ค, อาร์กิวเมนต์ของฟังก์ชัน, อาร์กิวเมนต์ CLI, stdin
  • คุณต้องรับจำนวนเต็มสองจำนวนเท่านั้น

เอาท์พุต

  • คุณต้องส่งคืนผลลัพธ์ (tuple, array, multi-return ถ้าภาษาของคุณรองรับ), วางไว้บน stack หรือพิมพ์ (ในกรณีนี้จะต้องแยกออกจากกัน)
  • ลำดับของเอาต์พุตไม่เกี่ยวข้อง
  • คุณได้รับอนุญาตนำ / วงเล็บเหลี่ยมและขึ้นบรรทัดใหม่
  • คุณต้องส่งคืนตัวเลขสองจำนวนหากมีคำตอบแม้ว่าจะเหมือนกันก็ตาม
  • คุณต้องส่งคืน 0 หากไม่มีคำตอบ

เพื่อให้แน่ใจว่าถ้าฉันส่งคืนรายการจำนวนเต็มเมื่อมีคำตอบฉันสามารถส่งคืนรายการที่มีเพียง 0 เมื่อไม่มีคำตอบได้หรือไม่ ฉันไม่ต้องการที่จะกลับมา0แทน[0]?
2560

คำตอบ:




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 ~ ช่วงที่ดีเยี่ยมรวม
  keep µÐf ~ รักษาที่ตรงกับเงื่อนไขเท่านั้น
   Do2ÆPẠ ~ เงื่อนไขการกรอง:
   D ~ ตัวเลขทศนิยมของตัวเลขปัจจุบัน
    o2 ~ ตรรกะหรือ 2 (แผนที่ 0 ถึง 2 และตัวเลขอื่น ๆ กับตัวเอง)
      primeP ~ เป็นเลิศ (องค์ประกอบที่ฉลาด)?
        Ạ ~ ตรวจสอบว่าตัวเลขทั้งหมดเป็นไปตามเงื่อนไขหรือไม่
            .ị ~ รับองค์ประกอบที่ดัชนีแบบแยกส่วน 0.5 รายละเอียดบางอย่าง:
                 ~ เยลลี่มีการจัดทำดัชนี 1 ดังนั้น 1 ให้องค์ประกอบแรกกับเราขณะที่ 0
                   ให้องค์ประกอบสุดท้ายกับเรา
                 ~ หากเพดานและพื้นของตัวเลขที่ระบุยังไม่ตรงกัน 
                   จากนั้น Jelly จะส่งคืนไอเท็มที่ดัชนีชั้น (N) และ ceil (N)
                 ~ หากรายการว่างเปล่านี่ให้ผลเป็น 0 ดังนั้นจึงสะดวกมาก

หากถ่ายทั้งช่วงจะได้รับอนุญาต (แม้ว่าฉันคิดว่าไม่ควรจะเป็น) ก็เท่ากับ 12 ไบต์

Do2,ÆPȦµÐf.ị

ลองออนไลน์!


13 ไบต์แม้ว่าจะไม่คล้ายกันมาก ฉันควรโพสต์เอง คุณสามารถรับได้ถ้าคุณต้องการ แต่แจ้งให้เราทราบหากคุณกำลังจะแก้ปัญหาของคุณ
dylnan

OP For a given positive integers rangeกล่าวว่า ฉันจะขอให้ชี้แจง
dylnan

@dylnan โปรดทราบว่ารุ่นของคุณไม่ถูกต้องอย่างไรก็ตาม ( 0เป็นข้อยกเว้นจากการท้าทายเพราะควรถือว่าเป็นตัวเลขหลักด้วยเหตุผลบางประการ) อย่างไรก็ตามฉันโพสต์รุ่นที่สั้นลงและใช้ได้จริง
Mr. 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 แต่สตีเฟนเอาชนะฉันได้ )

?KfP#I_M-+TjT;0}FQhM_BK0

ลองที่นี่!

Natually, สามารถถูกแทนที่ด้วย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.


อันนี้ไม่ส่งคืน [73] สองอินสแตนซ์ในกรณีทดสอบ [70, 80]
Steven H.

แซงหน้าคุณไปทีละ 1 ตอนที่ 25
สตีเวนเอช.

@StevenH แซงหน้าคุณไป 1 คนตอนนี้เวลา 24.
Mr. Xcoder

การแข่งขันเริ่มทวีความรุนแรงมาก ... เมื่ออายุ 23!
Steven H.

2

Mathematica 85 Bytes

ฉันรู้ว่ามีคำตอบที่คล้ายกันอยู่แล้ว แต่วิธีการที่นี่แตกต่างกันมาก

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

ขอบคุณErik the Outgolferสำหรับความช่วยเหลือในการแก้ไขข้อบกพร่อง ขอบคุณMr. Xcoderสำหรับ.ịเคล็ดลับ


จะṙ-ḣ2ทำงานḢ,Ṫเพื่อแก้ไข (อาจต้องแก้ไขอีกเล็กน้อย)?
Zacharý

@ Zacharýที่ให้ผลลัพธ์ในลำดับที่ผิดแม้ว่า และมันก็ดูเหมือนจะไม่ทำงาน: \
Ven

@ Mr.Xcoder ห้อง Jelly นำฉันไปสู่โซลูชันเดียวกัน ขอบคุณ!
Ven

.ịอาจทำงานได้เช่นกัน (ชนิดที่ถูกขโมยมาจาก Mr. XCoder)
Zacharý

คุณถูก! เยี่ยมมาก
Ven



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

Pyth, 28 25 23 ไบต์

.xhM_BfP#I_M #+TjT;}FQ0

ชุดทดสอบ ส่งคืน [2003,2053] สำหรับกรณีทดสอบครั้งสุดท้ายเนื่องจากปี 2053 เป็นช่วงที่ดีเยี่ยม


ฮ่าฮ่าไม่ถูกต้อง ส่งคืน[0, 0]แทน0
Mr. Xcoder

อ่ายิง ฉันจะแก้ไขมัน
Steven H.

@ Mr.Xcoder แก้ไขแล้ว!
Steven H.

พระเจ้าด่ามันฉันเพิ่งอัปเดตด้วย23 เช่นกัน
นาย Xcoder

ฉันคิดว่าคุณพูดว่าคุณกำลังจะนอน ... คุณหลอกคุณ: P
Steven H.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.