バイナリニブルでのカウント


19

この課題は、0から10までの数字を端末、ウィンドウ、キャンバスまたはスクリーンに出力することです。出力される各数値は4ビット幅のニブルとして表示される必要があるため、ゼロなどが表示さ0000れます。

出力される各番号は、スペース、カンマ、またはキャリッジリターンで区切ることができます。最小のソリューションが勝ちますが、シーケンスに繰り返し番号がない限り、好きな順序で番号を表示できます。

低レベルのバイナリ言語のエントリは、コンマまたは空白で出力することができない場合、コンマまたは空白の区切り文字について心配する必要はありません(つまり、標準出力がバイナリのみに制限されているか、ソリューションが初期のコンピュータキット用です)デジタルディスプレイが限られているKIM-1など)。


はい、スペース、カンマ、カンマ、次にスペース、または選択した言語の「\ r \ n」に相当するもの。
ショーンビーバーズ

4ビット幅の2進数ではなく、4つの個別のゼロ桁のように見えるため、申し訳ありません。
ショーンビーバーズ

そのような答えを書くことを本当に確信しているわけではありませんが、11個の必須のものに加えていくつかの余分なニブルを出力しても大丈夫でしょうか?
アーナウド

2
ニブルではなく、ニブルです。
0WJYxW9FMN

コモドール64プログラマ・リファレンス・ガイドに従っていない
ショーン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


13

JavaScript、46バイト

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

単に各数値に16を追加して最初の2進数を切り取ることができるのに、なぜパディング機能を使用するのですか


9

Japt、7バイト

GôA,_¤Å

そして、ここで私はJaptが他のどのゴルフ言語よりも長くなる運命にあると考えていました...

オンラインでテストしてください!

説明

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}

純粋なBashバージョンをオンラインでお試しください!

出力は次のとおりです。

0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010

7

J、6バイト

#:i.11

6バイトに削減してくれたマイルに感謝します!


#:i.11同様に動作するはずです
マイル

今削除されたコメントへの回答によるとこれが有効かどうかはわかりません。
アダム

@Adám表示できません。なぜ有効ではないのか説明してもらえますか?
ブロック

なぜなら、×4のブール配列を生成するからです。ブール配列は、間にスペースを入れた数字として出力されます。ただし、このコメントは、2進数の内部にスペースが許可されていないことを暗示しているようです。
アダム

6

ゼリー、7 バイト

2Bṗ4ṫ6Y

オンラインでお試しください!

(ナイブルの末尾の行が許可されている場合は5バイト、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](「重要でない」モナドでabs(z)<=1変換)2にSを0、S。




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

オンラインでお試しください!

私はゼリーがそれほど得意ではないので、どんなヒントも受け入れます!

これはエミグナの最初のアルゴリズムを使用します


デニスが2バイト削り取ってくれて、自分の答えを決めてくれてありがとう。: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

Ḋ€バイトを保存します。
デニス

@デニスああ、それは理にかなっています。ありがとう!
DJMcMayhem

⁴r27別のものを保存します。
デニス



2

RProgN、15バイト

~16.aL1{2B26q}:

これは、関数を追加するための非常に優れた変更padです。]L4\-'0'\m\.コード全体の半分以上は、パディングすることです。

_ @ ETHProductionsのおかげで6バイト節約されました。これは、パッド機能が半分にカットされたものです。

説明した

~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バイトを保存する良い方法
;

2

網膜36 33バイト


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

オンラインでお試しください!

説明


%%%%

空の(存在しない)入力をに置き換えます%%%%

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

このステージの最初の実行では^%、テキストが一致し、基本的にテキスト%%%%が2行に置き換えられます0%%%とに1%%%。出力が変化しなくなるまで、ステージはループします。2回目の実行では、\b%(数字は単語文字としてカウントされ、カウントされ%ないため)一致し、グループを複製し0て1つのコピーと1他のコピーに追加することでグループを置き換えます:0%%%00%%01%%(および1%%%)。このループを介して、すべての16ビット文字列が生成され、改行が分離されます。

