ลำดับวงจรของตัวเลขหลักพร้อมอัตราต่อรองระหว่าง


13

พิจารณาลำดับต่อไปนี้:

1, 0, 1, 2, 4, 1, 6, 8, 0, 1, 2, 4, 6, 8, 1, 0, 2, 4, 6, 8, 1, 0, 2, 4, 6, 8, 0, 1, ...

เลขคู่เริ่มต้นจาก0และจัดกลุ่มเป็นความยาวที่เพิ่มขึ้น พวกเขาจะจัดวนหมายความว่าพวกเขาจะถูกจัดเรียงในลำดับจนถึง8ถึงแล้วขี่จักรยานกลับมาจาก0 1แยกการวิ่งของเลขคู่และมันก็เริ่มต้นลำดับ มาดูกันว่าลำดับนี้เกิดขึ้นได้อย่างไร:

                 1, 0, 1, 2, 4, 1, 6, 8, 0, 1, 2, 4, 6, 8, 1, 0, 2, 4, 6, 8, 1,  ...

                    -     ----     -------     ----------     -------------
run length:         1      2          3            4                5            ...
position of 1:   X     X        X           X              X                 X   ...
even sequence:      0,    2, 4,    6, 8, 0,    2, 4, 6, 8,    0, 2, 4, 6, 8      ...

วิธีการอินพุตและเอาต์พุตที่ยอมรับได้:

  • รับจำนวนเต็มNเป็นอินพุทและเอาท์พุทคำที่Nของลำดับนี้

  • รับค่าNจำนวนเต็มเป็นอินพุตและเอาต์พุตเงื่อนไขNแรกของลำดับนี้

  • พิมพ์ลำดับไปเรื่อย ๆ

คุณสามารถเลือก 0 หรือ 1 การจัดทำดัชนีสำหรับสองวิธีแรก

คุณสามารถแข่งขันในภาษาการเขียนโปรแกรมใด ๆในขณะที่ใช้วิธีการอินพุตและเอาต์พุตมาตรฐาน ช่องโหว่มาตรฐานเป็นสิ่งต้องห้าม นี่คือดังนั้นรหัสที่สั้นที่สุดในแต่ละภาษาจะชนะ


ความท้าทายนี้ได้รับการทดลองใช้ผลิตภัณฑ์
Mr. Xcoder

คำตอบ:


8

Haskell , 50 46 ไบต์

1#cycle[0,2..8]
n#r=1:take n r++(n+1)#drop n r

ลองออนไลน์!

1#cycle[0,2..8] ส่งคืนลำดับเป็นรายการที่ไม่มีที่สิ้นสุด

-4 ไบต์ขอบคุณØrjan Johansen!


1
คุณสามารถบันทึกสี่ไบต์โดยสร้างอาร์กิวเมนต์แรกของ#ตัวเลข ลองออนไลน์!
Ørjan Johansen

7

เยลลี่ 10 ไบต์

5ḶḤṁR€1pFḣ

ส่งคืนnรายการแรกของลำดับ

ลองออนไลน์!

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

5ḶḤṁR€1pFḣ  Main libk. Argument: n

5           Set the return value to 5.
 Ḷ          Unlength; yield [0, 1, 2, 3, 4].
  Ḥ         Unhalve; yield [0, 2, 4, 6, 8].
    R€      Range each; yield [[1], [1, 2], [1, 2, 3], ..., [1, ..., n]].
   ṁ        Mold; in the result to the left, replace [1] with [0], [1, 2] with
            [2, 4], [1, 2, 3] with [6, 8, 0], and so forth.
      1p    Take the Cartesian product of [1] and the result.
        F   Flatten the result.
         ḣ  Head; take the first n items of the result.

2
ಠ_ಠ Unhalve... ไม่เพียงแค่นั้นDoubleเหรอ?
Mr. Xcoder

4
มันเป็นเพียงตัวช่วยจำ Hเป็นครึ่งเพื่อให้เป็นunhalve ÆAเป็นarccosineเพื่อÆẠเป็นunarccosine
เดนนิส

6

Husk , 12 11 10 ไบต์

ṁ:1CN¢mDŀ5

ลองออนไลน์!

พิมพ์ลำดับไปเรื่อย ๆ

อีกวิธีหนึ่งคือ:

J1CΘN¢mDŀ5

ลองออนไลน์!

คำอธิบาย

        ŀ5   Start from [0, 1, 2, 3, 4]
      mD     Double each value to get [0, 2, 4, 6, 8]
     ¢       Repeat this list indefinitely, [0, 2, 4, 6, 8, 0, 2, ...]
   CN        Cut it into chunks of increasing lengths, 
             [[0], [2, 4], [6, 8, 0], ...]
ṁ:1          Prepend 1 to each sublist and concate the resulting lists.

