ช่วงเวลาอื่นนอกเหนือจาก Optimus


36

ท้าทาย

ได้รับจำนวนเต็มอินพุทn > 0เอาท์พุทจำนวน primes (ที่อื่น ๆกว่าnถ้าnตัวเองเป็นสำคัญ) ที่สามารถผลิตได้โดยการเปลี่ยนหนึ่งหลักในการขยายตัวของทศนิยม n (โดยไม่ต้องเปลี่ยนจำนวนตัวเลข)

ตัวอย่าง

ตัวอย่างเช่นn = 2. โดยการเปลี่ยนหนึ่งหลักในการขยายทศนิยมของ2เราสามารถขึ้นมาสามตัวเลขที่สำคัญเพิ่มเติมดังนั้น3, 5, 7a(n) = 3

สำหรับตัวอย่างอื่น, n = 13. โดยการเปลี่ยนหนึ่งหลักคุณจะได้รับช่วงเวลา11, 17, 19, 23, 43, 53, 73, 83ดังนั้นa(13) = 8ดังนั้น

สำหรับตัวอย่างสุดท้าย, n = 20. โดยการเปลี่ยนหนึ่งหลักคุณจะได้รับช่วงเวลา23, 29ดังนั้นa(20) = 2ดังนั้น

ลำดับ

ต่อไปนี้เป็นคำศัพท์ 20 คำแรกที่ให้คุณเริ่มต้นได้ นี่คือ OEIS A048853

4, 3, 3, 4, 3, 4, 3, 4, 4, 4, 7, 4, 8, 4, 4, 4, 7, 4, 7, 2

กฎระเบียบ

  • อินพุตและเอาต์พุตสามารถสันนิษฐานว่าเหมาะสมกับชนิดจำนวนเต็มดั้งเดิมของภาษาของคุณ
  • อินพุตและเอาต์พุตจะได้รับในรูปแบบที่สะดวกใด
  • ละเว้นศูนย์นำหน้า (ตัวอย่างเช่น03ไม่ใช่หมายเลขเฉพาะภายใต้สูตรนี้)
  • ยอมรับได้ทั้งโปรแกรมหรือฟังก์ชั่น หากฟังก์ชั่นคุณสามารถส่งคืนผลลัพธ์มากกว่าการพิมพ์
  • หากเป็นไปได้โปรดใส่ลิงค์ไปยังสภาพแวดล้อมการทดสอบออนไลน์เพื่อให้ผู้อื่นสามารถลองใช้รหัสของคุณได้!
  • ช่องโหว่มาตรฐานเป็นสิ่งต้องห้าม
  • นี่คือเพื่อให้ใช้กฎการตีกอล์ฟตามปกติทั้งหมดและรหัสที่สั้นที่สุด (เป็นไบต์) ชนะ

4
ฉันพยายามที่จะคิดว่าของที่เล็กที่สุดที่ส่งออกเป็นn ฉันคิดว่ามัน0 n = 200ผมยังคิดว่าพวกเขามาในที่อัดแน่น: 200,202,204,206,208, 320,322,...,328, 510,...,518, 620,...628, 840,...,848ฯลฯ
วิศวกร Toast

"การรับเข้าและส่งออกสามารถสันนิษฐานว่าเหมาะสมกับประเภทจำนวนเต็มในภาษาของคุณ" ที่เราไม่ได้รับอนุญาตให้รับอินพุตเป็นสตริงหรือไม่
Dead Possum

1
@DeadPossum ไม่ได้รับอนุญาต เพียงแค่คุณไม่ต้องกังวลเกี่ยวกับ 2 ^ 100 เป็นอินพุตหากคุณใช้เลขจำนวนเต็ม 32 บิตเท่านั้น
AdmBorkBork

แจ้งให้เราทราบหากฉันกำลังจะลงเรือ ... ฉันมี 3 สิ่งที่ต่างออกไปตอนนี้
Patrick Roberts

2
@EngineerToast หลังจากพบตัวอย่างแรกที่สำคัญ (294,001) ในที่สุดผมก็คิดว่าการมองขึ้นบน OEIS: A192545และA158124 ที่เกี่ยวข้องนอกจากนี้: A143641
Ørjan Johansen

