Arasındaki oranlarla çift hanelerin döngüsel sırası


13

Aşağıdaki sırayı düşünün:

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, ...

Çift rakamlar 0'dan başlar ve artan uzunluktaki çalışmalarda gruplanır. Bunlar döngüsel olarak düzenlenir, yani 8'e ulaşılana kadar artan sırada sıralanırlar ve daha sonra 0'dan geri çevrilirler . 1 , çift haneli sayıları ayırır ve diziyi de başlatır. Bu dizinin nasıl oluştuğunu görelim:

                 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      ...

Kabul Edilebilir Giriş ve Çıkış yöntemleri:

  • Bir tamsayıdır al N giriş ve çıkış olarak N bu dizinin inci terimi.

  • Bir tamsayıdır al N giriş ve çıkış ilk olarak K Bu dizinin koşulları.

  • Diziyi süresiz olarak yazdırın.

İlk iki yöntem için 0 veya 1 indekslemeyi seçebilirsiniz.

Standart giriş ve çıkış yöntemlerini kullanarak herhangi bir programlama dilinde rekabet edebilirsiniz . Standart boşluklar yasaktır. Bu , bu yüzden her dilde en kısa kod kazanır.


Yanıtlar:



7

Jöle , 10 bayt

5ḶḤṁR€1pFḣ

Dizinin ilk n öğesini döndürür .

Çevrimiçi deneyin!

Nasıl çalışır

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... Bu sadece değil Doublemi?
Bay Xcoder

4
Bu sadece bir anımsatıcı. Holduğu halve yüzden olduğunu unhalve . ÆAolduğu arkkosinüs yüzden ÆẠolduğunu unarccosine .
Dennis

6

Kabuk , 12 11 10 bayt

ṁ:1CN¢mDŀ5

Çevrimiçi deneyin!

Diziyi süresiz olarak yazdırır.

Alternatif:

J1CΘN¢mDŀ5

Çevrimiçi deneyin!

açıklama

        ŀ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.

Alternatif çözüm için:

     ¢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.

Biz de yapabiliriz ...ΘCN..., çünkü Θtamsayılar listeleri için sıfır ve listelerin listeleri için boş bir liste prepends "Başa eklenen varsayılan elemanı", yok.




2

APL, 25 bayt

N. Terimi döndürür.

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

açıklama

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 bayt

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

Çevrimiçi deneyin!

Bu tradfn (olup Çevirmen itional f unctio n ) bir bağımsız değişken almak kve birinci geri dönen kdizisinin ürün.

@GalenIvanov'a fonksiyondaki bir hatayı işaret ettiği için teşekkür ederiz. @ Adám'a 3 bayt için teşekkürler.

Nasıl çalışır:

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.

Aşağıda olan Dfn( d irect f unctio n ) ve aynı zamanda bir sorun, her iki nazik @ ADAM tarafından sunulan çözüm bir zımni işlevi.


Ben zımni vesrionun açıklamasıyla ilgileniyorum. Teşekkürler!
Galen Ivanov

@ GalenIvanov Bugün bir tane daha ekleyeceğim.
J. Sallé

3 fonksiyonun yanlış cevaplar verdiğini fark ettim - alt diziler her zaman 1'den sonra 0'dan başlar - bir önceki alt dizinin son çift basamağından devam etmeleri gerekir.
Galen Ivanov

@GalenIvanov Haklısın. Bunu düzeltebilir miyim ve bugün açıklamaları ekleyebilir miyim.
J. Sallé

1

JavaScript (ES6), 62 54 52 bayt

0 dizinli dizinin N. Terimini döndürür .

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

gösteri


1

C (gcc), 84 bayt

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

Çevrimiçi deneyin!

f()Diziyi boşluklarla ayırarak sonsuz olarak basan bir işlev ( ).

i geçerli çift çalışma uzunluğudur.

j geçerli çift çalışmadaki dizin

(2*j+++i*i-i)%10 i ve j (ve j artışları) verildiğinde ((j + Tr (i))% 5) * 2'ye eşit doğru çift sayısını verir, burada Tr (x) x'inci üçgen sayıdır (çift sayıdır) geçerli çalıştırmadan önce yazdırılmış sayılar;



1

Java 8, 96 bayt

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;}

Her sayı yeni bir satıra süresiz olarak yazdırılır.

Açıklama:

Burada deneyin.

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

Toplu, 85 bayt

@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

Dizinin N. Terimini çıktılar. Bir sonraki üçgen sayıyı hesaplayarak çalışır.



1

J , 46 42 40 bayt

Cole sayesinde -6 bayt

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

Bu dizinin ilk N terimini verir.

Nasıl çalışır:

10|[:+:i. - 0 2 4 6 8 0 2 4 uzunluk N listesi oluşturur. Sadece 0'dan başlayan tamsayılar listesinin iki katına çıkmış öğelerinin mod 10'unu alır.

[:;[:#:&.>2^i. - yukarıdaki listeyi kesmek için bir bit maskesi oluşturur.

(1 başlangıç ​​anlamına gelir): 1 1 0 1 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 0 0 ... Ardışık negatif olmayan tam sayıların gücüne 2 bulur, bunları ikilik biçime dönüştürür, listeler ve yalnızca ilk N öğeyi alır, böylece her iki listenin uzunluğu da aynı olur.

;@(1,&.><;.1) - çift sayıların listesini sıfırlar ve sıfırlar haritasına göre alt listeye böler (keser), alt listeyi 1'e ekler ve sonuçta ortaya çıkan listeyi düzleştirir

]{. - Eklenen 1'ler nedeniyle listedeki ek numaralardan kurtulmak için yalnızca ilk N öğeyi alır.

Çevrimiçi deneyin!


1
42 bayt: {.({.[:;[:#:&.>2^i.);@(1,&.><;.1)(10|2*i.). Yaptığım değişiklikler, çatalların nasıl çalıştığından yararlanmak için kancaları kullanmak ve çatalın sağ çatalını yeniden düzenlemekti. 2^i.Hile hoşuma gidiyor . Şimdi çatalın sol çatalında çalışmaya çalışıyorum.
cole

@cole Teşekkürler, çatalları daha iyi kullanmayı öğrenmem gerekiyor. Görünüşe göre çatal 2 * i. başlıklı kancadan daha iyidir [: +: i.
Galen Ivanov

1
Ayrıca parenleri doğru çatal üzerine bırakabilirsiniz (10|2*i.)->10|2*i.
cole

1

Ortak Lisp, 74 bayt

(do((b 1(1+ b))(k -2))(())(print 1)(dotimes(m b)(print(mod(incf k 2)10))))

Çevrimiçi deneyin!

Diziyi süresiz olarak yazdırır.








0

JavaScript, 45 bayt

1 endeksli:

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

0 endeksli:

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



Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.