การนับในไบนารี nybbles


19

ความท้าทายนี้คือการส่งออกไปยังอาคาร, หน้าต่าง, ผ้าใบหรือหน้าจอตัวเลขรวมถึง 10 แต่ละตัวเลขที่ส่งออกจะต้องแสดงเป็น nybble ที่มีความกว้าง 4 บิตดังนั้นศูนย์จะต้องแสดงเป็น0000เป็นต้น

คุณสามารถแยกแต่ละหมายเลขที่ส่งออกด้วยช่องว่างเครื่องหมายจุลภาคหรือการขึ้นบรรทัดใหม่ ทางออกที่เล็กที่สุดชนะ แต่ตัวเลขสามารถแสดงในลำดับใดก็ได้ที่คุณต้องการตราบใดที่ไม่มีหมายเลขซ้ำในลำดับของคุณ

รายการในภาษาไบนารีระดับต่ำไม่จำเป็นต้องกังวลเกี่ยวกับตัวคั่นช่องว่างหรือเครื่องหมายจุลภาคถ้ามันเป็นไปไม่ได้ที่จะส่งออกด้วยเครื่องหมายจุลภาคหรือช่องว่างสีขาว (เช่นเอาท์พุทมาตรฐานถูก จำกัด ไว้ที่ไบนารีเท่านั้นหรือโซลูชั่นของคุณ เช่นKIM-1ซึ่งมีจอแสดงผลดิจิตอล จำกัด )


ใช่ช่องว่างเครื่องหมายจุลภาคเครื่องหมายจุลภาคและช่องว่างหรือ "\ r \ n" เทียบเท่าในภาษาที่คุณเลือก
Shaun Bebbers

ขอโทษด้วยที่ดูเหมือนว่าเป็นศูนย์ 4 หลักและไม่ใช่เลขฐานสองแบบกว้าง 4 บิต
Shaun Bebbers

ไม่ใช่ว่าฉันแน่ใจว่าจะเขียนคำตอบเช่นนี้จริง ๆ แต่มันจะโอเคที่จะส่งสัญญาณพิเศษเพิ่มเติมจาก 11 รายการที่จำเป็นหรือไม่
Arnauld

2
พวกเขากำลังตอดปากต่อปาก
0WJYxW9FMN

ไม่เป็นไปตามคู่มืออ้างอิงของ Commodore 64 โปรแกรมเมอร์
Shaun Bebbers

คำตอบ:



15

MATL , 6 ไบต์

0:10YB

ลองใช้ที่MATL Online

คำอธิบาย

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 ไบต์

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

ลองออนไลน์!


10
รอสักครู่ ... ผลิตภัณฑ์คาร์ทีเซียนของตัวเลขของตัวเลขหรือไม่ นั่นเป็นเพียง ...
ETHproductions

13

JavaScript ขนาด 46 ไบต์

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

ทำไมต้องใช้ฟังก์ชั่นการเติมเมื่อคุณสามารถเพิ่ม 16 ลงในแต่ละหมายเลขแล้วตัดเลขฐานสองแรก


9

Japtap , 7 ไบต์

GôA,_¤Å

และที่นี่ฉันคิดว่า Japtive จะต้องนานกว่าภาษากอล์ฟอื่น ๆ ...

ทดสอบออนไลน์!

คำอธิบาย

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

