Binary Square Sequence Sequence


20

ลำดับไบนารีสี่เหลี่ยมจัตุรัสเส้นทแยงมุมถูกสร้างขึ้นดังนี้

  1. ใช้ลำดับของจำนวนธรรมชาติเป็นบวก:
    1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, ...
  2. แปลงตัวเลขแต่ละตัวเป็นไบนารี:

    1, 10, 11, 100, 101, 110, 111, 1000, 1001, 1010, 1011, 1100, 1101, 1110, 1111, 10000, 10001, ...

  3. เรียงต่อกัน:

    11011100101110111100010011010101111001101111011111000010001 ...

  4. เริ่มต้นด้วยn=1สร้างสี่เหลี่ยมด้วยการเพิ่มความยาวด้านnซึ่งเติมจากซ้ายไปขวา, จากบนลงล่างด้วยองค์ประกอบของลำดับข้างต้น:

    1
    1 0
    1 1
    1 0 0 
    1 0 1
    1 1 0
    1 1 1 1
    0 0 0 1 1
    0 0 1 1 
    0 1 0 1
    0 1 1 1 1
    0 0 1 1 0
    1 1 1 1 0 0
    1 1 1 1 1 1
    0 0 0 0 1 1
    ...

  5. ใช้เส้นทแยงมุม (บนซ้ายไปขวาล่าง) ของแต่ละตาราง:

    1, 11, 100, 1011, 00111, ...

  6. แปลงเป็นทศนิยม (ไม่สนใจศูนย์นำหน้า):

    1, 3, 4, 11, 7, ...

งาน

เขียนโปรแกรมหรือฟังก์ชั่นที่แสดงลำดับในหนึ่งในวิธีต่อไปนี้:

  • ส่งคืนหรือพิมพ์ลำดับอย่างไม่มีที่สิ้นสุด
  • รับอินพุตiส่งคืนหรือพิมพ์iองค์ประกอบแรกของลำดับ
  • รับอินพุตiส่งคืนหรือพิมพ์iองค์ประกอบลำดับที่ของลำดับ (ทั้ง 0 หรือ 1 ดัชนี)

โปรดระบุคำตอบของคุณในรูปแบบเอาต์พุตที่คุณเลือก

นี่คือคำตอบที่สั้นที่สุดในแต่ละภาษาชนะ

กรณีทดสอบ

นี่คือองค์ประกอบ 50 ลำดับแรกของลำดับ:

1,3,4,11,7,29,56,141,343,853,321,3558,8176,3401,21845,17129,55518,134717,151988,998642,1478099,391518,7798320,8530050,21809025,61485963,66846232,54326455,221064493,256373253,547755170,4294967295,1875876391,2618012644,24710258456,6922045286,132952028155,217801183183,476428761596,51990767390,687373028085,1216614609441,7677215985062,15384530216172,22714614479340,15976997237789,0,256145539974868,532024704777005,601357273478135

คำตอบ:


10

Husk , 15 14 ไบต์

zȯḋm←CtNCİ□ṁḋN

ลองออนไลน์!

พิมพ์ผลลัพธ์อย่างต่อเนื่องเป็นรายการที่ไม่มีที่สิ้นสุด

คำอธิบาย

ฉันสงสัยว่ามีวิธีที่ดีกว่าในการรับทุกองค์ประกอบที่nจากรายการมากกว่าการแยกรายการเป็นกลุ่มความยาวnและดึงหัวของแต่ละอัน

      tN          Get a list of all natural numbers except 1. (A)

             N    Get a list of all natural numbers.
           ṁḋ     Convert each to its binary representation and join them 
                  all into a single list.
         İ□       Get a list of squares of all natural numbers.
        C         Cut the list of bits into chunks of corresponding sizes. (B)

zȯ                Zip (A) and (B) together with the following function.
     C            Split the bit list (from B) into chunks of the given length
                  (from A).
   m←             Get the head of each chunk. This is the diagonal of the
                  bit list arranged as a square.
  ḋ               Interpret the resulting bits as binary digits and return
                  the result.

