JavaScript (ES6), 123 118 115 111 104 96 ไบต์
บันทึกแล้ว 4 ไบต์ขอบคุณ @Arnauld
G=n=>n?G(n>>1,++a[n%2]):a.some(n=>(P=x=>n%--x?P(x):x)(n)-1)
F=n=>F(n-1,G(n,a=[0,0,n])||alert(n))
การรวมกันของสามฟังก์ชั่นวนซ้ำโดยทั่วไป แจ้งเตือนลำดับในลำดับย้อนกลับและยุติข้อผิดพลาด "การเรียกซ้ำมากเกินไป"
ตัวอย่างการทดสอบ
(แก้ไขเพื่อส่งออกไปยังหน้า)
alert = s => O.textContent += s + "\n"
G=n=>n?G(n>>1,++a[n%2]):a.some(n=>(P=x=>n%--x?P(x):x)(n)-1)
F=n=>F(n-1,G(n,a=[0,0,n])||alert(n))
F(1000)
<pre id=O></pre>
ฟังก์ชั่นหลักสามารถส่งกลับอาร์เรย์สำหรับ 104 ไบต์:
G=n=>n?G(n>>1,++a[n%2]):a.some(n=>(P=x=>n%--x?P(x):x)(n)-1)
F=n=>n?F(n-1).concat(G(n,a=[0,0,n])?[]:n):[]
นอกจากนี้ยังสามารถเรียกใช้ซ้ำได้โดยเสียค่าใช้จ่ายของไบต์อื่น:
G=n=>n?G(n>>1,++a[n%2]):a.some(n=>(P=x=>n%--x?P(x):x)(n)-1)
n=>[for(_ of Array(n))if(!G(--n,a=[0,0,n]))n]
นี่คือสิ่งที่ฉันเริ่มด้วย: (บันทึก 6 ไบต์ขอบคุณ @Arnauld)
P=(n,x=n)=>n>1&--x<2||n%x&&P(n,x)
G=n=>n?G(n>>1,o+=n%2,t++):P(o)&P(t-o)
F=n=>n?F(n-1).concat(P(n)&G(n,o=t=0)?n:[]):[]
ฉันลองเล่นกอล์ฟต่อไปและจัดการให้เสร็จใน 104 ไบต์ - จากนั้นฉันก็รู้ว่าฉันพบวิธีแก้ปัญหานั้นแล้ว (อยู่ที่ด้านล่างของคำตอบ) คุณไม่เกลียดเมื่อมันเกิดขึ้นเหรอ? : P
ความพยายามแบบไม่เรียกซ้ำที่ฟังก์ชันหลัก (อีกครั้งจำนวนไบต์เดียวกัน):
n=>[for(i of Array(n))if(P(--n)&G(n,o=t=0))n]
อันนี้ใช้เส้นทางที่ง่ายในการนับจำนวน 0 และ 1 ในการแทนเลขฐานสอง:
F=n=>n?F(n-1).concat([n,(G=x=>n.toString(2).split(x).length-1)(0),G(1)].some(n=>(P=x=>n%--x?P(x):x)(n)-1)?[]:n):[]
สิ่งเดียวกันกับอาร์เรย์ความเข้าใจ:
n=>[for(_ of Array(n))if(![--n,(G=x=>n.toString(2).split(x).length-1)(0),G(1)].some(n=>(P=x=>n%--x?P(x):x)(n)-1))n]
เส้นทางนี้ใช้เส้นทางที่ยากกว่าเล็กน้อยในการทำสิ่งเดียวกัน:
F=n=>n?F(n-1).concat([n,(G=(x,w=n)=>w&&G(x,w>>1)+(w%2==x))(0),G(1)].some(n=>(P=x=>n%--x?P(x):x)(n)-1)?[]:n):[]
และเส้นทางนี้ใช้เส้นทางอื่นที่เกี่ยวข้องซึ่งสั้นเท่ากับต้นฉบับ:
F=n=>n?F(n-1).concat([n,o=(G=x=>x&&x%2+G(n>>++t))(n,t=0),t-o].some(n=>(P=x=>n%--x?P(x):x)(n)-1)?[]:n):[]
อีกครั้งคุณสามารถเล่นกอล์ฟ 8 ไบท์โดยแจ้งเตือนให้ทราบถึงลำดับที่กลับกัน:
F=n=>F(n-1,[n,o=(G=x=>x&&x%2+G(n>>++t))(n,t=0),t-o].some(n=>(P=x=>n%--x?P(x):x)(n)-1)||alert(n))