จุลภาคปกติสามารถลบออกได้ใน Japt แต่คนนี้เป็นเพราะมีข้อผิดพลาด: _ปกติหมายถึงfunction(Z){Zแต่ด้วยเหตุผลบางคอมไพเลอร์คิดว่าหมายถึงA_function(A,Z){Z


ทำได้ดีนี่. ฉันติดอยู่ที่Aô_¤
โอลิเวอร์


7

ยูทิลิตีBash + Unix ขนาด29 26 ไบต์

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

ลองออนไลน์!

นี่คือความยาวเท่ากันกับโซลูชันของ @ DigitalTrauma / @ Dennis แต่ใช้วิธีการที่แตกต่างอย่างสิ้นเชิง

ผลลัพธ์คือ:

1010
0010
0110
0001
1001
0101
0100
0111
0011
1000
0000

(คำสั่งใดก็ได้ที่ได้รับอนุญาต)


Pure Bashขนาด 34 ไบต์

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

ลองใช้เวอร์ชั่นทุบตีออนไลน์!

ผลลัพธ์คือ:

0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010

7

J, 6 ไบต์

#:i.11

ขอบคุณไมล์ที่ลดลงเหลือ 6 ไบต์!


#:i.11ควรจะทำงานได้เป็นอย่างดี
ไมล์

ฉันไม่แน่ใจว่านี้ถูกต้องตามคำตอบที่จะแสดงความคิดเห็นที่ถูกลบในขณะนี้
Adám

@ Adam ฉันไม่สามารถดูได้ คุณช่วยอธิบายหน่อยได้ไหมว่าทำไมมันถึงไม่เป็นประโยชน์
บล็อก

เพราะมันสร้างอาร์เรย์แบบบูล× 4 ซึ่งพิมพ์เป็นตัวเลขพร้อมช่องว่าง แต่ความคิดเห็นดูเหมือนจะบอกเป็นนัยว่าช่องว่างไม่ได้รับอนุญาตภายในเลขฐานสอง
Adám

6

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

2Bṗ4ṫ6Y

ลองออนไลน์!

(5 ไบต์ถ้าอนุญาตให้ลากเส้น nybbles ได้2Bṗ4Y)

อย่างไร?

พิมพ์ตามลำดับจากมากไปน้อย

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

ทางเลือก 7-byter คือ2ṗ4Ịṫ6Y, [1,0]จะถูกแทนที่ด้วย[1,2]และคือ "ไม่สำคัญ" monad ( abs(z)<=1), การแปลง2s เป็น0s


6

Python 3.6, 36 35 bytes

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

-1 ไบต์ขอบคุณ @JonathanAllan

Python 3.5 และรุ่นก่อนหน้า:

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

ลองออนไลน์!


1
i=11(ขึ้นบรรทัดใหม่) while i:i-=1;print(f"{i:04b}")สำหรับอายุ 35.
Jonathan Allan


4

CJam , 12 ไบต์

B{G+2b1>}%N*

ลองออนไลน์!

คำอธิบาย

วิธีการใช้พลังงานแบบคาร์ทีเซียนจะเป็นทางเลือกของฉัน แต่ถูกใช้ไปแล้ว

นี่จะสร้างตัวเลขจาก 0 ถึง 10 และสำหรับแต่ละอันจะเพิ่ม 16 และแปลงเป็นเลขฐานสอง การเพิ่ม 16 ทำให้แน่ใจว่าเลขศูนย์นำที่ต้องการถูกสร้างขึ้นพร้อมกับส่วนนำพิเศษที่ถูกลบออก

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

เยลลี่ , 10, 9 , 8 ไบต์

⁴r26BḊ€Y

ลองออนไลน์!

ฉันไม่ค่อยเก่งเท่าเยลลี่ดังนั้นฉันจะเปิดรับเคล็ดลับใด ๆ !

สิ่งนี้ใช้อัลกอริทึมแรกของ Emigna


ขอบคุณเดนนิสที่โกนหนวดสองไบต์ทำให้ฉันผูกคำตอบของเขาเอง : P

คำอธิบาย:

      Ḋ€    # 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

Ḋ€บันทึกเป็นไบต์
เดนนิส

@Dennis Ah ที่เหมาะสม ขอบคุณ!
DJMcMayhem

⁴r27บันทึกอีกอันหนึ่ง
เดนนิส

3

Python 2 , 38 36 ไบต์

n=16;exec"print bin(n)[3:];n+=1;"*11

ขอบคุณ @DJMcMayhem สำหรับการเล่นกอล์ฟ 2 ไบท์!

ลองออนไลน์!


for n in range(11):print bin(n+16)[3:]ยังที่ 38 ไบต์
ETHproductions

n=16;exec"print bin(n)[3:];n+=1;"*11สั้นกว่าสองรายการ
DJMcMayhem

@DJMcMayhem เป็นเรื่องจริง ขอบคุณ! :)
เดนนิส


2

RProgN ขนาด 15 ไบต์

~16.aL1{2B26q}:

นี่เป็นการปรับปรุงที่ดีมากในการเพิ่มpadฟังก์ชั่น ความสมบูรณ์ของ]L4\-'0'\m\.โค้ดมากกว่าครึ่งหนึ่งคือการแพด

_Saved 6 ไบต์ขอบคุณ@ETHProductionsนั่นคือฟังก์ชั่นแผ่นรองครึ่งหนึ่ง

อธิบาย

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

ลองออนไลน์!


length of the Alphabetเป็นวิธีที่ดีในการบันทึกไบต์ ;-)
ETHproductions

2

