Plus Primes vs Minus Primes


35

พวกเราส่วนใหญ่รู้ว่า ...

ว่าช่วงเวลาทั้งหมดp>3อยู่ในรูปแบบ ป้อนคำอธิบายรูปภาพที่นี่

แต่Plus Primes ( 6n+1) จำนวนเท่าไหร่และMinus Primes ( 6n-1) จำนวนเท่าไหร่ในช่วงใดช่วงหนึ่ง

ความท้าทาย

ได้รับจำนวนเต็มk>5, นับจำนวนprimes<=kเป็นPlusPrimesและวิธีการหลายมีMinusPrimes

ตัวอย่าง

เพราะk=100เรามี
[5, 11, 17, 23, 29, 41, 47, 53, 59, 71, 83, 89] 12 MinusPrimes
และ
[7, 13, 19, 31, 37, 43, 61, 67, 73, 79, 97] 11 PlusPrimes

เพราะk=149เรามี
[5, 11, 17, 23, 29, 41, 47, 53, 59, 71, 83, 89, 101, 107, 113, 131, 137, 149]
18 MinusPrimes
และ
[7, 13, 19, 31, 37, 43, 61, 67, 73, 79, 97, 103, 109, 127, 139]
15 PlusPrimes

กฎระเบียบ

รหัสของคุณจะต้องออก2 จำนวนเต็ม : หนึ่งสำหรับMinusPrimesและหนึ่งสำหรับPlusPrimesในลำดับใด ๆ ที่คุณต้องการ (โปรดระบุที่ซึ่ง)
นี่คือ : คำตอบที่สั้นที่สุดในจำนวนไบต์ชนะ!

กรณีทดสอบ

อินพุท -> เอาท์พุต [ MinusPrimes , PlusPrimes ]

6->[1,0]  
7->[1,1]   
86->[11,10]  
986->[86,78]  
5252->[351,344]  
100000->[4806,4784]   
4000000->[141696, 141448]

45
ฉันไม่รู้! :(
Stewie Griffin

13
@StewieGriffin มันง่ายที่จะหยั่งรู้ถ้าคุณดูลำดับโมดูลัส: 0%6เป็นจำนวนเต็ม6, 1%6ไม่สามารถหาได้, 2%6คือผลคูณของ 2, 3%6เป็นผลคูณของ 3, 4%6เป็นผลคูณของ 2, และ5%6ไม่สามารถหาได้
zzzzBov

3
@zzzzBov ที่จะเป็นประโยชน์จริง ๆ ถ้าฉันรู้ว่าทำไมโมดูลัสมีลำดับและสิ่งที่มีความหมายสำหรับ primes ... ฉันหวังว่าโรงเรียนมัธยมสอนทฤษฎีจำนวน ...
Socratic Phoenix

@SocialPhoenix โมดูลัสหมายถึง "ส่วนที่เหลือหลังการหาร" 0, 6, 12, ฯลฯ ทั้งหมดผลิต 0 หลังจากการหารด้วย 6; 1, 7, 13 ผลิตผลทั้งหมด 1. เนื่องจากเรากำลังมองหาตัวเลขที่ไม่สามารถแบ่งออกเป็นปัจจัยได้รู้ว่าจำนวนหารด้วยจำนวนเต็มที่มากกว่า 1 บอกเราว่าตัวเลขไม่ได้เป็นนายก
zzzzBov

คำตอบ:




6

Python 2 , 77 ไบต์

-2 ไบต์ขอบคุณนีล

lambda x:[sum(all(n%j for j in range(2,n))for n in range(i,x,6))for i in 7,5]

ลองออนไลน์!

วิธีแก้ปัญหาก่อนหน้า83 81 79 ไบต์

-1 ไบต์ขอบคุณ Mr. Xcoder
-2 ไบต์ขอบคุณ Halvard Hummel

lambda x:map([all(n%i for i in range(2,n))*n%6for n in range(4,x)].count,[5,1])

ลองออนไลน์!
เอาต์พุตทั้งสองเป็น [MinusPrimes, PlusPrimes]





ฉันทำความเข้าใจกับอาร์เรย์ JavaScript มากเกินไป - ฉันลืมไปว่ารายการไพ ธ อนมักไม่จำเป็นต้อง[]ใช้
Neil

ดังนั้นคุณหาร n ด้วยตัวเลขทั้งหมดจาก i ถึง n-1 เพื่อดูว่ามันยอดเยี่ยมหรือไม่แล้วสร้างจำนวนเต็มทั้งหมด (5,11, ... ) และ (7,13, ... ) และทดสอบว่า หมายเลขที่มีปัญหาอยู่ที่นั่นและนับพวกเขา ดูเหมือนว่ามีประสิทธิภาพ ;)
Yakk


