İkili nybbles sayımı


19

Bu zorluk, terminalinize, pencerenize, tuvalinize veya ekranınıza sıfırdan 10'a kadar sayıları dahil etmektir. Çıkarılan her sayı 4 bit genişliğinde bir nybble olarak gösterilmelidir, bu nedenle sıfır olarak gösterilmelidir 0000.

Çıkarılan her sayıyı boşluk, virgül veya satır başı ile ayırabilirsiniz. En küçük çözüm kazanır, ancak sıralamanızda yinelenen sayılar olmadığı sürece sayılar istediğiniz sırada görüntülenebilir.

Düşük düzeyli ikili dillerdeki girişlerin virgül veya beyaz boşluklarla çıktı alınması mümkün değilse (virgül veya beyaz boşluk ayırıcıları hakkında endişelenmenize gerek yoktur (örneğin, standart çıktı yalnızca ikili ile sınırlıdır veya çözümünüz erken bir bilgisayar kiti içindir) sınırlı bir dijital ekrana sahip olan KIM-1 gibi ).


Evet, boşluklar, virgüller, virgül ve sonra boşluk veya seçtiğiniz dilde "\ r \ n" eşdeğeri.
Shaun Bebbers

Üzgünüz, 4 ayrı sıfır basamağı gibi görünüyor ve 4 bit genişliğinde bir ikili sayı değil.
Shaun Bebbers

Böyle bir cevap yazacağımdan gerçekten emin değilim, ancak gerekli olan 11 soruya ek olarak bazı ekstra nibble çıktısı almak iyi olur mu?
Arnauld

2
Okçu değil, salya değil.
17:02

Commodore 64 Programcıları başvuru kılavuzuna göre değil
Shaun Bebbers

Yanıtlar:



15

MATL , 6 bayt

0:10YB

Şurada deneyin: MATL Online'da

açıklama

0:10    % Create the array [0...10]
YB      % Convert this array to a binary string where each number is 
        % placed on a new row
        % Implicitly display the result

15

05AB1E , 9 8 bayt

T         # push 10
 4ã       # cartesian product repeat with 4
   R      # reverse list
    T>£   # take the first 11 elements of the list
      »   # join by newline and display

Çevrimiçi deneyin!


10
Bekle ... bir sayının rakamlarının Kartezyen çarpımı ? Bu sadece ...
ETHproductions

13

JavaScript, 46 bayt

for(i=15;i++<26;)alert(i.toString(2).slice(1))

Her bir sayıya 16 ekleyip ilk ikili rakamı dilimleyebileceğiniz zaman neden bir dolgu işlevi kullanıyorsunuz?


9

Japt , 7 bayt

GôA,_¤Å

Burada Japt'un diğer tüm golf dillerinden daha uzun olmaya mahkum olduğunu düşünüyordum ...

Çevrimiçi test edin!

açıklama

GôA,_¤Å  // Implicit: A = 10, G = 16
GôA      // Create the inclusive range [G...G+A].
    _    // Map each item Z to Z
     ¤   //   .toString(2)
      Å  //   .slice(1).
         // Implicit: output result of last expression

Normalde virgüller Japt'ta kaldırılabilir, ancak bu bir hata nedeniyle oradadır: _normalde anlamına gelir function(Z){Z, ancak bir nedenle derleyici A_anlamına gelir function(A,Z){Z.


Güzel. Ben takıldımAô_¤
Oliver


7

Bash + Unix yardımcı programları, 29 26 bayt

dc -e2o8927II^*8/p|fold -4

Çevrimiçi deneyin!

Bu, @ DigitalTrauma / @ Dennis'in çözümü ile aynı uzunluktadır, ancak tamamen farklı bir yöntem kullanır.

Çıktı:

1010
0010
0110
0001
1001
0101
0100
0111
0011
1000
0000

(Herhangi bir siparişe izin verilir.)


Saf Bash , 34 bayt

