ลำดับรูปสี่เหลี่ยมขนมเปียกปูน


11

ลองนึกภาพแจกแจงองค์ประกอบของรูปสี่เหลี่ยมขนมเปียกปูนที่เติบโต[1],[1,3,1],[1,3,5,3,1],…(เฉพาะตัวเลขคี่เช่นที่พวกเขาจัดอย่างสวยงาม) สิ่งนี้จะมีลักษณะดังนี้โปรดทราบว่าคุณจะเริ่มแจกแจงด้วยเสมอ1:

                   01
       1        02 03 04
 1   2 3 4   05 06 07 08 09          …
       5        10 11 12
                   13
(1) (1,3,1)    (1,3,5,3,1)    (1,3,5,7,5,3,1)   …

ตอนนี้ถ้าคุณเริ่มต้นข้อสรุปคอลัมน์ ( [1],[2],[1,3,5],[4],[5],[2,6,10],…) คุณจะได้รับลำดับรูปสี่เหลี่ยมขนมเปียกปูน นี่คือองค์ประกอบ 100 ลำดับแรกของลำดับที่กล่าวถึง:

1,2,9,4,5,18,35,24,9,10,33,60,91,70,45,16,17,54,95,140,189,154,115,72,25,26,81,140,203,270,341,288,231,170,105,36,37,114,195,280,369,462,559,484,405,322,235,144,49,50,153,260,371,486,605,728,855,754,649,540,427,310,189,64,65,198,335,476,621,770,923,1080,1241,1110,975,836,693,546,395,240,81,82,249,420,595,774,957,1144,1335,1530,1729,1564,1395,1222,1045,864,679,490,297,100

IO

คุณสามารถเลือกหนึ่งในสามวิธีการอินพุต / เอาท์พุต (คุณไม่จำเป็นต้องจัดการอินพุตที่ไม่ถูกต้อง):

  • รับจำนวนเต็มnเอาท์พุทองค์ประกอบที่nในลำดับนั้น (0- หรือดัชนี 1 ตัวเลือกของคุณ)
  • ได้รับจำนวนเต็มnผลผลิตแรกnองค์ประกอบของลำดับที่
  • พิมพ์ / ส่งคืนลำดับอย่างไม่มีกำหนด

Testcases

โปรดอ้างอิง 100 คำแรกข้างต้นนี่คือตัวอย่างที่มีขนาดใหญ่กว่า (ดัชนี 1 ดัชนี):

101 -> 101
443 -> 1329
1000 -> 49000    
1984 -> 164672
2017 -> 34289
2018 -> 30270
3000 -> 153000

คำตอบ:


3

Snowman , 72 ไบต์

((}1vn2nD#`nPnCdU!*2nM1`nR:#nSNaB#`nS2nMNdE;aM|#NdE2nP+#`nSNdE`|aA#nM*))

นี้เป็นงานย่อยที่จะเข้า 1 การจัดทำดัชนีผลผลิตและผลตอบแทนที่สอดคล้องกันผ่านทาง +permavar

ลองออนไลน์!

((        // begin subroutine
 }        // we'll only need 3 variables - b, e, g
 1vn2nD   // b = 0.5
 #`       // retrieve input and swap, now b = input and e = 0.5
 nP       // power, resulting in b=sqrt(input)
 nC       // ceiling - this gives the index i of the rhombus we want
 dU!*     // keep a copy of i in the permavar ! for later use
 2nM1`nR  // generate the range [1, 2i)
 :        // map the following block over the range...
  #nS     // subtract i, resulting in e.g. [-3 -2 -1 0 1 2 3] for i=4
  NaB     // absolute value - [3 2 1 0 1 2 3]
  #`nS    // subtract from i, giving [1 2 3 4 3 2 1]
  2nMNdE  // double and decrement, [1 3 5 7 5 3 1]
 ;aM      // map
 |        // shove the rhombus columns into g
 #NdE2nP  // b = (i-2)^2
 +#`      // move b into e and replace it with the original input
 nSNdE    // subtract the two and decrement, giving input-(i-2)^2-1
 `|aA     // this is the index into the rhombus columns that we want
 #nM*     // multiply by the original input and return
))

สิ่งนี้ใช้อัลกอริธึมแบบเดียวกับคำตอบของ Mr. Xcoder - ความแตกต่างเพียงอย่างเดียวคือที่นี่เราสร้างคอลัมน์ของรูปสี่เหลี่ยมขนมเปียกปูนที่เราต้องการซึ่งก็คือ ceil (sqrt (n)) ลำดับที่หนึ่ง เพื่อแสดงให้เห็นว่าทำไมงานนี้ต่อไปนี้เป็นปัจจัยการผลิตที่สอดคล้องกับรูปสี่เหลี่ยมขนมเปียกปูนแต่ละ:

rhombus #   inputs
1           1
2           2 3 4
3           5 6 7 8 9
4           10 11 12 13 14 15 16
...

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


2

เยลลี่ 10 ไบต์

Ḥ€€’ŒBFị@×

ลองออนไลน์!

ลิงก์โปรแกรม / monadic เต็มรูปแบบส่งคืนคำศัพท์N th (ดัชนี 1 รายการ)

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

อย่างไร?

Ḥ€€ 'ŒBFị @ × ~ โปรแกรมเต็ม ฉันจะเรียกอินพุต N

  € ~ สำหรับแต่ละจำนวนเต็ม X ในช่วง [1, N]
Ḥ€ ~ เพิ่มจำนวนเต็มสองเท่าในช่วง [1, X]
   '~ Decrement (ลบ 1)
    ŒB ~ Bounce (องค์ประกอบฉลาด) ทำให้เป็นก้อนแต่ละ
      F ~ แผ่
       ị @ ~ รับองค์ประกอบที่ดัชนี N ในรายการของเรา
         × ~ ทวีคูณโดย N


2

JavaScript (ES7), 42 41 ไบต์

บันทึกแล้ว 1 ไบต์ขอบคุณ @ovs

0 การจัดทำดัชนี นิพจน์ปิดรูปแบบมาจากA004737

n=>((k=n**.5|0)-Math.abs(n+k*~k))*2*++n+n

กรณีทดสอบ


2

Befunge, 62 60 ไบต์

&:1>:00p:*`|
00:-\*:g00:<>2-\-0v!`\g
*.@v+1<g00:<^*2g00_2*1+

ลองออนไลน์!

คำอธิบาย

ซอร์สโค้ดที่มีไฮไลต์พา ธ การเรียกใช้งาน

* * * *เราเริ่มต้นด้วยการอ่านหมายเลของค์ประกอบตาม, n , จาก stdin และบันทึกซ้ำ
* * * *จากนั้นเราก็ตรวจสอบว่ารูปสี่เหลี่ยมขนมเปียกปูนเราอยู่ในโดยนับเป็นจำนวนเต็มRr*r >= nจนกว่า
* * * *คอลัมน์ชดเชยจากทางด้านขวามือของรูปสี่เหลี่ยมขนมเปียกปูน, r*r - nเป็น จะได้รับการชดเชยที่สะท้อนให้เห็นถึงรอบแกนศูนย์เราตรวจสอบว่า
* * * * และถ้าเป็นแล้วสะท้อนให้เห็นถึงจะกลายเป็น เมื่อเราได้สะท้อนให้เห็นถึงผลรวมของคอลัมน์เป็นเพียงc >= r
* * * *r*2 - 2 - c
* * * *(c*2 + 1) * n



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