5

Mathematica, 51 ไบต์

(s=#;Mod[Prime~Array~PrimePi@s,6]~Count~#&/@{5,1})&

ลองออนไลน์!

@ngenisis ตีมันลงบันทึก 4 ไบต์

Mathematica, 47 ไบต์

sPrime~Array~PrimePi@s~Mod~6~Count~#&/@{5,1}

Modยังสามารถเป็นมัดและถ้าคุณกำลังจะตั้งชื่ออาร์กิวเมนต์แรกsเพียงแค่ใช้อาร์กิวเมนต์ที่มีชื่อ:sPrime~Array~PrimePi@s~Mod~6~Count~#&/@{5,1}
ngenisis

5

Japtap , 15 13 11 ไบต์

[+,-]เพื่อการส่งออกเป็น

õj ò6 yx ë4

ทดสอบมัน


คำอธิบาย

Uการป้อนข้อมูลโดยนัยของจำนวนเต็ม

õj

สร้างอาร์เรย์ของจำนวนเต็ม ( õ) จาก 1 ถึงUและตรวจสอบว่าแต่ละรายการเป็นจำนวนเฉพาะหรือไม่ ( j) ให้อาร์เรย์เป็นบูลีน

ò6

แบ่งพาร์ติชันออกเป็นอาร์เรย์ย่อยความยาว 6

yx

สลับ ( y) และรวมคอลัมน์

ë4

รับทุก ๆ องค์ประกอบที่ 4 ของอาเรย์และส่งออกโดยปริยาย


ดั้งเดิม, 19 17 16 15 ไบต์

õ fj
5â £è_%6¥X

ทดสอบมัน

  • 1 ไบต์ขอบคุณคำแนะนำที่ได้รับแรงบันดาลใจจากโอลิเวอร์ให้ใช้ตัวหาร 5 หลังจากที่ฉันพักในลอเรลของฉันโดยแบ่ง 15 เป็นอาร์เรย์


3

เรติน่า53 53ไบต์

.+
$*
1
$`1¶
G`1111
A`^(11+)\1+$
1{6}

*M`111
\b1\b

ลองออนไลน์! คำอธิบาย:

.+
$*

แปลงเป็นเอก

1
$`1¶

นับตั้งแต่วันที่ 1 nถึง

G`1111

ลบหมายเลขที่น้อยกว่า 4

A`^(11+)\1+$

ลบหมายเลขคอมโพสิต

1{6}

รับส่วนที่เหลือแบบโมดูโล 6

*M`111

พิมพ์จำนวนตัวเลขด้วยส่วนที่เหลือระหว่าง 3 ถึง 5

\b1\b

พิมพ์จำนวนตัวเลขด้วยส่วนที่เหลือ 1


3

ทับทิม61 61ไบต์

(52 ไบต์ +8 สำหรับการ-rprimesตั้งค่าสถานะ)

->n{[1,5].map{|x|(4..n).count{|i|i.prime?&&i%6==x}}}

ส่งคืนอาร์เรย์ของรูปแบบ [บวกจำนวนเฉพาะลบจำนวนครั้ง]

บันทึก 1 ไบต์ต้องขอบคุณ GB!

ลองออนไลน์


ฉันได้รับแรงบันดาลใจจากคำตอบและการปรับปรุงของฉัน (ใน Haskell)!
jferard

@ jferard ฉันดีใจมากที่ได้ยินเช่นนั้น! :)
Cristian Lupascu

คุณสามารถใช้countกับช่วงที่ไม่มีตัวดำเนินการเครื่องหมาย (บันทึก 1 ไบต์)
GB

3

Perl 6 , 42 ไบต์

บันทึก 1 ไบต์โดยลบพื้นที่ว่างเปล่า ...