สำหรับทางเลือกอื่น:

     ¢mDŀ5   Again, get [0, 2, 4, 6, 8, 0, 2, ...].
  CΘN        This time we prepend a zero to the natural numbers, which
             prepends an empty list to the resulting chunks.
J1           Join all the sublists with 1.

นอกจากนี้เรายังสามารถทำได้...ΘCN...เพราะΘ"เสริมองค์ประกอบเริ่มต้น" ซึ่งจะเติมศูนย์สำหรับรายการจำนวนเต็มและรายการว่างสำหรับรายการของรายการ




2

APL, 25 ไบต์

ส่งคืนคำที่ n

1,(⌽n↑⌽(+/⍳n←⎕)⍴0,2×⍳4),1

คำอธิบาย

n←⎕     Prompts for screen input of integer
+/⍳      Creates a vector of integers of 1 to n and sums
⍴0,2×⍳4  Creates a vector by replicating 0 2 4 6 8 to the length of sum
⌽n↑⌽   Rotates the vector, selects first n elements and rotates result
        (selects last n elements}    
1,...,1 Concatenates 1s in front and behind result

2

APL (Dyalog Unicode) , 52 59 56 ไบต์

rc k
r←~n0
:For j :In k
n+←j-1
r,←1,⍨jn0,2×⍳4
:End
rkr

ลองออนไลน์!

นี่คือ tradfn ( ตราด itional unctio n ) การหนึ่งโต้แย้งkและกลับมาเป็นครั้งแรกที่kรายการของลำดับ

ขอบคุณ @GalenIvanov ที่ชี้ให้เห็นข้อผิดพลาดในฟังก์ชั่น ขอบคุณ @ Adámเป็นเวลา 3 ไบต์

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

rc k              The function c takes the argument k and results in r
r n1 0            Initializing the variables r and n, and setting them to 1 and 0, respectively.
:For j :In k      For loop. k yields [1, 2, 3, ..., k], and j is the control variable.
n+←j-1             Accumulates j-1 into n, so it follows the progression (0, 1, 3, 6, 10, 15...)
r,←1,⍨jn0,2×⍳4   This line is explained below.
:End               Ends the loop
rkr              return the first k items of r.
                    actually reshapes the vector r to the shape of k;
                   since k is a scalar,  reshapes r to a vector with k items.
            2×⍳4   APL is 1-indexed by default, so this yields the vector 2 4 6 8
          0,       Prepend a 0 to it. We now have 0 2 4 6 8
        n         Rotate the vector n times to the left.
      j           Reshape it to have j items, which cycles the vector.
   1,⍨             Append a 1, then
r,←                Append everything to r.

ด้านล่างนี้เป็นDfn( d irect unctio n ) และฟังก์ชั่นโดยปริยายที่ยังแก้ปัญหาความท้าทายทั้งให้ความกรุณาโดยอดัม @


ฉันสนใจคำอธิบายของ tacit vesrion ขอบคุณ!
Galen Ivanov

@GalenIvanov ฉันจะเพิ่มในภายหลังวันนี้
J. Sallé

ฉันสังเกตเห็นว่าทั้ง 3 ฟังก์ชั่นให้คำตอบที่ไม่ถูกต้อง - ลำดับเริ่มต้นจาก 0 หลัง 1 - พวกเขาควรดำเนินการต่อจากหลักสุดท้ายแม้กระทั่งของลำดับก่อนหน้านี้
Galen Ivanov

@GalenIvanov คุณพูดถูก ฉันจะดูว่าฉันสามารถแก้ไขได้และเพิ่มคำอธิบายวันนี้
J. Sallé

1

JavaScript (ES6), 62 54 52 ไบต์

ส่งคืนคำที่Nลำดับของลำดับ 0 ที่จัดทำดัชนี

n=>(g=e=>n--?g(e+=k++<l?2:k=!++l):k<l?e%10:1)(k=l=0)

การสาธิต


1

C (gcc), 84 ไบต์

i;j;f(){for(i=1;;i++){printf("%d ",1);for(j=0;j<i;)printf("%d ",(2*j+++i*i-i)%10);}}

ลองออนไลน์!

ฟังก์ชั่น ( f()) ที่พิมพ์ลำดับอย่างไม่ จำกัด คั่นด้วยช่องว่าง

i คือความยาวของการวิ่งปัจจุบัน

j เป็นดัชนีในการวิ่งปัจจุบัน