เพื่อให้ชัดเจนเราแยกเส้นทแยงมุมของตารางnxnโดยแบ่งรูปแบบเชิงเส้นเป็นส่วนยาวn + 1และดึงองค์ประกอบแรกของแต่ละก้อน:

[[1 , 0 , 1 , 0
  0],[1 , 0 , 1
  1 , 0],[1 , 0
  0 , 1 , 0],[1]]



4

05AB1E , 19 17 16 ไบต์

°LbJsLn£θs>ô€нJC

°ถูกแทนที่ด้วย3mในลิงก์เนื่องจาก°มีแนวโน้มที่จะช้ามาก

ลองออนไลน์! หรือเป็นชุดทดสอบ

คำอธิบาย

°L                 # push the range [1 ... 10^input]
  bJ               # convert each to binary and join to string
    sLn            # push the range [1 ... input]^2
       £θ          # split the binary string into pieces of these sizes and take the last
         s>ô       # split this string into chunks of size (input+1)
            €н     # get the first digit in each chunk
              JC   # join to string and convert to int

คุณไม่สามารถแทนที่3mด้วยn?
Erik the Outgolfer

@EriktheOutgolfer: ใช่ฉันทำได้ขอบคุณ! ฉันค่อนข้างมั่นใจว่ามันใช้งานไม่ได้ แต่นั่นอาจเป็นเพราะปัญหาที่เกิดขึ้นก่อนหน้านี้ ไบต์เดียวกันนับเป็น°แต่เร็วกว่ามาก: P
Emigna

ตัวเลขจาก 1 เพื่อป้อน ^ 2 ที่มีไม่เพียงพอ 1 ถึงอินพุต ^ 3 เหมือนในคำตอบของงูหลามดูเหมือนจะเพียงพอแล้ว
ovs

@ovs: Ah ใช่นั่นคือเหตุผลที่ฉันไม่ได้ใช้ก่อนหน้านี้ ฉันตรวจสอบเฉพาะรายการแรกในเวลานี้เท่านั้น ฉันจะกลับไปใช้วิธีแก้ปัญหาก่อนหน้า (โชคดีที่จำนวนไบต์เดียวกัน)
Emigna

3

Huskขนาด 15 ไบต์

วิธีนี้แตกต่างจาก คำตอบของ Martin

moḋz!NCNCṘNNṁḋN

ลองออนไลน์!

คำอธิบาย:

              N   List of all natural numbers
            ṁḋ    Convert each to it's binary representation and flatten
         ṘNN      Repeat the list of natural numbers according the natural numbers:
                  [1,2,2,3,3,3,4,4,4,4,5,5,5,5,5...]
        C         Cut the list of bits into lists of lengths corresponding to the above
      CN          Cut that list into lists of lengths corresponding to the natural numbers
moḋz!N            For each in the list, get the diagonals and convert from binary.
m                   For each list in the list
   z!N              Zip it with natural numbers, indexing.
 oḋ                 Convert to binary

ในการปฏิบัติ

ṁḋN : [1,1,0,1,1,1,0,0,1,0,1,1,1,0,1,1,1,1,0,0,0,1,0,0,1,1,0,1,0,1...]

ṘNN : [1,2,2,3,3,3,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,7,7,7,7,7,7,7,8,8...]

C : [[1],[1,0],[1,1],[1,0,0],[1,0,1],[1,1,0],[1,1,1,1],[0,0,0,1]...]

CN : [[[1]],[[1,0],[1,1]],[[1,0,0],[1,0,1],[1,1,0]]...]

m z!N : [[1],[1,1],[1,0,0],[1,0,1,1],[0,0,1,1,1],[0,1,1,1,0,1]...]

oḋ : [1,3,4,11,7,29,56,141,343,853,321,3558,8176,3401,21845...]


3

Java (OpenJDK 8) , 215 212 206 202 197 ไบต์