บันทึก 2 ไบต์โดยจัด map ระเบียบการโทรใหม่ - ขอบคุณ @Joshua

ที่บันทึกไว้ 3 ไบต์เพราะ เท่ากับ.round .round: 1

อันที่จริงแล้วเลขชี้กำลังเชิงซ้อนนั้นค่อนข้างเท่ห์ แต่มีราคาแพงมาก บันทึก 10 ไบต์เพียงทิ้งไว้ ...

{[+] map {.is-prime*($_%6-1??i!!1)},5..$_}

ลองออนไลน์!

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

{[+] map {.is-prime*exp(π*($_%6-1)i/8).round},5..$_}

ลองออนไลน์!

(PlusPrimes) + (MinusPrimes)iการส่งออกเป็นจำนวนที่ซับซ้อน ฉันหวังว่ามันจะไม่ขัดกับกฎมากเกินไป


คำอธิบาย: เป็นฟังก์ชันที่รับอาร์กิวเมนต์จำนวนเต็มหนึ่งรายการ เราวนซ้ำจำนวนเต็มทั้งหมดตั้งแต่ 5 ถึงอาร์กิวเมนต์ ( (5..$_)) สำหรับแต่ละสิ่งเหล่านี้เราประเมิน.is-prime(สิ่งนี้เรียกว่า$_, อาร์กิวเมนต์ของบล็อกที่แมป), คูณมัน (ถ้าเป็นตัวเลขTrue == 1, False == 0) ด้วยเลขชี้กำลังเชิงซ้อนที่ทำให้เป็นexp(0) = 1(สำหรับ$_%6 = 1) หรือexp(iπ/2) = i(สำหรับ$_%6 = 5) และสุดท้ายปัดเศษเป็น จำนวนเต็มที่ใกล้ที่สุด ข้อสรุปพวกเขาด้วย[+]ให้ผล

ในที่สุด: มันมีประสิทธิภาพจริง ๆ ดังนั้นฉันไม่แน่ใจว่า TIO จะไม่หมดเวลาก่อนที่คุณจะได้รับผลลัพธ์ของคุณสำหรับตัวเลขที่สูงขึ้น (สำหรับ 1e5 ใช้เวลา 26 วินาทีในเครื่องของฉันและ TIO จะช้ากว่า)


ไม่เป็นไร. ดีมาก!

ฉันคิดว่าคุณหมายถึงในที่มีประสิทธิภาพ? วิธีการที่ดีแม้ว่า!
โจนาธานอัลลัน

นั่นเป็นความพยายามที่หยาบคายอย่างยิ่ง: —)
Ramillies

เมื่อตีกอล์ฟให้ใช้รูปแบบวิธีการmapหรือgrepบางครั้งอาจทำให้คุณเสียค่าใช้จ่ายเล็กน้อย สิ่งนี้ช่วยประหยัด 2 ตัวอักษร:{[+] map {.is-prime*exp(π*($_%6-1)i/8).round: 1},5..$_}
โจชัว

ลืมที่จะทำอย่างนั้นขอบคุณที่นำมันมาให้ฉัน!
Ramillies

2

ที่จริงแล้ว 21 ไบต์

u5x`p░⌠6@%1=;`╖*ƒ⌡Ml╜

ลองออนไลน์!

เอาต์พุต PlusPrimes ก่อนตามด้วย MinusPrimes

คำอธิบาย:

u5x`p░⌠6@%1=;`╖*ƒ⌡Ml╜
u5x                    range(5, n+1)
   `p░                 primes in range
      ⌠6@%1=;`╖*ƒ⌡M    for each prime:
       6@%               mod 6
          1=             equal to 1
            ;`╖*ƒ        execute ╖ if p%6==1 (add 1 to register 0, consuming p)
                   l   length of resulting list (MinusPrimes)
                    ╜  push value in register 0 (PlusPrimes)


2

MATLAB 2017a, 29 ไบต์

sum(mod(primes(k),6)'==[5,1])

คำอธิบาย: primes(k)รับค่าทั้งหมดถึงและรวม k mod(primes(k),6)'รับโมดูลัส 6 ของจำนวนเฉพาะทั้งหมดและสลับเพื่อให้ผลรวมทำงานตามมิติที่ถูกต้อง ==[5,1]ตั้งค่า fives ทั้งหมด (minusPrimes) เป็น 1 ในคอลัมน์แรกและทั้งหมด (plusPrimes) เป็น 1 ในคอลัมน์ที่สอง sum()สรุปจำนวนแต่ละคอลัมน์

ผลลัพธ์นี้ [minusPrime, plusPrime]


2

Japt , 18 16 ไบต์

-2 ไบต์ขอบคุณ @Oliver

õ_j ©Z%6
5â £è¥X

ลองออนไลน์!

[PlusPrimes, MinusPrimes]ขาออกในรูปแบบ


อืม ... ฉันเพิ่งกลับมาที่โต๊ะของฉันตีลูกกอล์ฟลงไปที่17 ไบต์แล้วเห็นว่าคุณโพสต์สิ่งนี้ ... ไม่รู้ว่าฉันควรโพสต์หรือไม่เพราะปมของโซลูชั่นทั้งสองของเรากำลังทำแผนที่อยู่[5,1]เพื่อรับการนับและคุณไปถึงที่นั่นก่อน
Shaggy

@Shaggy IMO โซลูชันของคุณมีความแตกต่างเพียงพอที่จะยังคงโพสต์แยกต่างหาก คุณใช้filter และสตริง ฉันใช้ฟังก์ชั่นการแมปõและอาเรย์ นอกจากนี้ฉันได้รับ[5,1]แนวคิดจากคำตอบอื่น
Justin Mariner

ฉันจะคิดว่ามันเล็กน้อย การแก้ปัญหาในภาษาต่าง ๆ โดยใช้วิธีการที่คล้ายกัน (แม้ว่าจะมี "การยืม" จากที่อื่น) ก็โอเค แต่การแก้ปัญหาสองอย่างในภาษาเดียวกันการทำเช่นนั้นไม่ได้นั่งกับฉันอย่างสมบูรณ์ ฉันได้แก้ไขในโพสต์ของฉันเป็นทางเลือกในตอนนี้
Shaggy

ฉันตัดสินใจที่จะวิ่งไปกับมันแล้วก็โกนหนวดอีกหนึ่งไบต์
Shaggy

คุณสามารถใช้เพื่อรับ[1,5]
โอลิเวอร์

2

C #, 202 179 174 Bytes

-23 ไบต์ขอบคุณ Mr. Xcoder

-5 ไบต์ขอบคุณ Cyoce

ฟังก์ชั่นที่ส่งกลับอาร์เรย์ของความยาว 2, ดำเนินการโดยการโทร[MinusPrimes, PlusPrimes] a(n)

int[]a(int n){int[]r={0,0};for(int i=5;i<=n;i++)if(i%2*b(i)>0)if(i%6<5)r[1]++;else++r[0];return r;}int b(int n){for(int i=3;i-2<Math.Sqrt(n);i+=2)if(n%i<1)return 0;return 1;}

รหัสที่จัดรูปแบบอย่างถูกต้องใน Try It Online: ที่นี่


คุณสามารถเพิ่มลิงค์ tio ได้ไหม?
Mr. Xcoder

ขออภัยที่ต้องเล่นกอล์ฟแบบไบต์ต่อไบต์ 194 ไบต์:public int[]a(int n){int[]r=new int[2];for(int i=5;i<=n;i++)if(i%2*b(i)>0)if(i%6<5)r[1]++;else++r[0];return r;}public int b(int n){for(int i=3;i<=Math.Sqrt(n)+1;i+=2)if(n%i<1)return 0;return 1;}
Mr. Xcoder

ไบต์ 193:public int[]a(int n){int[]r=new int[2];for(int i=5;i<=n;i++)if(i%2*b(i)>0)if(i%6<5)r[1]++;else++r[0];return r;}public int b(int n){for(int i=3;i-2<Math.Sqrt(n);i+=2)if(n%i<1)return 0;return 1;}
นาย Xcoder

lmao คุณกำลังรักสิ่งนี้คุณ;)
MysticVagabond

1
ขอบคุณสำหรับความช่วยเหลือทั้งหมดเนื่องจากคุณได้โพสต์คำตอบแยกต่างหากและระบุว่าเป็นกอล์ฟของฉันฉันแค่ปล่อยให้ฉันเป็นเหมือนเดิมและเข้าสู่บทเรียนต่อไปในการท้าทายครั้งต่อไป: P
MysticVagabond


1

Pyth , 15 ไบต์

/K%R6fP_TSQ5/K1

ชุดทดสอบ

Pyth , 16 ไบต์

m/%R6fP_TSQd,1 5

ชุดทดสอบ


อย่างไร?

คำอธิบาย # 1

/ K% R6fP_TSQ5 / K1 - โปรแกรมเต็มรูปแบบ

     fP_TSQ - กรองช่วงเวลาในช่วง [1 ... อินพุต]
  % R6 - Mod 6 ในแต่ละอัน
 K - มอบหมายให้ตัวแปร K
/ 5 - นับจำนวนการเกิด 5 ใน K
            / K1 - นับจำนวนการเกิด 1 ใน K
                - เอาท์พุทผลลัพธ์โดยปริยาย

คำอธิบาย # 2

m /% R6fP_TSQd, 1 5 - โปรแกรมเต็มรูปแบบ

     fP_TSQ - กรองช่วงเวลาในช่วง [1 ... อินพุต]
  % R6 - Mod 6 สำหรับแต่ละตัว
            , 1 5 - กดรายการ [1, 5]
m / d - นับจำนวนแต่ละอัน  
                 - เอาท์พุทผลลัพธ์โดยปริยาย 

ทางเลือก:

/ K% R6fP_TSQ5 / KhZ (16 ไบต์)
K% R6fP_TSQ / K5 / K1 (16 ไบต์)
m /% R6fP_TSQdj15T (16 ไบต์)
m /% R6fP_TSQd [1 5 (16 ไบต์)   
m /% R6fP_TSQdsM`15 (17 ไบต์)
m /% R6.MP_ZSQd, 1 5 (17 ไบต์)
m /% R6.MP_ZSQdj15T (17 ไบต์)
m /% R6.MP_ZSQd [1 5 (17 ไบต์)

2
ขอแสดงความยินดีกับ 10k !!
Luis Mendo

@LuisMendo ขอบคุณมาก :-)
Mr. Xcoder