echo 0{0,1}{0,1}{0,1} 10{00,01,10}

Saf Bash sürümünü çevrimiçi deneyin!

Çıktı:

0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010

7

J, 6 bayt

#:i.11

6 bayta indirdiği için mil sayesinde!


#:i.11iyi çalışmalı
mil

Şimdi silinen bir yorumun cevabına göre bunun geçerli olduğundan emin değilim .
Adám

@ Adám Göremiyorum. Bunun neden boş olmadığını açıklayabilir misiniz?
Bloklar

Çünkü aralarında boşluk olan rakamlar olarak basan × 4 Boole dizisi oluşturur. Ancak yorum, ikili sayıların içinde boşluklara izin verilmediğini ima ediyor gibi görünüyor.
17'de

6

Jöle , 7 bayt

2Bṗ4ṫ6Y

Çevrimiçi deneyin!

(Sondaki nybble hatlarına izin verilirse 5 bayt, 2Bṗ4Y )

Nasıl?

Azalan sırada yazdırır.

2Bṗ4ṫ6Y - Main link, no arguments
2B      - 2 converted to binary -> [1,0]
  ṗ4    - Cartesian 4th power -> [[1,1,1,1], [1,1,1,0], ..., [0,0,0,0]]
                            i.e.  16       , 15         ..., 0
    ṫ6  - tail from 6th item  -> [[1,0,1,0], [1,0,0,1], ..., [0,0,0,0]]
                            i.e.  10       , 9        , ..., 0
      Y - join with line feeds
        - implicit print

Alternatif bir 7-Byter olup 2ṗ4Ịṫ6Y, [1,0]ile değiştirilmiştir [1,2]ve ( "önemsizdir" tek hücreli olan abs(z)<=1dönüştürme) 2ile s 0s.


6

Python 3.6, 36 35 bayt

i=11
while i:i-=1;print(f"{i:04b}")

@JonathanAllan sayesinde -1 bayt

Python 3.5 ve öncesi:

i=11
while i:i-=1;print("{:04b}".format(i))

Çevrimiçi deneyin!


1
i=11(yeni satır) while i:i-=1;print(f"{i:04b}"), 35.
Jonathan Allan


4

CJam , 12 bayt

B{G+2b1>}%N*

Çevrimiçi deneyin!

açıklama

Kartezyen iktidar yaklaşımı benim tercihim olurdu, ama zaten alındı.

Yani bu 0'dan 10'a kadar sayılar üretir ve her biri için 16 ekler ve ikiliye dönüştürür. 16 eklenmesi, gerekli önde gelen sıfırların, kaldırılan ekstra lider ile birlikte üretilmesini sağlar.

B             e# Push 11
 {      }%    e# Map over "11", implicitly converted to the array [0 1 ... 10]
  G+          e# Add 16. This makes sure there will be 5 binary digits: a leading 1
              e# which will have to be removed and the remaining, valid digits
    2b        e# Convert to array of binary digits
      1>      e# Remove first digit
          N*  e# Join by newlines. Implicitly converts arrays to strings


3

Jöle , 10, 9 , 8 bayt

⁴r26BḊ€Y

Çevrimiçi deneyin!

Ben jöle kadar iyi değilim, bu yüzden herhangi bir ipucuna açık olurum!

Bu Emigna'nın ilk algoritmasını kullanıyor


Dennis'e iki baytını tıraş ettiği için teşekkür ederim. : P

Açıklama:

      Ḋ€    # Return all but the first element of each item in the list:
⁴r26        #   [16, 17, 18, ... 26]
     B      #   Converted to binary
        Y   # And joined with newlines

Ḋ€bir bayt kaydeder.
Dennis

@Dennis Ah, bu mantıklı. Teşekkürler!
DJMcMayhem

⁴r27bir tane daha kaydeder.
Dennis


2

Jöle , 8 bayt

2Ḷṗ4ḣ11Y