11!`\d+

\d+(少なくとも1桁の実行)の最初の11の一致が取得されます。一致したものは、改行で区切られたリストで出力されます。


私はこの0$%'¶$%1行がどのように機能するかを知りたいです。何をすべきか$%`1表しますか?
クリティキシリトス

@KritixiLithos申し訳ありませんが、詳細は説明しませんでした。少し複雑です:P。$%`同じ行で一致する前のすべてを表し、同じ行で$%'一致した後のすべてを表します。文字通りの改行です。したがって、基本的に置換%は行の最初と一致し、それを0プラスした残りの行、改行、それがあった行の先頭、およびで置き換えます1。もちろん、試合の一部ではなかったので、それがあった行の最初と最後は置換によって影響を受けません。
ビジネス猫

そのため、行のコピーをそれ自体の後ろに置くのではなく、行末、改行、およびそのままの行の先頭と末尾の間に行の先頭を挿入します。
ビジネス猫

ああおかげで、有用だったこと:)(私は今、網膜を学ぶためにしようとしている)
KritixiのLithos

その場合、私はあなたが使用することができると思うG11`の代わりに正規表現の最後の行として
KritixiのLithos

2

ルビー、25バイト

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

2

BF、121 101バイト

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

末尾の改行が必要です。このインタプリタ!シンボルを使用します(したがって、というボックスをチェックします!(オンラインで試してください!)

各演算子が4ビットと見なされた場合、潜在的に51バイト


!有効にするチェックボックスの指定(または追加のバイト)が必要です。
コナーオブライエン

おっと、私はそれが初めてで、URLにエンコードされていると思いました。(?)を指定します...待ち時間を、実際に、私はそれはすでに第二の文で指定されたと思う、明確にそのビット
Timtech

2

C#、96バイト


ゴルフ

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

非ゴルフ

() => {
    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 /
ショーンビバーズ

1
正直になるだろう、何を知らないのRC ...手段。これは私がPPCGに私の解決策を投稿しようとする方法です
auhmaan

RCとは、「Release Candidate」を意味します。つまり、わずかな違いのあるいくつかのバージョンを送信し、RC番号で最も安定しているバージョンが見つかるまで待ちます。そのため、バージョンAとバージョンBがあれば、v1.0-RCaとv1.0-RCbなどがあります。
ショーンビーバーズ

1
それか。いいえ。別のリリースを作成する場合、すぐにバージョン番号を増やします。
auhmaan

2

C 170120バイト

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あなたのgolfedバージョンのループは4ではなく3に行く必要がありますが、ループは完全に除去することができ、ループのための第二は、あなたはまた、単に使用することができます0から開始することができますので、それは問題ではないwhile(n)が、圧縮whileにダウンループをforループはより再び保存されます。n/=2また、シフトを1バイト節約します。また}、ゴルフバージョンの終端が欠落しているため、コンパイル時にエラーが発生します。
アヘモネ

@Ahemone }あなたのアイデアに基づいて、コードを修正し、コードを50バイト短くしました。
アベルトム


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機能する関数を使用するため、引数でバイトを浪費しません。rjust0


待って、この間ずっと自分のパディング関数を作るのにバイトを浪費してきましたか?(lambda k,l:' '*(len(k)-l)+k)うわー...ちょうどこのため+1:D
HyperNeutrino





1

BF、134バイト

これは短縮できると確信しています。これは私の最初のBFゴルフです。

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

オンラインでお試しください!TIOのインタープリターが使用するように、両方向に無限のテープを想定しています。<テープの左端にノーオペレーションがあるインタープリターは、3バイトを節約します。

説明

コードの半分(正確には最初の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表し、1ビット表します。

初期化フェーズはのポインタで終了しました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.