1

เจลลี่ ,  12 11  10 ไบต์

ขอบคุณ@cairdcoinheringaahingสำหรับเคล็ดลับในการแชท ขอบคุณ@Dennisสำหรับการบันทึกหนึ่งไบต์ในการแชท

ÆR%6ċЀ1,5

ลองออนไลน์!

เยลลี่ 11 ไบต์

ÆR%6µ1,5=þS

ลองออนไลน์!

เยลลี่ 11 ไบต์

ÆR%6µċ5,ċ1$

ลองออนไลน์!


มันทำงานอย่างไร

คำอธิบาย # 1

ÆR%6ċЀ1,5   As usual, full program.

ÆR           Get all the primes in the range [2...input].
  %6         Modulo each by 6.
       1,5   The two-element list [1, 5].
    ċЀ      Count the occurrences of each of ^ in the prime range.

คำอธิบาย # 2

ÆR%6µ1,5=þS   As usual, full program.

ÆR            Get all the primes in the range [2...input].
  %6          Modulo each by 6.
    µ         Chain separator.
     1,5      The two-element list [1, 5].
        =     Equals?   
         þ    Outer product.     
          S   Sum.

คำอธิบาย # 3

ÆR%6µċ5,ċ1$   As usual, full program.

ÆR            All the primes in the range [2...input].
  %6          Modulo each by 6.
    µ     $   Some helpers for the chains.
       ,      Two element list.
     ċ5       The number of 5s.
        ċ1    The number of 1s.

1

Java 8, 141 140 138 106 101 100 96 94 81 ไบต์

n->{int r[]={0,0},c;for(;n-->4;r[n%6/4]+=c)for(c=n;c>1;c=c-1&~n%c>>-1);return r;}


[plusPrime, minusPrime]กลับจำนวนเต็มอาร์เรย์มีสองค่าในการสั่งซื้อตรงกันข้ามเมื่อเทียบกับคำอธิบายความท้าทาย:

พอร์ตของ@Xynos 'C # ตอบหลังจากฉันเล่นกอล์ฟ39 40 42 ไบต์
ความช่วยเหลืออย่างมากจาก@Nevayสำหรับอีกมหันต์ -55 ไบต์