คำตอบ:


10

05AB1E , 17 16 14 11 ไบต์

ā°`<Ÿʒ.L}pO

คำอธิบาย:

ā             Push inclusive range from 1 to the length of the input
 °            Raise 10 to the power of each element
  `           Push each element to the stack
   <          Decrement the topmost element
    Ÿ         Inclusive range
              For 13, this creates an array like [10 11 12 13 14 .. 98 99]
     ʒ.L}     Only keep elements with a levenshtein distance to the input of
              exactly one
         p    Check each element for primality
          O   Sum

ลองออนไลน์! หรือถึง 100


1
.L? อย่างจริงจัง? .L?!?!
Erik the Outgolfer

L@EriktheOutgolfer
Okx

ฉันหมายถึงมันมี builtin สำหรับระยะทาง levenshtein!
Erik the Outgolfer

@EriktheOutgolfer ¯ \ _ (ツ) _ / ¯
Okx

ฉันรู้ว่าไม่นานมานี้ แต่คุณสามารถลบ<เพื่อบันทึกไบต์ได้ แม้ว่าตัวกรองจะไม่ลบ100/ 1000/ 10000/ ฯลฯ แต่ก็ไม่เคยมีความสำคัญดังนั้นจะไม่ส่งผลกระทบต่อเอาต์พุต
Kevin Cruijssen

5

Python 2 , 146 136 127 121 118 ไบต์

ขอบคุณ @ Mr.Xcoder สำหรับคำแนะนำ

lambda I:sum(all(i%v for v in range(2,i))*sum(z!=x for z,x in zip(I,`i`))==1for i in range(1+10**~-len(I),10**len(I)))

คำอธิบาย:

สร้างตัวเลขที่มีความยาวเท่ากับความยาวอินพุตโดยข้ามก่อน (1,10,100,1000, ... )

for i in range(1+10**~-len(I),10**len(I))

ตรวจสอบว่าตัวเลขที่สร้างขึ้นนั้นแตกต่างจากอินพุตเพียงหนึ่งหลัก

sum(z!=x for z,x in zip(I,`i`))==1

ตรวจสอบนายก

all(i%v for v in range(2,i))

นับ

sum(...)    

ลองออนไลน์!


มันอาจจะสั้นกว่าที่จะไม่ทำให้แลมบ์ดานี้และทำr=rangeเพราะคุณใช้หลายครั้ง ... ?
Stewie Griffin

1
มันใช้งานได้กับสิ่งต่าง ๆ เช่น143? เพราะฉันเห็นrange(1,10)ว่าไม่รวมอยู่0และ103เป็นนายก
Mr. Xcoder

แก้ไข @ Mr.Xcoder
Dead Possum

1
คุณไม่จำเป็นต้องอยู่ใน0 พอเพียง r(0,10)r(10)
Mr. Xcoder

1
นอกจากนี้ฉันขอแนะนำให้วางไว้เช่นนี้:lambda I,r=range:
Mr. Xcoder

4

Javascript (ES6) 148 ไบต์

รับอินพุตเป็นสตริงและส่งคืนเป็นตัวเลข

n=>(n.replace(/./g,"$`a$' ").split` `.map(s=>s&&[..."0123456789"].map(d=>r+=+(t=s.replace(/a/,d))[0]&&t^n&&(p=v=>t>1&(--v<2||t%v&&p(v)))(t)),r=0),r)

ตัวอย่างข้อมูลโค้ด:

f=
n=>(n.replace(/./g,"$`a$' ").split` `.map(s=>s&&[..."0123456789"].map(d=>r+=+(t=s.replace(/a/,d))[0]&&t^n&&(p=v=>t>1&(--v<2||t%v&&p(v)))(t)),r=0),r)

for(var k=1;k<=20;k++)
  o.innerText+=f(""+k)+" "
<pre id=o></pre>



3

Mathematica, 105 ไบต์

