İkili Kare Çapraz Sıra


20

İkili kare çapraz-dizi aşağıdaki gibi yapılmıştır:

  1. Pozitif doğal sayıların sırasını alın:
    1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 ...
  2. Her sayıyı ikiliye dönüştürün:

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

  3. Bunları birleştirin:

    11011100101110111100010011010101111001101111011111000010001 ...

  4. İle başlayarak , yukarıdaki dizinin elemanları ile soldan sağa, yukarıdan aşağıya doldurulmuş n=1artan yan uzunluğa nsahip kareler oluşturun :

    1
    1 0
    1 1
    100 
    1 0 1
    1 1 0
    1 1 1 1
    0 0 0 1
    0 0 1 1 
    0 1 0 1
    0 1 1 1 1
    0 0 1 1 0
    1 1 1 1 0
    1 1 1 1 1
    0 0 0 0 1
    ...

  5. Her karenin köşegenini (sol üstten sağa alt) alın:

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

  6. Ondalık biçime dönüştür (baştaki sıfırları yok sayarak):

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

Görev

Sıralamayı aşağıdaki yollardan biriyle çıkaran bir program veya işlev yazın:

  • Sekansı sonsuz şekilde döndürün veya yazdırın.
  • Girdi verildiğinde , dizinin iilk ielemanlarını iade edin veya yazdırın .
  • Girilen i, idizinin th öğesini (0 veya 1 dizinli) döndürün veya yazdırın .

Lütfen yanıtınızda hangi çıktı biçimini seçtiğinizi belirtin.

Bu , her dilde en kısa cevap kazanır.

Test senaryoları

İşte dizinin ilk 50 elemanı:

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

Yanıtlar:


10

Kabuk , 15 14 bayt

zȯḋm←CtNCİ□ṁḋN

Çevrimiçi deneyin!

Sonuçları sürekli olarak sonsuz bir liste olarak yazdırır.

açıklama

Bir listeden her n. Öğeyi almanın , listeyi n uzunluğundaki parçalara bölmekten ve her bir parçanın kafasını almaktan daha iyi bir yol olup olmadığını merak ediyorum .

      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.

Açık olmak gerekirse, bir nxn karesinin diyagonalini , doğrusal formunu n + 1 uzunluğundaki parçalara bölerek ve her bir parçanın ilk elemanını alarak:

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



4

05AB1E , 19 17 16 bayt

°LbJsLn£θs>ô€нJC

°ile değiştirilir 3molarak bağlantılarda °çok yavaş almak eğilimindedir.

Çevrimiçi deneyin! veya Test Paketi olarak

açıklama

°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

Eğer yerini alamaz 3mile n?
Outgolfer Erik

@EriktheOutgolfer: Evet yapabilirim, teşekkürler! Bunun işe yaramadığından oldukça emindim, ancak bu daha önceki bir çözümdeki karışıklıklardan kaynaklanmış olabilir. Aynı bayt sayısı °ancak çok daha hızlı: P
Emigna

1'den ^ ^ girişine kadar olan sayılar yeterli değildir . 1 python cevaplarında olduğu gibi ^ 3 girmek için yeterli gibi görünüyor.
17'de ovs

@ovs: Ah evet, bu yüzden daha önce kullanmadım. Bu sefer sadece ilk birkaç eşyayı kontrol ettim. Önceki çözüme döneceğim (neyse ki aynı bayt sayısında)
Emigna

3

Kabuk , 15 bayt

Bu, Martin'in cevabına biraz farklı bir yaklaşım gerektiriyor

moḋz!NCNCṘNNṁḋN

Çevrimiçi deneyin!

Açıklama:

              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

Eylemde

ṁḋ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 bayt

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

Çevrimiçi deneyin!




2

Jöle , 16 bayt

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

Çevrimiçi deneyin!

açıklama

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

Mathematica, 96 bayt

Çıkışlari dizisinin inci elemanının (1 endeksli)

Diagonal@Partition[TakeList[Flatten@IntegerDigits[Range[#^3],2],Range@#^2][[#]],#]~FromDigits~2&


Çevrimiçi deneyin!



1

Jöle , 18 bayt

Erik'in çözümüne kıyasla tamamen farklı bir yaklaşım .

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

Çevrimiçi deneyin!

Nasıl çalışır

Ḷ²S'ɓ * 3B € Fṫ - Yardımcı bağlantı (monadic).

Ḷ - Azalan aralık, [0, N) oluşturur.
 ² - Vectorized kare (her biri kare).
  S - Toplam.
   '- Jelly'in 1 endekslemesini hesaba katacak şekilde artırın.
     ɓ - Ayrı bir ikili zincir başlatır.
     * 3 - Gücün girişi 3.
       B € - Her birini ikili dosyaya dönüştürün.
         F - Düzleştir.
          ṫ - Kuyruk. X [y - 1:] döndürür (1 dizinli).

Çm'ḣµḄ - Ana bağlantı (monadik).

Ç - Monad olarak son bağlantı.
 m '- Modüler giriş + 1. Listenin her bir "giriş + 1" inci elemanını alın.
   ḣ - Kafa. Yukarıdaki öğeyi kırpılmış girişten daha yüksek dizinle döndürün.
    µḄ - İkili sayıdan tam sayıya dönüştürme.

Jonathan Allan sayesinde 1 bayt kurtarıldı !


Aşağıdakileri kaldırmak için bir ikili zincir kullanarak bir tane kaydedin ³:Ḷ²S‘ɓ*3B€Fṫ
Jonathan Allan

@JonathanAllan Elbette, teşekkürler! Bu numarayı gerçekten öğrenmeliyim
Bay Xcoder


0

Pyth ,  27  20 bayt

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

İlk birkaç test vakasını doğrulayın.

Alır I indeksli, 1 inci terimi.

Nasıl çalışır?

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