คำอธิบาย:

ลองที่นี่ (กรณีทดสอบขั้นสุดท้ายที่4000000เกินกำหนดเวลา 60 วินาทีเล็กน้อย)

n->{                   // Method with integer parameter and integer-array return-type
  int r[]={0,0},       //  Return integer-array, starting at [0,0]
      c;               //  Temp integer
  for(;n-->4;          //  Loop (1) as long as the input is larger than 4
                       //  and decrease `n` by 1 before every iteration
      r[n%6/4]+=c)     //    After every iteration, increase the plus or minus prime by `c`
                       //    (where `c` is either 0 or 1)
    for(c=n;           //   Reset `c` to `n`
        c>1;           //   And inner loop (2) as long as `c` is larger than 1
      c=               //    Change `c` to:
        c-1&~n%c>>-1;  //     inverting the bits of `n`,                    [~n]
                       //     modulo-`c` that result,                       [%c]
                       //     then bit-shift right that by -1,              [>>-1]
                       //     and then bitwise-AND that result with `c-1`   [c-1&]
    );                 //   End of inner loop (2)
                       //  End of loop (1) (implicit / single-line body)
  return r;            //  Return result integer-array
}                      // End of method

1
106 ไบต์:n->{int r[]={0,0},i=4,j,c;for(;i++<n;){for(j=c=1;j*j<i;)c=i%(j+=2)<1?0:c;if(i%2*c>0)r[i%6%5]++;}return r;}
2560

1
101 ไบต์:n->{int r[]={0,0},i=4,j,c;for(;i++<n;r[i%6%5%2]-=-i%2*c>>-1)for(j=c=1;j*j<i;)c|=i%(j+=2)-1;return r;}
2560

1
96 ไบต์: n->{int r[]={0,0},i=4,j,c;for(;i++<n;r[i%6%5%2]+=i&c)for(j=c=1;j*j++<i;)c&=-i%++j>>-1;return r;}(-1 ต้องขอบคุณคุณj++,++j)
2560

1
94 ไบต์: n->{int r[]={0,0},i=4,j,c;for(;i++<n;r[i%6/4]+=i&c)for(j=c=1;j*j++<i;)c&=-i%++j>>-1;return r;}( [plusPrime, minusPrime])
Nevay

1
81 ไบต์:n->{int r[]={0,0},c;for(;n-->4;r[n%6/4]+=c)for(c=n;c>1;)c=c-1&~n%c>>-1;return r;}
2560

1

JavaScript (ES6), 83 82 80 68 66 ไบต์

กลับกลายเป็นวิธีการแก้ปัญหาอย่างเต็มที่ recursive เป็นมากสั้นกว่าการทำแผนที่อาร์เรย์!

[-,+]เพื่อการส่งออกเป็น เล่นลูกเต๋าชนิดหนึ่งกับข้อผิดพลาดมากเกินไปประมาณ 3490

f=(n,a=[0,0])=>n>4?f(n-1,a,(g=y=>n%--y?g(y):y<2)(n)&&++a[n%6%5]):a

ลองมัน

o.innerText=(

f=(n,a=[0,0])=>n>4?f(n-1,a,(g=y=>n%--y?g(y):y<2)(n)&&++a[n%6%5]):a

)(i.value=6);oninput=_=>o.innerText=i.value>5?f(+i.value):[0,0]
<input id=i min=6 type=number><pre id=o>


0

CJam , 19 ไบต์

ri){mp},6f%_5e=p1e=

โปรแกรมที่รับอินพุตจาก STDIN และเอาต์พุตทั้งสองหมายเลขคั่นด้วยบรรทัดใหม่ผ่าน STDOUT

ลองออนไลน์!

คำอธิบาย

ri){mp},6f%_5e=p1e=

ri                        Read integer k
  )                       Add 1
       ,                  Filter the (implicit) array [0 1 ... k] ...
   {mp}                   ... on the function "is prime"
         f                Map over the resulting array...
          %               ... the function "modulus" ...
        6                 ... with extra parameter 6
           _              Duplicate the resulting array
             e=           Count occurrences ...
            5             ... of number 5
               p          Print with newline
                 e=       Count occurrences ...
                1         ... of number 1. Implicitly display