F=Count[Range[f=IntegerDigits;g=10^Length@f@#/10,10g],n_/;PrimeQ@n&&MatchQ[f@n-f@#,{x=0...,_,x}]&&n!=#]&;

ลองออนไลน์!

Function#ซึ่งคาดว่าเป็นจำนวนเต็มบวก ตั้งค่าfเท่ากับฟังก์ชันIntegerDigitsที่ส่งคืนรายการตัวเลขของอินพุต เราใช้เวลาRangeจากgไป10g(รวม) ซึ่งg=10^Length@f@#/10เป็นพลังงานที่ใหญ่ที่สุดของ10น้อยกว่าหรือเท่ากับการป้อนข้อมูล#แล้วดังกล่าวว่า ตรวจสอบไม่ว่าจะเป็นนายกตรวจสอบไม่ว่าจะเป็นความแตกต่างระหว่างรายการหลักของและเป็นของรูปแบบและเพื่อให้แน่ใจว่าและมีCountnPrimeQ@n&&MatchQ[f@n-f@#,{x=0...,_,x}]&&n!=#PrimeQ@nnMatchQ[f@n-f@#,{x=0...,_,x}]n#{0..., _, 0...}n!=#n#Unequal


3

JavaScript (ES6), 153 142 139 ไบต์

n=>([...n].map((c,i,[...a])=>[...''+1e9].map((u,j)=>s+=j+i&&j!=c?p((a.splice(i,1,j),a.join``)):0),s=0,p=q=>eval('for(k=q;q%--k;);k==1')),s)

ยอมรับอินพุตเป็นสตริง พฤติกรรมที่ไม่ได้กำหนดสำหรับอินพุตที่ไม่ถูกต้องถึงแม้ว่ามันควรจะยุติลงโดยไม่มีข้อผิดพลาดกับสตริงใด ๆ ที่ฉันนึกออก ไม่จำเป็นต้องมาก่อนความร้อน - ตายของจักรวาลโดยเฉพาะอย่างยิ่งสำหรับสายยาว

การสาธิต

f=
n=>([...n].map((c,i,[...a])=>[...''+1e9].map((u,j)=>s+=j+i&&j!=c?p((a.splice(i,1,j),a.join``)):0),s=0,p=q=>eval('for(k=q;q%--k;);k==1')),s)
console.log([...''+1e19].map((_,i)=>f(i+1+'')).join())
i.onchange=()=>console.log(f(i.value))
<input id=i>

ปรับปรุง

บันทึก 11 ไบต์โดยการกำหนดการreduce()เรียกไปยังการmap()โทรอีกครั้งและโดยการคัดลอกอาเรย์aในพารามิเตอร์ฟังก์ชั่นโดยปริยายแทนที่จะเป็นภายในบริบทของการsplice()โทร

บันทึกแล้ว 3 ไบต์ขอบคุณที่@Neilแนะนำให้เปลี่ยน[...Array(10)]เป็น[...''+1e9]ไป

รหัสไม่ระบุ

input => (
  [...input].map(
    (char, decimal, [...charArray]) =>
      [...'' + 1e9].map(
        (unused, digit) => sum +=
          digit + decimal && digit != char ?
            prime(
              (
                charArray.splice(decimal, 1, digit)
                , charArray.join``
              )
            ) :
            0
      )
    , sum = 0
    , prime = test => eval('for(factor = test; test % --factor;); factor == 1')
  )
  , sum
)

คำอธิบาย

ฟังก์ชั่นนี้ใช้สองระดับmap()เพื่อหาผลรวมของจำนวนพีชคณิตที่ผ่านการทดสอบแบบดั้งเดิมซึ่งถูกยืมและแก้ไขจากคำตอบนี้

(คำตอบเดิม)

reduce((accumulator, currentValue, currentIndex, array) => aggregate, initialValue)

ดังนั้นสำหรับตัวอย่างเช่นในการคำนวณผลรวมของอาร์เรย์คุณจะผ่านการinitialValueของ0และกลับไปที่เท่าเทียมกันaggregate accumulator + currentValueปรับเปลี่ยนวิธีการนี้เล็กน้อยเราแทนที่จะคำนวณจำนวนพีชคณิตที่ผ่านการทดสอบแบบดั้งเดิม:

reduce(
  (passedSoFar, currentDecimal, currentIndex, digitArray) =>
    isValidPermutation() ?
      passedSoFar + prime(getPermutation()) :
      passedSoFar
  , 0
)

นั่นคือหลักภายในreduce()ซึ่ง iterates พีชคณิตทั้งหมดของdigitArrayโดยการเปลี่ยนแต่ละที่จะเฉพาะเจาะจงdecimal permutatedDigitจากนั้นเราต้องใช้ส่วนนอกreduce()เพื่อย้ำสิ่งที่เป็นไปได้ทั้งหมดpermutatedDigitเพื่อแทนที่decimalสิ่งซึ่งเป็นเพียง0-9ซึ่งเป็นเพียง

ความผิดปกติในการใช้งาน

[...''+1e9].map((u,j)=>...เป็นทางที่สั้นที่สุด@Neilสามารถคิดย้ำข้อโต้แย้งผ่าน0 9มันจะดีกว่าที่จะทำกับuแต่uไม่เป็นประโยชน์สำหรับแต่ละองค์ประกอบในอาร์เรย์ในกรณีนี้

i+jในการตรวจสอบเงื่อนไขที่สามเพื่อให้แน่ใจว่า0ไม่ใช่การเปลี่ยนแปลงที่เป็นไปได้ของตัวเลขนำหน้าตามข้อกำหนดการท้าทาย j!=cทำให้มั่นใจได้ว่าต้นฉบับnไม่ใช่ผู้สมัครที่จะต้องผ่านการทดสอบเบื้องต้น

(a.splice(i,1,j),a.join``)เป็นระเบียบ splice()แทนที่ตัวเลขที่decimal == iด้วยpermutatedDigit == jแต่เนื่องจากsplice()ส่งคืนองค์ประกอบที่ลบออก (ในกรณีนี้จะเท่ากับ[a[i]]) แทนที่จะเป็นอาร์เรย์ที่ถูกแก้ไขเราจะต้องใช้ตัวดำเนินการจุลภาคเพื่อส่งผ่านอาร์เรย์ที่ปรับเปลี่ยนaไปยังการทดสอบแบบดั้งเดิม แต่ไม่ใช่ก่อนที่จะรับjoin()มัน เป็นสตริงตัวเลข

สุดท้ายeval()คือการบันทึกไบต์ตั้งแต่เมื่อเปรียบเทียบกับวิธีบัญญัติมาตรฐานที่มากขึ้นจะสั้นกว่า:

q=>eval('for(k=q;q%--k;);k==1')

q=>{for(k=q;q%--k;);return k==1}

การอ้างอิงถึงการทดสอบหลักpถูกเตรียมใช้งานในอาร์กิวเมนต์ที่ไม่ได้ใช้กับการmap()โทร


ฉันคิดว่าหน้าคำแนะนำที่บอกว่า[...''+1e9]สั้นกว่า
Neil

2

Python 2 , 134 ไบต์

lambda x,r=range,l=len:sum(~-f*(~-l(x)==sum(`f`[t]==x[t]for t in r(l(x))))and all(f%v for v in r(2,f))for f in r(10**~-l(x),10**l(x)))

ลองออนไลน์!

สง่างามยิ่งกว่ารุ่นที่ยาวกว่า:

lambda x,r=range,l=len:l(filter(lambda f:(~-f*(~-l(x)==sum(`f`[t]==x[t]for t in r(l(x)))))*all(f%v for v in r(2,f)),r(10**~-l(x),10**l(x))))

อินพุตถูกใช้เป็นสตริง


คำอธิบาย (เวอร์ชั่นที่เก่ากว่า)

  • lambda x,r=range,l=len:- กำหนดแลมบ์ดาที่มีพารามิเตอร์สตริงxและสองตัวแปรคงที่และr=rangel=len

  • sum(1...)- ได้รับความยาวซึ่งจะช่วยประหยัด 1 len([...])ไบต์มากกว่า

  • for f in r(10**~-l(x),10**l(x))- สร้างตัวเลขทั้งหมดอย่างแน่นอนโดยมีลำดับความสำคัญเท่ากับอินพุต (คาดหวัง0) ยกตัวอย่างเช่นการป้อนข้อมูลของจะส่งผลให้3[1, 2, 3, 4, 5, 6, 7, 8, 9]

  • sum(1for t in r(l(x))if`f`[t]==x[t])==~-l(x)and f>1 - ตรวจสอบว่าหมายเลขปัจจุบันห่างจากอินพุต 1 หลักอย่างแน่นอนหรือไม่และมันสูงกว่า 1

  • all(f%v for v in r(2,f)) - ตรวจสอบว่าหมายเลขปัจจุบันเป็นจำนวนเฉพาะหรือไม่


1
คุณทำการเปลี่ยนแปลงsum(1for..ifBOOL)เพื่อsum(BOOLfor)บันทึกบางไบต์
Dead Possum

เราอนุญาตให้ป้อนข้อมูลเป็นสตริงหรือไม่ การดูที่ "อินพุตและเอาต์พุตสามารถคาดเดาได้ว่าเหมาะกับประเภทจำนวนเต็มของภาษาของคุณ" ฉันไม่แน่ใจ
Dead Possum

@DeadPossum คำตอบบางคำตอบ ทำไมจะไม่ได้รับอนุญาต!
Mr. Xcoder

ฉันหมดคะแนนสำหรับวันนี้ แต่จะ +1 เร็ว: D
Dead Possum

@DeadPossum แน่นอน อย่าลืมหรือฉันจะ ping คุณ! ( </joke>)
นาย Xcoder

1

JavaScript (ES6), 137 ไบต์

i=(a=prompt()).length;s=0;while(i--)for(j=0;j<=9;j++){(b=[...a]).splice(i,1,j);k=b=b.join('');while(b%--k);s+=i+j&&a[i]!=j&&k==1}alert(s)

ปรับคำตอบอื่น ๆ ของฉันเป็นส่งแบบเต็มรูปแบบโปรแกรมเว็บโดยใช้วิธีการของ API และprompt()alert()


1

ถั่ว 126 ไบต์

00000000: a64d a065 8050 80a0 5d20 8001 a64d a06f  ¦M e.P. ] ..¦M o
00000010: 8025 39b5 cb81 2065 27a6 4da0 6680 2581  .%9µË. e'¦M f.%.
00000020: 0035 cb81 2066 27a6 53d0 80cd a05e 8043  .5Ë. f'¦SÐ.Í ^.C
00000030: cf20 5d00 2080 82a0 65a5 3a20 66a6 4da0  Ï ]. .. e¥: f¦M 
00000040: 6780 4da0 5e80 53d0 80a0 5e20 807b 2300  g.M ^.SÐ. ^ .{#.
00000050: b5cc a05e 8f4b c120 6728 264d a06f 814e  µÌ ^.KÁ g(&M o.N
00000060: cecc a065 8b20 6681 4cd0 84a0 5d20 6581  ÎÌ e. f.LÐ. ] e.
00000070: 2066 814c a067 8025 3a26 206f b130        f.L g.%:& o±0

ลองออนไลน์!

การปรับตัวของการส่ง JavaScript ของฉันเต็มรูปแบบโปรแกรม

เทียบเท่า JavaScript

i=a.length
s=0
while(i--){
  j=10
  while(j--){
    (b=[...a]).splice(i,1,j)
    k=b=b.join('')
    while(b%--k);
    s+=i+j&&a[i]!=j&&k==1
  }
}
s

คำอธิบาย

aถูกเตรียมใช้งานโดยนัยเป็นบรรทัดแรกของอินพุตเป็นสตริงและคำสั่งสุดท้ายsคือเอาต์พุตโดยปริยายซึ่งมีผลรวมของการเปลี่ยนลำดับนายกรัฐมนตรี


1

Husk , 32 ไบต์

Lof§&ȯ=1Σzo±≠d⁰o=Ld⁰L↑o≤Ld⁰Lmdİp

ลองออนไลน์!

Ungolfed / คำอธิบาย

                              İp  -- get all primes
                            md    -- and convert them to list of digits
                     ↑o≤   L      -- take as long as the lenghth of these digit lists are ≤ ..
                        Ld⁰       -- .. the number of digits of input 
 of                               -- from those primes filter:
               o=Ld⁰L             --   same number of digits as input
   §&                             --   and
        Σz                        --   the number of..
          o±≠d⁰                   --   .. digits that differ from input digits ..
     ȯ=1                          --   .. must be one
L                                 -- finally count them


1

PHP , 151 147 141 140 136 134 129 128 ไบต์

-6 ไบต์ขอบคุณ @Einacio; -1 ไบต์ขอบคุณ @Titus

<?php for($i=$m=10**strlen($n=$argv[1]);$i-->$m/10;)if(levenshtein($n,$i)==$f=$t=1){while($t<$i)$f+=$i%$t++<1;$c+=$f==2;}echo$c;

ลองออนไลน์!

จัดรูปแบบด้วยความคิดเห็น:

<?php
// Work through each integer with the same number of digits as the input $argv[1].
for ($i = $m = 10 ** strlen($n = $argv[1]); $i-- > $m / 10;)
    // Is it exactly one digit different from the input?
    if (levenshtein($n, $i) == $f = $t = 1) {
        // Count its factors.
        while ($t < $i) $f += $i % $t++ < 1;
        // If there are exactly 2 factors then it's a prime, so increment the counter.
        $c += $f == 2;
    }
// Print the final count.
echo $c;

เพื่อให้สั้นที่สุดเท่าที่จะทำได้ฉันได้:

  • รวมที่ได้รับมอบหมาย $f = $t = 1 ;
  • สนุ๊กในการ++เพิ่มขึ้นซึ่งเป็นส่วนหนึ่งของการแสดงออกอื่น$f += $i % $t++ == 0(การเพิ่มขึ้นจะถูกดำเนินการหลังจากการดำเนินการโมดูลัสและดังนั้นจะไม่ส่งผลกระทบต่อผลของมัน);
  • และแทนที่จะใช้ifคำสั่งสำหรับการเพิ่มเงื่อนไขได้ใช้ความจริงที่ว่าบูลจริงเมื่อหล่อเป็นจำนวนเต็มจะกลายเป็น 1 โดยใช้มากกว่า$c += $f == 2;if ($f == 2) $c++;

1
คุณไม่จำเป็นต้องกำหนด $ c มันจะนับเป็น 0 ในเครื่องหมาย + = แรก
Einacio

@Einacio กฎกอล์ฟคืออะไร? นั่นคือสิ่งที่ได้รับอนุญาตหรือไม่เนื่องจากเป็นการแจ้งเตือนคำเตือนตัวแปรที่ไม่ได้กำหนดไว้?
WebSmithery

@Einacio เห็นได้ชัดว่าการส่งออกใด ๆ ไปยัง STDERR สามารถละเว้นดังนั้นขอขอบคุณสำหรับข้อเสนอแนะ
WebSmithery

1
+1 levenshteinสำหรับการใช้งานของ ความคิดดี! จะสั้นกว่า$i%$t++<1 $i%$t++==0
ติตัส


0

PHP, 100 + 1 ไบต์

for(;~($a=$argn)[$i];$i++)for($d=-!!$i;$d++<9;$c+=$k==1)for($a[$i]=$d,$k=$a;--$k&&$a%$k;);echo$c-$i;

เรียกใช้เป็นท่อด้วย -nRหรือลองออนไลน์

ทำให้พังถล่ม

for(;~($n=$argn)[$i];$i++)  # loop through argument digits, restore $n in every iteration
    for($d=-!!$i;               # loop $d from 0 (1 for first digit)
        $d++<9;                 # ... to 9
        $c+=$k==1                   # 3. if divisor is 1, increment counter
    )
        for($n[$i]=$d,              # 1. replace digit
            $k=$n;--$k&&$n%$k;      # 2. find largest divisor of $n smaller than $n
        );
echo$c-$i;                  # print counter - length

0

Java 8, 201 194 ไบต์

n->{String s=n+"";int r=0,i=0,j,k,t,u,l=s.length();for(;i<l;i++)for(j=0;++j<10;r+=n==u|t<2?0:1)for(u=t=new Integer(s.substring(0,i)+j+(i<l?s.substring(i+1):"")),k=2;k<t;t=t%k++<1?0:t);return r;}

คำอธิบาย:

ลองที่นี่

n->{                        // Method with integer as parameter and return-type
  String s=n+"";            //  String representation of the input-int
  int r=0,                  //  Result-integer
      i=0,j,k,              //  Index-integers
      t,u,                  //  Temp integers
      l=s.length();         //  Length of the String
  for(;i<l;i++)             //  Loop (1) from 0 to `l` (exclusive)
    for(j=0;++j<10;         //   Inner loop (2) from 1 to 10 (exclusive)
        r+=                 //     And after every iteration, raise the result by:
           n==u             //      If the current number equals the input
           |t<2?            //      or it is not a prime:
            0               //       Add nothing to the result-counter
           :                //      Else:
            1)              //       Raise the result-counter by one
      for(                  //    Inner loop (3)
          u=t=              //     First set both `u` and `t` to:
              new Integer(  //      Convert the following String to an integer: 
               s.substring(0,i)
                            //       Get the substring from 0 to `i` (exclusive)
               +j           //       + `j`
               +(i<l?       //       + If `i` is smaller than the String-length:
                  s.substring(i+1)
                            //          The substring from 0 to `i` (inclusive)
                 :          //         Else:
                  "")),     //          Nothing
          k=2;              //     And start `k` at 2
              k<t;          //     Continue looping as long as `k` is smaller than `t`
        t=t%k++<1?          //     If `t` is divisible by `k`:
           0                //      Change `t` to 0
          :                 //     Else:
           t                //      Leave `t` as is
      );                    //    End of inner loop (3)
                            //    (`t` remained the same after loop 3? -> It's a prime)
                            //   End of inner loop (2) (implicit / single-line body)
                            //  And of loop (1) (implicit / single-line body)
  return r;                 //  Return the result-counter
}                           // End of method

new Integer(s.substring(0,i)+j+(i<l?s.substring(i+1):"") จะทำให้จำนวนเต็มเหล่านี้:

สำหรับ0-9: 1, 2, 3, 4, 5, 6, 7, 8, 9.
สำหรับ10: 10, 20, 30, 40, 50, 60, 70, 80, 90, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19.
สำหรับ11: 11, 21, 31, 41, 51, 61, 71, 81, 91, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19.
เป็นต้น


0

JavaScript (ES7), 118 ไบต์

รับอินพุตเป็นสตริง

n=>[...2**29+'4'].map(d=>n.replace(/./g,c=>s+=d+i>0&(P=k=>N%--k?P(k):N-n&&k==1)(N=p+d+n.slice(++i),p+=c),i=p=0),s=0)|s

ลองออนไลน์!

แสดงความคิดเห็น

n =>                        // n = input number (as a string)
  [...2**29 + '4']          // generate "5368709124" (all decimal digits)
  .map(d =>                 // for each digit d in the above string:
    n.replace(/./g, c =>    //   for each digit c in n:
      s +=                  //     increment s if the following code yields 1:
        d + i > 0 & (       //       if this is not the first digit of n or d is not "0":
          P = k =>          //         P = recursive function taking k and using N:
            N % --k ?       //           decrement k; if k is not a divisor of N:
              P(k)          //             do recursive calls until it is
            :               //           else:
              N - n &&      //             return true if N is not equal to n
              k == 1        //             and k is equal to 1 (i.e. N is prime)
          )(                //         initial call to P ...
            N =             //           ... with N defined as:
              p +           //             the current prefix p
              d +           //             followed by d
              n.slice(++i), //             followed by the trailing digits
                            //             (and increment the pointer i)
            p += c          //           append c to p
          ),                //         end of initial call
          i = p = 0         //         start with i = p = 0
    ),                      //   end of replace()
    s = 0                   //   start with s = 0
  ) | s                     // end of map(); return s

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