เรติน่า36 36ไบต์


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

ลองออนไลน์!

คำอธิบาย


%%%%

แทนที่ว่างเปล่า (ไม่มีอยู่จริง) %%%%การป้อนข้อมูลด้วย

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

ในระยะแรกของขั้นตอนนี้มันจะจับคู่^%และแทนที่ข้อความ%%%%ด้วยสองบรรทัด0%%%และเป็น1%%%หลัก สเตจจะวนซ้ำจนกว่าเอาต์พุตจะหยุดการเปลี่ยนแปลง ในการรันครั้งที่สองมันจะจับคู่\b%(เนื่องจากตัวเลขนับเป็นตัวอักษรของคำและ%ไม่ได้) และแทนที่กลุ่มด้วยการทำซ้ำและเพิ่ม0ลงในหนึ่งสำเนาและ1อีกอัน: 0%%%กลายเป็นเส้น00%%และ01%%(และเรียงลำดับเดียวกันสำหรับ1%%%) ผ่านห่วงนี้ 16 บิตจะถูกสร้างขึ้นบรรทัดแยกออกจากกัน

11!`\d+

11 การแข่งขันครั้งแรกของ\d+(เรียกใช้อย่างน้อย 1 หลัก) จะถูกดึง การจับคู่จะถูกส่งออกในรายการที่แยกบรรทัด


ฉันอยากรู้ในการทำความเข้าใจวิธีการ0$%'¶$%ทำงานของสาย 1` นี้ สิ่งใด$%, `1, แทน?
Kritixi Lithos

@KritixiLithos ขออภัยฉันไม่ได้อธิบายเฉพาะมันค่อนข้างซับซ้อน: P $%`แสดงทุกอย่างก่อนการแข่งขันในบรรทัดเดียวกันและ$%'เป็นทุกอย่างหลังจากการแข่งขันในบรรทัดเดียวกัน เป็นตัวป้อนบรรทัด ดังนั้นโดยทั่วไปทดแทนตรงกับครั้งแรก%บนเส้นและแทนที่ด้วยบวกกับส่วนที่เหลือของสายมันเป็นการขึ้นบรรทัดใหม่เริ่มต้นของบรรทัดมันเป็นที่และ0 1แน่นอนว่าจุดเริ่มต้นและจุดสิ้นสุดของบรรทัดที่อยู่บนนั้นไม่มีการแตะต้องโดยการแทนที่เนื่องจากพวกเขาไม่ได้เป็นส่วนหนึ่งของการแข่งขัน
แมวธุรกิจ

ดังนั้นจึงไม่ได้ใส่สำเนาของเส้นหลังจากตัวเอง แต่แทนที่จะแทรกจุดสิ้นสุดของบรรทัดบรรทัดใหม่และจุดเริ่มต้นของบรรทัดในระหว่างจุดเริ่มต้นและจุดสิ้นสุดของบรรทัดที่ยังคงเหมือนเดิม
แมวธุรกิจ

อ่าขอบคุณนั่นเป็นประโยชน์ :) (ฉันกำลังพยายามเรียนรู้เรตินาตอนนี้)
Kritixi Lithos