Çevrimiçi deneyin!

Nasıl çalışır

2Ḷṗ4ḣ11Y  Main link.

2Ḷ        Unlength 2; yield [0, 1].
  ṗ4      Take the fourth Cartesian power.
    ḣ11   Head 11; discard all but the first eleven elements.
       Y  Join, separating by linefeeds.

2

RProgN, 15 Bayt

~16.aL1{2B26q}:

Bu, bir işlev eklemek için çok iyi bir değişiklikti pad. Tamamı ]L4\-'0'\m\., yarısından fazlası kod, ped etmektir.

@ETHProductions sayesinde 6 bayt kaydedildi , bu pad işlevi yarı yarıya azaltıldı .

Açıklaması

~16.aL1{2B26q}:
~               # Zero Space Segment
 16.            # The literal number 16
    aL          # The length of the Alphabet
      1         # The literal number 1
       {     }: # For each number between 16 and 26 inclusive
        2B      # Convert to base 2
          26q   # Get the characters between 2 and 6 inclusive.

Çevrimiçi deneyin!


length of the AlphabetBir bayt kaydetmenin güzel yolu ;-)
ETHproductions

2

Retina , 36 33 bayt


%%%%
+`(^|\b)%
0$%'¶$%`1
11!`\d+

Çevrimiçi deneyin!

açıklama


%%%%

Boş (var olmayan) girişi ile değiştirin %%%%.

+`(^|\b)%
0$%'¶$%`1

Bu aşamanın ilk çalıştırmada, bu maç olacak ^%ve esasen metni değiştirmek %%%%iki çizgi ile 0%%%ve 1%%%. Çıkış değişmeyi durdurana kadar sahne döngü yapacaktır. İkinci çalıştırmada, eşleşir \b%(rakamlar kelime karakterleri olarak sayıldığından %ve sayılmadığından) ve grupları çoğaltarak ve 0bir kopyaya ve 1diğerine ekleyerek değiştirir : 0%%%satırlar olur 00%%ve 01%%(ve1%%% ). Bu döngü aracılığıyla 16 bit dizginin tamamı üretilecek, hat besleme ayrılmış olacaktır.

11!`\d+

İlk 11 maç \d+(en az 1 basamaklı bir koşu) alınır. Eşleşmeler satır besleme ile ayrılmış bir listede çıkar.


Bu 0$%'¶$%1` çizgisinin nasıl çalıştığını anlamak istiyorum . Ne yapmak $%, `1, temsil?
Kritixi Lithos

@KritixiLithos Üzgünüm özellikleri açıklamamıştım, biraz kıvrımlı: P. $%`aynı hatta maçtan önceki her şeyi temsil eder ve aynı hatta maçtan sonraki her şeyi temsil eder $%'. gerçek bir satır beslemesidir. Yani, temel olarak değiştirme %bir satırdaki ilkiyle eşleşir ve yerini 0artı olduğu çizginin geri kalanı, yeni satır, bulunduğu satırın başlangıcı ve a ile değiştirir 1. Tabii ki, bulunduğu hattın başlangıcı ve sonu, maçın bir parçası olmadıkları için değiştirme ile dokunulmaz.
Business Cat

Bu yüzden çizginin kendisinden sonra bir kopyasını koymak yerine, çizginin sonunu, bir satırsonu ve çizginin başlangıcını ve çizgisinin başlangıcını arasında kalan çizginin başlangıcını eklemek.
Business Cat

Ah teşekkürler, bu yardımcı oldu :) (Şimdi Retina öğrenmeye çalışıyorum)
Kritixi Lithos