0

หมายเลขR + , 66 60 58 40 ไบต์

-16 ไบต์ขอบคุณ Jarko Dubbeldam! ต่อมาฉันก็ตีกอล์ฟอีกสองไบต์

cat(table(numbers::Primes(4,scan())%%6))

พิมพ์PlusPrimes MinusPrimesไปยัง stdout; อ่านจาก stdin

tabletabulate การนับจำนวนของการเกิดขึ้นของค่าในเวกเตอร์อินพุตแต่ละค่าตามลำดับจากน้อยไปหามาก ดังนั้นเนื่องจากมีเพียงสองค่าคือ1และ5(mod 6) นี่คือฟังก์ชั่นที่เราต้องการพร้อมกับnumbers::Primesซึ่งจะคืนค่าช่วงเวลาทั้งหมด4และอินพุต

ลองออนไลน์!

ฐานR , 97 91 89 86 65 ไบต์

จำนวนไบต์ที่บันทึกโดย Jarko ที่นี่เช่นกัน

function(n)table((5:n)[sapply(5:n,function(x)all(x%%2:x^.5))]%%6)

สิ่งนี้เกือบจะเหมือนกันกับข้างต้นยกเว้นคำนวณจำนวนเฉพาะทั้งหมดในฐาน R แทนที่จะใช้แพคเกจและส่งคืนโดยฟังก์ชันเอาท์พุทแทนที่จะพิมพ์ออกมา คุณสามารถดูในผลลัพธ์ที่มันส่งกลับตารางที่มีชื่อ1และ5ด้วยการนับด้านล่าง

ลองออนไลน์!



(เดนนิสเพิ่มตัวเลขให้กับ TIO เพื่อให้ทำงานได้ในตอนนี้ :))
JAD


all(x%%2:x^.5>0)สิ่งใดที่ไม่ใช่ศูนย์มีความจริงอยู่แล้วดังนั้นall(x%%2:x^.5)ทำงานด้วย
JAD

@JarkoDubbeldam ดีมาก! ปรากฎว่ามีค่าทั้งหมดมากกว่าที่4เราสามารถกำจัดได้>4เนื่องจากเราจะไม่ได้2อยู่ในนั้นในฐานะนายกอีกต่อไปดังนั้นกอล์ฟนี้ถึง 40 ไบต์แทน
Giuseppe


0

JavaScript (SpiderMonkey) , 151 , 140 , 131 ไบต์

n=>[...Array(n+1).keys()].splice(5).filter(a=>!/^1?$|^(11+?)\1+$/.test("1".repeat(a))).reduce((r,a)=>(a%6<2?r[1]++:r[0]++,r),[0,0])

ลองออนไลน์!

ขอบคุณที่มีขนดกสำหรับความช่วยเหลือในการแก้ไขข้อบกพร่องและการเล่นกอล์ฟ

คำอธิบาย:

n=>                                                   // Create a lambda, taking n
    [...Array(n+1).keys()]                            // Create a list from 0 to n+1
        .splice(5)                                    // remove first five elements
        .filter(a=>                                   // filter the list to get primes
             !/^1?$|^(11+?)\1+$/.test("1".repeat(a))) // using the famous regex here: https://stackoverflow.com/questions/2795065/how-to-determine-if-a-number-is-a-prime-with-regex 
        .reduce((r,a)=>                               // reduce the list
           (a%6<2?r[1]++:r[0]++,r),                   // by counting plus primes
           [0,0])                                     // and minus primes

1
ผลตอบแทน17,15สำหรับ 149 (ควรเป็น18,15) คุณจำเป็นต้องเพิ่มขนาดของอาร์เรย์ของคุณโดยที่ 1: TIO อนึ่งนี่เป็นเพียง "วานิลลา" ES6 ไม่มีอะไรพิเศษสำหรับ SpiderMonkey ในนั้น นอกจากนี้คุณสามารถใช้ Stack Snippets สำหรับ JS แทน TIO และคุณมีช่องว่างมากมายที่คุณสามารถนำออกได้
ปุย

1
คู่ของการออมที่รวดเร็วสำหรับคุณอีกเพื่อให้ได้ลงไป131 ไบต์
Shaggy

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