ในกรณีนี้ฉันคิดว่าคุณสามารถใช้G11`เป็นบรรทัดสุดท้ายของ regex แทน
Kritixi Lithos


2

BF, 121 101 ไบต์

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

ต้องขึ้นบรรทัดใหม่ต่อท้าย ทำให้การใช้!สัญลักษณ์ (เพื่อตรวจสอบกล่องที่ระบุว่า!) มีล่ามนี้ (ลองออนไลน์!)

อาจเป็น 51 ไบต์หากตัวดำเนินการแต่ละตัวถูกพิจารณาเป็น 4 บิต


คุณควรระบุ (หรือเพิ่มไบต์) สำหรับ!ช่องทำเครื่องหมายที่กำลังเปิดใช้งาน
Conor O'Brien

อ๊ะฉันยังใหม่กับมันและคิดว่ามันเข้ารหัสใน URL จะระบุ ... รอจริงฉันคิดว่ามันได้ระบุไว้แล้วในประโยคที่สอง (?) จะชี้แจงว่าสักหน่อย
Timtech

2

C #, 96 ไบต์


แข็งแรงเล่นกอล์ฟ

()=>{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' ) );
}

รหัสเต็ม

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

ข่าว

  • v1.0 - 96 bytes- โซลูชั่นเริ่มต้น

ฉันชอบเวอร์ชั่นที่คุณเพิ่ม - คุณจะรวมรุ่น RC ด้วยหรือไม่ \ o /
Shaun Bebbers

1
จะซื่อสัตย์ไม่ทราบว่าRCหมายถึงอะไรนี่คือวิธีที่ฉันพยายามโพสต์โซลูชั่นของฉันใน PPCG
auhmaan

RC หมายถึง 'Release Candidate' - นั่นคือคุณจะส่งรุ่นที่มีความแตกต่างเล็กน้อยออกมาและรอดูว่าหมายเลข RC ของคุณมีเสถียรภาพมากที่สุดเพียงใด ดังนั้นถ้าคุณมีรุ่น A และเวอร์ชัน B คุณอาจมี v1.0-RCa และ v1.0-RCb หรืออะไรก็ได้
Shaun Bebbers

1
โอ้นั่น ไม่ถ้าฉันปล่อยอีกครั้งฉันจะเพิ่มหมายเลขเวอร์ชันทันที
auhmaan

2

C 170 120 ไบต์

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

เวอร์ชันที่ไม่ถูกปรับแต่ง:

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

จะสั้นลงอย่างแน่นอน!

@Ahemone ความคิดที่น่ากลัวขอบคุณ!

ควรทำงานตอนนี้! ลองออนไลน์!


คนแรกที่forวงในรุ่นแข็งแรงเล่นกอล์ฟของคุณควรจะไปถึง 4 มากกว่า 3 แต่ที่ไม่ได้เรื่องเพราะวงที่สามารถตัดออกทั้งหมดและครั้งที่สองสำหรับวงที่สามารถเริ่มต้นจาก 0 คุณยังสามารถใช้เพียงwhile(n)แต่กระชับwhileวงลงไป การforวนซ้ำช่วยประหยัดมากขึ้นอีกครั้ง n/=2จะช่วยให้คุณประหยัด byte มากกว่ากะ คุณยังขาด}เวอร์ชั่นที่ตีกอล์ฟจนทำให้เกิดข้อผิดพลาดในการรวบรวม
Ahemone

@Ahemone แก้ไข}และปรับปรุงโค้ดให้สั้นลง 50 ไบต์ตามความคิดของคุณ
Abel Tom


2

R - 23

เราสามารถใช้intToBinฟังก์ชั่นจากR.utilsแพ็คเกจ:

R.utils::intToBin(0:10)

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


1

Python 2, 44 ไบต์

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

zfillฟังก์ชั่นนี้ใช้ฟังก์ชั่นที่ใช้งานได้ดีrjustยกเว้นว่ามันจะเต็มไปด้วย0ดังนั้นคุณจึงไม่ต้องเสียไบต์ในการโต้แย้ง


รอสิ่งนี้ตลอดเวลาที่ฉันสูญเสียไบต์ทำให้ฟังก์ชั่นการขยายตัวของฉันเอง? ( lambda k,l:' '*(len(k)-l)+k) ว้าว ... +1 เพราะสิ่งนี้: D
HyperNeutrino



1

ซ้อนกัน 30 ไบต์

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

ลองออนไลน์!

11:>เป็นช่วงที่จากไป0 10ที่เหลือค่อนข้างอธิบายตนเอง

โซลูชันอื่น ๆ ที่ฉันได้พบ:

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

BF , 134 ไบต์

ฉันแน่ใจว่านี่จะสั้นลงได้ - มันเป็นสนามกอล์ฟ BF แรกของฉัน

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

ลองออนไลน์! ถือว่าไม่มีที่สิ้นสุดเทปในทั้งสองทิศทางเช่นล่ามที่ TIO ใช้ ล่ามโดย<ที่ปลายด้านซ้ายของเทปไม่มีตัวเลือกจะบันทึกสามไบต์

คำอธิบาย

มากกว่าครึ่งหนึ่งของรหัส (77 ไบต์แรกเพื่อความแม่นยำ) ใช้ในการเริ่มต้นเทป ขั้นตอนเป็นดังนี้:

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

เซลล์เริ่มต้นเพื่อ1จัดเก็บบิตของจำนวนของเราบวก 1: 1หมายถึงศูนย์บิตและ2หมายถึงหนึ่งบิต

11ขั้นตอนการเริ่มต้นจบลงด้วยการชี้บนที่ ตอนนี้เราใช้เซลล์นี้เพื่อเรียกใช้การวนซ้ำ 11 ครั้งของเรา:

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