Bu durumda, G11`bunun yerine normal ifadenin son satırı olarak kullanabileceğinizi düşünüyorum
Kritixi Lithos

2

Yakut, 25 bayt

11.times{|n|puts"%04b"%n}

2

BF, 121101 bayt

,....>,.<...+.>.<-..+.-.>.<..+..>.<-.+.-..>.<.+.-.+.>.<-.+..-.>.<.+...>.<.-...>.<+.-..+.>.<.-.+.-.!0

Sondaki bir yeni satır gerektirir. Bu yorumlayıcıyla! sembol kullanır (bu yüzden yazan kutuyu işaretleyin !) (çevrimiçi deneyin!) .

Her operatör 4 bit olarak kabul edilirse potansiyel olarak 51 bayt


!Etkinleştirilen onay kutusu için belirtmeniz (veya ek olarak bir bayt eklemeniz) gerekir .
Conor O'Brien

Hata! Bu konuda yeniyim ve URL'de kodladığını düşündüm.
Belirtecek

2

C #, 96 bayt


golfed

()=>{for(int i=0;i++<11;)System.Console.WriteLine(System.Convert.ToString(i,2).PadLeft(4,'0'));}

Ungolfed

() => {
    for( int i = 0; i++ < 1; )
        System.Console.WriteLine( System.Convert.ToString( i, 2 ).PadLeft( 4, '0' ) );
}

Tam kod

using System;

namespace Namespace {
    class Program {
        static void Main( string[] args ) {
            m();

            Console.ReadLine();
        }

        static void m() {
            for( Int32 i = 0; i++ < 11; )
                Console.WriteLine(
                    Convert.ToString( i, 2 ). // Converts the number to binary code
                    PadLeft( 4, '0' ) );      // Fills the number with the missing '0's
        }
    }
}

Salıverme

  • v1.0 - 96 bytes- İlk çözüm.

Eklediğiniz yayın sürümünü beğendim - RC sürümlerini de içerecek misiniz? \ o /
Shaun Bebbers

1
Dürüst olacağım, bilmiyorum RC ... aracı Bu ben PPCG benim çözümleri yayınlamaya çalışan nasıl
auhmaan

RC, 'Sürüm Adayı' anlamına gelir - yani, küçük farklılıklar içeren birkaç sürüm gönderirsiniz ve RC numaranız tarafından en kararlı olanı görmek için beklersiniz. Dolayısıyla, sürüm A ve sürüm B'ye sahipseniz, v1.0-RCa ve v1.0-RCb veya başka bir şeye sahip olabilirsiniz.
Shaun Bebbers

1
Ah, bu. Başka yapmanız durumunda bırakılmasını , ben artırmak Sürüm Numarası derhal.
auhmaan

2

C 170 120 bytes

n,i,m,k[4]={0};f(){for(m=0;m<=10;m++){n=m;i=0;for(;n;i++){k[i]=n;n/=2;}for(i=4;i>0;i--)printf("%d",k[i-1]%2);puts("");}}

Ungolfed version:

void f()
{
    int n,i,m,k[4]={0};


   for(m=0;m<=10;m++)
   {
      n=m;
      i=0;

      for(;n;i++)
      {
         k[i]=n;
         n/=2;
      }  
      for(i=4;i>0;i--)
         printf("%d",k[i-1]%2);

      puts("");        
   }
}

Can definitely be shortened!?

@Ahemone Awesome idea, Thanks!

Should work now! Try it online!


the first for loop in your golfed version should go to 4 rather than 3, but that doesn't matter because the loop can be eliminated entirely and the second for loop can start from 0. You can also just use while(n), but compacting the while loop down into a for loop saves more again. n/=2 will also save you a byte over the shift. You're also missing a terminating } on the golfed version causing an error on compilation.
Ahemone

@Ahemone Fixed the } and improved the code, 50 bytes shorter based on your idea.
Abel Tom


2

R - 23

We can use intToBin function from the R.utils package:

R.utils::intToBin(0:10)

[1] "0000" "0001" "0010" "0011" "0100" "0101" "0110" "0111" "1000" "1001" "1010"

2

C, 75 68 69 bytes

Approach 1: 75 73 74 bytes

m;p(i){putchar(i?m&i?49:48:9);}r(){for(m=11;m--;p(4),p(2),p(1),p(0))p(8);}

Try it online!


Approach 2: 68 69 bytes

m,n,o;f(){for(m=11;m--;)for(n=m,o=5;o--;n*=2)putchar(o?n&8?49:48:9);}

Try it online!


Suggest m,n;f(o) instead of m,n,o;f()
ceilingcat

1

Python 2, 44 bytes

for x in range(11):print bin(x)[2:].zfill(4)

This uses the zfill function which works like rjust except it always padds with 0 so you don't waste bytes on an argument.


Wait what, this whole time I've been wasting bytes making my own padding function? (lambda k,l:' '*(len(k)-l)+k) Wow... +1 just because of this :D
HyperNeutrino



1

stacked, 30 bytes

11:>[2 baserep'0'4 pad out]map

Try it online!

11:> is a range from 0 to 10. The rest is rather self-explanatory.

Other solutions that I've found:

11:>[bits 4 dpad''join out]map
11:>[bits 4 dpad$tostrmap]map out
11~>15+[bits behead''join out]map
16 26|>[bits behead''join out]map

1

Ruby, 38 bytes

11.times{|i|puts i.to_s(2).rjust 4,?0}

-1 byte by getting rid of the parentheses: 11.times{|i|puts i.to_s(2).rjust 4,?0}
Conor O'Brien

1

BF, 134 bytes

I'm sure this can be shortened--it's pretty much my first BF golf.

++++++++++[>+>+>+++++>>>+++++>>>+++++>>>+++++[<<<]>>>-]>>+>[-->>+>]<<<[<<<]>>[>[>>-[<<+.->]<[>]>-[<<.>]<[>]>++>]<-[<<<-]++<<[<<<]>.>-]

Try it online! Assumes a tape infinite in both directions, like the interpreter at TIO uses. An interpreter where < at the left end of the tape is a no-op would save three bytes.

Explanation

More than half of the code (the first 77 bytes, to be precise) is spent initializing the tape. The steps go like this:

++++++++++
10|

[>+>+>+++++>>>+++++>>>+++++>>>+++++[<<<]>>>-]
 0|10|10|50| 0| 0|50| 0| 0|50| 0| 0|50|

>>+>[-->>+>]<<<[<<<]>>
 0|10|11|48| 0| 1|48| 0| 1|48| 0| 1|48| 0| 1|

The cells initialized to 1 store the bits of our number plus 1: 1 represents a zero bit and 2 represents a one bit.

The initialization phase ended with the pointer on the 11. Now we use this cell to run 11 iterations of our loop:

[>          Move to the first 48
 [>>-       While we're still on a 48, move 2 cells over and decrement
  [         The cell's value now equals the bit it represents; if it's not 0:
   <<+.-    Move to the 48, increment, output, and decrement again
   >        Move to the next cell, which holds a 0
  ]         Leave the loop
  <[>]>     Pointer shenanigans to get back on the cell representing the bit
  -         Decrement again: cell is 255 for a zero bit, 0 for a one bit
  [         If cell is not 0:
   <<.>     Move to the 48, output, and move to the 0 cell
  ]
  <[>]>++   Get back on the bit's cell; increment back to original value
  >         Move to the next 48
 ]          Loop exits once we've output all four bits
            Now we increment the binary number: a one bit turns into a zero bit and
            carries; a zero bit turns into a one bit and doesn't carry
 <-         Move back to the rightmost bit cell and decrement
 [          If it is not 0, it must represent a one
  <<<-      Leave it decremented, go to the next bit cell and decrement it too
 ]          Loop exits on a bit cell that represented a zero
 ++         Increment it twice (to represent a one)
 <<[<<<]    Move back to first cell on tape
 >.         Move to 10 cell and output (newline)
 >-         Move to loop counter cell and decrement
]
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.