(2*j+++i*i-i)%10 ให้เลขคู่ที่ถูกต้องให้ i และ j (และเพิ่มขึ้น j) เทียบเท่ากับ ((j + Tr (i))% 5) * 2 โดยที่ Tr (x) คือหมายเลขสามเหลี่ยม xth (ซึ่งเป็นจำนวนคู่ ตัวเลขที่พิมพ์ก่อนที่กระแสจะไหล



1

Java 8, 96 ไบต์

v->{for(int i=0,j=-2,k;;i++,System.out.println(1))for(k=0;k++<i;System.out.println(j%=10))j+=2;}

พิมพ์ไม่ จำกัด จำนวนแต่ละบรรทัดในบรรทัดใหม่

คำอธิบาย:

ลองที่นี่

v->{                               // Method with empty unused parameter and no return-type
  for(int i=0,                     //  Index integer, starting at 1
          j=-2,                    //  Even index integer, starting at -2
          k;                       //  Inner index integer
      ;                            //  Loop (1) indefinitely
                                   //    After every iteration:
       i++,                        //     Increase index `i` by 1
       System.out.println(1))      //     And print a 1
    for(k=0;                       //   Reset index `k` to 0
        k++<i;                     //   Inner loop (2) from 0 to `i`
                                   //     After every iteration:
       System.out.println(j%=10))  //      Set `j` to `j` modulo-10, and print it
      j+=2;                        //    Increase `j` by 2
                                   //   End of inner loop (2) (implicit / single-line body)
                                   //  End of loop (1) (implicit / single-line body)
}                                  // End of method

1

แบตช์ 85 ไบต์

@set/an=%2+1,t=n*-~n/2
@if %t% lss %1 %0 %1 %n%
@cmd/cset/a(%1-n)%%5*2*!!(t-=%1)+!t

ส่งออกคำ Nth ของลำดับ ทำงานโดยการคำนวณตัวเลขสามเหลี่ยมถัดไป



1

J , 46 42 40 ไบต์

-6 ไบต์ขอบคุณโคล

{.({.[:;[:#:&.>2^i.);@(1,&.><;.1)10|2*i.

เอาต์พุตเงื่อนไข N แรกของลำดับนี้

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

10|[:+:i. - สร้างรายการความยาว N ของ 0 2 4 6 8 0 2 4 ... มันใช้เวลา mod 10 ในรายการที่เป็นสองเท่าของรายการจำนวนเต็มเริ่มต้นที่ 0

[:;[:#:&.>2^i. - สร้าง bit mask สำหรับตัดรายการด้านบน

(1 หมายถึงเริ่มต้น): 1 1 0 1 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 ... มันพบว่า 2 กำลังของจำนวนเต็มไม่เป็นลบติดกัน, แปลงมันเป็นเลขฐานสอง, ทำให้แบนราบ list และรับเฉพาะ N รายการแรกเท่านั้นดังนั้นความยาวของทั้งสองรายการจะเท่ากัน

;@(1,&.><;.1) - แยก (ตัด) รายการของเลขคู่ลงในรายการย่อยตามแผนที่ของวัตถุและเลขศูนย์ผนวกรายการย่อยไปที่ 1 และท้ายที่สุดทำให้รายการที่เกิดขึ้นแบนราบ

]{. - ใช้เวลาเพียง N รายการแรกเท่านั้นกำจัดตัวเลขเพิ่มเติมในรายการเนื่องจาก 1s เพิ่ม

ลองออนไลน์!


1
42 {.({.[:;[:#:&.>2^i.);@(1,&.><;.1)(10|2*i.)ไบต์: การเปลี่ยนแปลงที่ฉันทำคือการใช้ hooks และ refactor ซี่ที่ถูกต้องของส้อมเพื่อใช้ประโยชน์จากวิธีส้อมทำงาน ฉันชอบ2^i.เคล็ดลับ ฉันกำลังพยายามที่จะทำงานด้านซ้ายของซี่ส้อมตอนนี้
โคล

@ โคลขอบคุณฉันต้องเรียนรู้ที่จะใช้ส้อมดีกว่า เห็นได้ชัดว่าส้อม 2 * i ดีกว่าเบ็ดที่ต่อยอด [: +: i
Galen Ivanov

1
คุณสามารถวาง parens ทางขวา(10|2*i.)->10|2*i.
โคล




0

โปรตอนขนาด 55 ไบต์

i=0 j=-2while1{for k:0..i print(j=(j+2)%10)print(1)i++}

ลองออนไลน์!

พิมพ์ลำดับไปเรื่อย ๆ


ಠ_ಠไวยากรณ์ใหม่นั้นคืออะไร : p i=0 j=-2while1{...
Mr. Xcoder

@ Mr.Xcoder: P -2whileก็เหมือนกับ Python และwhile1เป็นเพราะฉันทำให้ตัวระบุไม่สามารถเป็นคำหลักตามด้วยตัวเลขได้
HyperNeutrino




0

JavaScript ขนาด 45 ไบต์

1 การจัดทำดัชนี:

f=(x,t=0,p=0)=>p<x?f(x-1,t+1,p+t):x-p?x%5*2:1

0 จัดทำดัชนีแล้ว:

g=(x,p=0)=>p<x?g(x-1,p?++t+p:t=1):x-p?x%5*2:1



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