i->{String b="",t;int s=0,x=++i,j;for(;--x>0;s+=x*x);while(b.length()<s)b+=i.toString(++x,2);for(j=1,s=0;j<i;System.out.println(i.valueOf(t,2)),s+=j*j++)for(t="",x=s;x<s+j*j;x+=j+1)t+=b.charAt(x);}

ลองออนไลน์!




2

วุ้นขนาด 16 ไบต์

RBFṁ
R²SÇṫ²C$m‘Ḅ

ลองออนไลน์!

คำอธิบาย

RBFṁ  Helper link. Input: integer k
R     Range, [1, 2, ..., k]
 B    Convert each to a list of its binary digits
  F   Flatten
   ṁ  Mold to length k

R²SÇṫ²C$m‘Ḅ  Main link. Input: integer n
R            Range, [1, 2, ..., n]
 ²           Square each
  S          Sum
   Ç         Call helper link on the sum of the first n squares
       $     Monadic chain
     ²         Square n
      C        Complement, 1-n^2
    ṫ        Tail, take the last n^2 elements
        m    Modular indexing, take each
         ‘   (n+1)th element
          Ḅ  Convert from list of binary digits to decimal



1

เยลลี่ขนาด 18 ไบต์

แนวทางที่แตกต่างโดยสิ้นเชิงเมื่อเทียบกับวิธีการแก้ปัญหาของเอริค

Ḷ²S‘ɓ*3B€Fṫ
Çm‘ḣµḄ

ลองออนไลน์!

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

Ḷ²S'ɓ * 3B €Fṫ - ลิงก์ผู้ช่วยเหลือ (monadic)

Ḷ - ช่วงที่ลดลงสร้าง [0, N)
 ² - ตาราง Vectorized (แต่ละตาราง)
  S - ผลรวม
   '- เพิ่มขึ้นสำหรับบัญชีสำหรับการจัดทำดัชนี 1 ของวุ้น
     ɓ - เริ่มสายโซ่ dyadic แยกจากกัน
     * 3 - อินพุตเข้าสู่กำลังของ 3
       B € - แปลงเป็นไบนารี
         F - แบน
          ṫ - หาง ส่งคืน x [y - 1:] (มีดัชนี 1 ดัชนี)

Çm'ḣµḄ - ลิงก์หลัก (monadic)

Ç - ลิงก์สุดท้ายเป็น monad
 m '- อินพุตแบบแยกส่วน + 1 รับองค์ประกอบ "อินพุท + 1" ลำดับที่ของแต่ละรายการ
   ḣ - หัวหน้า ส่งคืนองค์ประกอบด้านบนที่ดัชนีสูงกว่าอินพุตที่ครอบตัด
    µḄ - แปลงจากเลขฐานสองเป็นจำนวนเต็ม

บันทึก 1 ไบต์ขอบคุณJonathan Allan !


ประหยัดหนึ่งโดยใช้ห่วงโซ่ย้อมเพื่อลบ³:Ḷ²S‘ɓ*3B€Fṫ
โจนาธานอัลลัน

@ JonathanAllan แน่นอนขอบคุณ! ฉันควรเรียนรู้เคล็ดลับนั้นจริง ๆ
Mr. Xcoder


0

Pyth ,  27  20 ไบต์

i<%hQ>s.BS^Q3s^R2QQ2

ตรวจสอบกรณีทดสอบสองสามข้อแรก

รับเทอมI th ของลำดับ, 1 ดัชนี

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

i<%hQ>s.BS^Q3s^R2QQ2   - Full program. Q represents the input.

         S^Q3          - Generate the (inclusive) range [1, Q ^ 3].
       .B              - Convert each to binary.
      s                - Join into a single string.
     >                 - Trim all the elements at indexes smaller than:
               ^R2Q      - The elements of the range [0, Q) squared.
              s          - And summed.
  %hQ                  - Get each Q + 1 element of the list above.
 <                     - Trim all the elements at indexes higher than:
                   Q   - The input.
i                   2  - Convert from binary to integer.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.