16ビットバイナリグリッド


29

符号なし16ビット整数があれば、その10進形式を変換します(つまり数)をビットの4x4 ASCIIグリッドに最上位ビット(MSB)は左上、最下位ビット(LSB)は右下に読み、次に下に読みます(英語のテキストのように)。

入力:4242

+---+---+---+---+
|   |   |   | # |
+---+---+---+---+
|   |   |   |   |
+---+---+---+---+
| # |   |   | # |
+---+---+---+---+
|   |   | # |   |
+---+---+---+---+

入力:33825

+---+---+---+---+
| # |   |   |   |
+---+---+---+---+
|   | # |   |   |
+---+---+---+---+
|   |   | # |   |
+---+---+---+---+
|   |   |   | # |
+---+---+---+---+

特定の要件

  1. 入力は10進数(10進数)でなければなりませんが、任意の方法でバイナリに変換できます(使用可能な場合は、言語の組み込みを使用することもできます)。

  2. 出力テーブルの形式は正確に一致する必要があり ます。この手段あなたは(特定のASCII文字を使用しなければならない-+|示すように、テーブルのグリッド線のために)、各セルの内部は3つの文字で、真のビットが表され#ている間はfalseを(スペースで表現されます)。

  3. 先頭または末尾の空白は許可されません。最終改行が必要です

  4. 説明したように、ビット順序は例と一致する必要があります。

手当

  1. 入力は、コマンドライン、標準入力、またはユーザー入力の10進数である必要がありますが、ソースコードにハードコードしてなりません

明確な最短コード勝利!:-)



2
最初の文は私を混乱させるように聞こえますが、そこでは「10進数形式を変換する」と書かれています。ポストの残りの部分と例に基づいて、入力は10進数形式で与えられているように見えますが、値のバイナリ形式をグリッドに変換する必要があります。
レトコラディ

1
@RetoKoradiあなたは本質的に正しいですが、質問は10進数をバイナリグリッドに変換する必要があります。2進数を扱うための明示的な要件はなく実装の詳細のみが必要です。
type_outcast

関数の引数として10進数を使用して関数を作成すると、ユーザー入力としてカウントされますか?
アレックスA.

2
与えられた数は「符号なし16 ビット整数」であると言うので、それは定義によりバイナリ形式です。最初にこれを読んだとき、実際には入力がバイナリ形式で与えられるように聞こえました。最後に向かってすべてが明らかになります。しかし、少なくとも私にとっては、最初の段落では実際に問題をまったく捉えていません。
レトコラディ

回答:


21

J、26バイト

('   ';' # '){~4 4$_16{.#:

匿名動詞。ありがたいことに、Jはボックスの描画が非常に得意です。試してみましょう:

   f =. ('   ';' # '){~4 4$_16{.#:
   f 4242
+---+---+---+---+
|   |   |   | # |
+---+---+---+---+
|   |   |   |   |
+---+---+---+---+
| # |   |   | # |
+---+---+---+---+
|   |   | # |   |
+---+---+---+---+

一部のコメント者が述べたように、Jがボックスを描画する方法はシステムに依存します。一部のプラットフォームでは、このコードはデフォルト設定で動作しますが、他のプラットフォームでは、Unicode線描画文字を使用してボックスが描画されます。(これらのコマンド9!:69!:7使用すると、ボックス化された値を描画する文字をそれぞれ照会および設定できます。)


では、ゴルフスコアリングのボックス描画コマンドにコンセンサスがあるかどうかを知っていますか?個人的には、コードゴルフの前提は、ソリューションの言語が実行されているシステムの大部分でソリューションが機能することだと思いますか?すべての(またはほとんどすべての)Jインストールで正しいボックスを出力するソリューションはどのようになりますか?ところで、私あなたのソリューションが本当に好きです!私の脳はまだ機能しているので、まさにコードゴルフが好きです。
type_outcast

5
@type_outcast私たちはコードゴルフのチャレンジに携帯性を必要としません。1つのプラットフォームでの実装で機能する限り、有効です。
デニス

@Dennisの回答に感謝します。私は(まだ)モーリスの解決策が本当に好きなので、私の推測が間違っていたことをうれしく思います!:-)
type_outcast

14

JavaScript(ES6)、102

...または96のreturn代わりに使用しますconsole.log

EcmaScript 6準拠のブラウザーで以下のスニペットを実行してテストします。

f=n=>{for(o=h=`
+---+---+---+---+
`,z=16;z--;n/=2)o=(z&3?'':h+'|')+` ${' #'[n&1]} |`+o;console.log(o)}

// TEST
console.log=x=>O.innerHTML=x+O.innerHTML

function test(n) { f(n); console.log(n); }
<input id=I value=4680><button onclick='test(+I.value)'>-></button>
<pre id=O></pre>


6
「JavaScripy」は奇妙なjavascript / pythonマッシュアップですか?;-)
デジタル外傷

6
@DigitalTraumaもちろんです。しかし、世界はこの新しい進化の準備ができていないため(tvtropes.org/pmwiki/pmwiki.php/Main/TheWorldIsNotReady)、JavaScriptに戻ります
-edc65

クール、これはEdgeで動作します!
アルトゥーロトーレスサンチェス

する必要はありません...クリック... tvtropes ...
RK。

14

Befunge -93、196の218バイト

&00p12*v>>4>"---+",v v <
v*:*:*:<   | :-1,,,< #
>:*2/10p^  >"+",25*,10g|
     > #v^#         $< @
 25*,^  >4" |",,v ,*<>
v>"#",00g10g-00p 10g
 |`-1g01g00     <>48^
v>" ",10g
>2/10p>"| ",,1-:#^_$>^

プログラムを実行するには...

  1. に行く オンライン通訳にます
  2. このコードを大きなテキストボックスに貼り付けます。
  3. クリック Showます。
  4. に目的の番号を入力します Inputボックスにます。
  5. をクリックしRunます。(またはSlow、5ミリ秒などに変更してからクリックしますShow。)
  6. 多田!

4242の出力:

+---+---+---+---+
|   |   |   | # |
+---+---+---+---+
|   |   |   |   |
+---+---+---+---+
| # |   |   | # |
+---+---+---+---+
|   |   | # |   |
+---+---+---+---+

33825の出力:

+---+---+---+---+
| # |   |   |   |
+---+---+---+---+
|   | # |   |   |
+---+---+---+---+
|   |   | # |   |
+---+---+---+---+
|   |   |   | # |
+---+---+---+---+

説明

ああ、私は何に夢中になりましたか?さて、ここに行きます!(無関係なコードは.sに置き換えられます。)

パート1:入力を取得し(0,0に保存)、32768を計算します(1,0に保存)。

&00p12*v>
v*:*:*:< 
>:*2/10p^

パート2:「+ --- + --- + --- + ---」を印刷します。

>4>"---+",v
  | :-1,,,<

パート3:「+」と改行を印刷し、(1,0)が0であるかどうかを確認します(つまり、完了です)。その場合、終了します。それ以外の場合は続行します。

 ........... v <
   | ....... # 
   >"+",25*,10g|
v.#         $< @
>4" |",,v ...

パート4:入力の2進数を取得し、(0,0)と(1,0)を更新します。適切なものを印刷します。Befungeのラップアラウンド動作を利用しています。

 .....  >4" |",,v ,*<.
v>"#",00g10g-00p 10g
 |`-1g01g00     <>48^
v>" ",10g
>2/10p>"| ",,1-:#^_...

パート5:改行を印刷し、「+ --- + --- + --- + --- +」を印刷する部分に戻ります。ラップアラウンドトリックが使用されます。

     > #.^.         .. .
 25*,^  ......... ...>
................ ...
 .........      .....
........
.................._$>^

多田!


10

ジュリア、156の 143バイト

n->(p=println;l="+"*"---+"^4;for i=1:4 p(l,"\n| ",join([j>"0"?"#":" "for j=reshape(split(lpad(bin(n),16,0),""),4,4)[:,i]]," | ")," |")end;p(l))

ゴルフをしていない:

function f(n::Int)
    # Convert the input to binary, padded to 16 digits
    b = lpad(bin(n), 16, 0)

    # Split b into a 4x4 matrix
    m = reshape(split(b, ""), 4, 4)

    # Store the line separator for brevity
    l = "+" * "---+"^4

    # Print each column of the matrix as a row
    for i = 1:4
        println(l, "\n| ", join([j > "0" ? "#" : " " for j = m[:,i]], " | "), " |")
    end

    # Print the bottom of the table
    println(l)
end

オンラインで試す


10

パイソン2、157の 153 151 146バイト

J=''.join;R='+---'*4;i=format(input(),'016b')
print J(R+'+\n|'+J(' '+('#'if int(l)else' ')+' |'for l in i[n*4:-~n*4])+'\n'for n in range(4)),R+'+'

4バイトを保存してくれたMorgan Thrappと、5バイトを保存してくれたJonathan Frechに感謝します。

使用法

$ python test.py
33825
+---+---+---+---+
| # |   |   |   |
+---+---+---+---+
|   | # |   |   |
+---+---+---+---+
|   |   | # |   |
+---+---+---+---+
|   |   |   | # |
+---+---+---+---+

'+---'*4変数にプルする場合は2バイト、そうする場合はさらに2バイト節約できますj=''.join
モーガントラップ

問題ない!私は実際に非常に似たソリューションに取り組んでいました。
モーガンスラップ

@downvoter説明するケア?
ザック・ゲイツ

Python 3を使用しないため、5バイトに置き換えint(input())input()保存できます。
ジョナサンフレッチ

9

ルビー、118 114

b="%016b"%gets
l=?++"---+"*4
1.upto(16){|i|puts l if i%4==1
print"| #{b[i-1]==?0?' ':?#} "
puts ?|if i%4<1}
puts l

いくつかの文字を保存してくれた@ w0lfに感謝します。


1
?表記法を使用してリテラル文字を記述すると、いくつかのバイトを節約できます(例:の?|代わりに'|')。これは、スペース以外のすべてに対して機能します。
クリスチャンルパスク

@ w0lf私は?\sそれがスペースのために働くことを発見しました、しかしそれは実際ここでは役に立ちません。
Mhmd

7

GNU sed + dc、116

スコアには次の-rフラグの+1が含まれますsed

s/.*/dc -e2o&p/e
:
s/^.{,15}$/0&/;t
s/./| & /g
s/.{16}/\n+---+---+---+---+\n&|/g
y/01/ #/
s/\n([-+]+)(.*)/\1\2\n\1/

テスト出力:

$ { echo 4242 ; echo 33825 ; } | sed -rf 16bitgrid.sed
+---+---+---+---+
|   |   |   | # |
+---+---+---+---+
|   |   |   |   |
+---+---+---+---+
| # |   |   | # |
+---+---+---+---+
|   |   | # |   |
+---+---+---+---+
+---+---+---+---+
| # |   |   |   |
+---+---+---+---+
|   | # |   |   |
+---+---+---+---+
|   |   | # |   |
+---+---+---+---+
|   |   |   | # |
+---+---+---+---+
$ 

代わりに:

ピュアsed、146

コマンドのsed評価にのGNU拡張機能を使用するのはごまかしていると思われるかもしれませんdc。その場合、このメタアンサーに従って、これを少し異なる方法で行うことができます。もちろん、質問は入力が10 進でなければならないことを明確に述べていますが、ここではsed回答に対してそれをオーバーライドし、代わりに単項(base 1)を使用できると主張しようとしています。

:
s/11/</g
s/<([ #]*)$/< \1/
s/1/#/
y/</1/
t
:a
s/^.{,15}$/0&/;ta
s/./| & /g
s/.{16}/\n+---+---+---+---+\n&|/g
y/01/ #/
s/\n([-+]+)(.*)/\1\2\n\1/

テスト出力

を使用printfして必要な単項文字列を生成します。

$ printf "%33825s" | tr ' ' 1 | sed -rf 16bitgrid.sed 
+---+---+---+---+
| # |   |   |   |
+---+---+---+---+
|   | # |   |   |
+---+---+---+---+
|   |   | # |   |
+---+---+---+---+
|   |   |   | # |
+---+---+---+---+
$ 

良いですね。これは、質問を微調整しながら(プライベート)概念実証として私が思いついたPerlソリューションにやや似ています。
type_outcast

@type_outcastところで、答えとしてあなた自身のソリューションを投稿することは完全にOKです:)
デジタルトラウマ

私は知っている:-)私はそれをゴルフに費やすのにあまり時間を費やしませんでした。良い質問を出すことに焦点を合わせていたからです。現時点では、他の人の答えをうんざりするのがとても楽しみです。
type_outcast

6

C ++ 11、193 191 190 176 172バイト

codegolfでの私の最初の解決策です。私を責めないでください。

#include<iostream>
int n,j,i=65536;int main(){std::cin>>n;for(;j<9;){for(int k:{0,0,0,0})if(j%2)printf("| %s",n&(i/=2)?"# ":"  ");else printf("+---");puts(j++%2?"|":"+");}}

非ゴルフ

#include <iostream>
int n, i = 65536, j;

int main()
{
    std::cin >> n;

    for (; j < 9;)
    {
        for(int k:{0,0,0,0})
        {
            if (j % 2)
            {
                printf("| %s", n & (i /= 2) ? "# " : "  ");
            }
            else
            {
                printf("+---");
            }
        }
        puts(j++ % 2 ? "|" : "+");
    }
}

前のバージョン

#include <iostream>
using namespace std;

int n, i = 65536, j;
int main()
{
    cin >> n;

    for (; j < 9;)
    {
        for(int k:{0,0,0,0})
        {
            if (j % 2)
            {
                cout << "| " << (n & (i /= 2) ? "# " : "  ");
            }
            else
            {
                cout << "+---";
            }
        }
        cout << (j++ % 2 ? "|\n" : "+\n");
    }
}

ヒント:0x10000番地は六角は、「0X」プレフィックスを持つ、65536で常に長い小数より
edc65

ヒント2:運用using namespace stdコードでは避けるべきです。そして、ここでも役に立ちません。
edc65

@ edc65 dec-> hex良いアイデアです。16進数の表現が短いといつも思っていましたが、を忘れてしまい0xます。using namespace std私は接頭辞に持っていないため、数バイトを節約coutし、cinstd::using std::cout;役に立たないだけでも使用します。
ゼレゲス

やあ、ゼレゲス。インクルードとライブラリ間のスペースを削除できます。メイン関数の戻り値の型を削除できます。
wendelbsilva

C++auto intはサポートしていません。
ゼレゲス

6

Pyth、37バイト

Jj*3\-*5\+JVc4_m@" #".>Qd16jd.i*5\|NJ

オンラインで試す:デモンストレーションまたはテストスイート

説明:

Jj*3\-*5\+J
  *3\-                       the string "---"
      *5\+                   the string "+++++"
 j                           join second by first string: 
                                "+---+---+---+---+"
J                            save in J
          J                  print J

Vc4_m@" #".>Qd16jd.i*5\|NJ
    m         16             map each d in [0, 1, ..., 15] to:
          .>Qd                 input number Q shifted to the right by d
     @" #"                     and take the ^th char in " #" (modulo 2)
   _                         reverse this list of chars
 c4                          split into 4 groups
V                            for each group N in ^:
                    *5\|       the string "|||||"
                  .i    N      interleave ^ with N
                jd             join chars with spaces and print
                         J     print J

5

CJam、 43 41バイト

'+5*'-3**N+ri2bG0e[4/{" #"f='|5*.\S*N2$}/

ゴルフは間違いなくできますが、それがスタートだと思います。上の行を生成し、4ビットごとに偶数行を作成し、前の奇数行をコピーします。

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


4

Python 2、122 121 120バイト

n=bin(4**8+input())[3:]
i=0
exec"print'| %s |'%' | '.join(' #'[x>'0']for x in n[:4])*i or'+---'*4+'+';n=n[4*i:];i^=1;"*9

@xnorの巧妙な4**8+トリックのおかげで-1バイト。メインの印刷は、奇数/偶数の適切な行を選択して、9回ループすることによって行われます。


1 bin(4**8+input())[3:]バイトを節約できると思うformat
-xnor

@xnorああ、それはすてきです:)
Sp3000

4

Python 2、94

n=input()
s=();exec"s=(' #'[n%2],)+s;n/=2;"*16
a='+---'*4+'+\n'
print(a+'| %s '*4+'|\n')*4%s+a

アイデアは、パターンを取ることです

+---+---+---+---+
| _ | _ | _ | _ |
+---+---+---+---+
| _ | _ | _ | _ |
+---+---+---+---+
| _ | _ | _ | _ |
+---+---+---+---+
| _ | _ | _ | _ |
+---+---+---+---+

を除いて %s空白の代わりにをタプル置換を実行します。タプルは次のようになります

('#', ' ', ' ', ' ', ' ', '#', ' ', ' ', ' ', ' ', '#', ' ', ' ', ' ', ' ', '#')

入力からバイナリの数字を取り出し、対応するシンボルをタプルの前に追加することで作成されます。明示的なタプルを使用した式の長さが等しくなりました。

%tuple(' #'[c>'0']for c in bin(input()+4**8)[3:])

2バイトのSp3000に感謝します。


4

PowerShell、203 188 182バイト

param($a)$l="+---+---+---+---+";$l;$b=([int64][convert]::ToString($a,2)).ToString(@(,"0"*16)-join'');@(1..16|%{if($b[$_-1]-eq'1'){"| # "}else{"|   "};if($_%4-eq0){"|`n$l`n"}})-join''

編集- |描画される順序を変更することで15バイトを保存したため.TrimEnd("|")、出力でダンプし、代わりにforループを配列を生成するサブコードブロックに変換できます

Edit2- $o変数に保存し、-join''直接出力するだけで済むようにして、さらに6バイトを節約しました。

ああ。

PowerShellでの描画は困難です。PowerShellでの2進数の操作は困難です。

[convert]入力整数にビルトインを使用してバイナリの文字列表現を作成し、次に再キャストして適切な数のゼロを追加/埋め込みするために[int64]再呼び出し.ToString()します。(文字列の配列を作成して結合すること@(,"0"*16)-join''は、リテラル文字列よりも1文字短いことに注意してください"0000000000000000"

次に、1..16|%{...}各桁をチェックする単純なforループを実行して出力配列を作成し、最後-join''に一緒に戻します。


前、188

param($a)$l="+---+---+---+---+";$l;$b=([int64][convert]::ToString($a,2)).ToString(@(,"0"*16)-join'');$o=@(1..16|%{if($b[$_-1]-eq'1'){"| # "}else{"|   "};if($_%4-eq0){"|`n$l`n"}});$o-join''

Previous-er、203

param($a)$l="+---+---+---+---+`n|";$o=$l;$b=([int64][convert]::ToString($a,2)).ToString(@(,"0"*16)-join'');1..16|%{if($b[$_-1]-eq'1'){$o+=" # |"}else{$o+="   |"};if($_%4-eq0){$o+="`n$l"}};$o.TrimEnd('|')

1
それが「楽しいハード」だったことを願っています。:-)説明のために+1。PowerShellについての私の限られた理解に役立ちました。
type_outcast

3

Javascript(ES6)、216 207バイト

無名関数を定義します。

i=>(","+("0".repeat(16)+i.toString(2)).slice(-16).split``.map((v,l,a)=>l%4<1?"| "+a.slice(l,l+4).map(v=>v?"#":" ").join` | `+" |":"").filter(v=>!!v).join`,`+",").replace(/,/g, `
+---+---+---+---+
`).slice(1)

ETHproductionsのヒントをありがとう!


よくやった!ES6を使用しているため、いくつかのヒントを示します。1.文字列を関数の唯一のパラメーターとして使用する必要がある場合は、次のようにテンプレート文字列を使用できます.join` | `​。2.値の補間にテンプレート文字列を使用することもできます:i=>`,${"0".repeat....join`,`},`.replace...3 このスレッドには ES6に関するその他のヒントがあります
ETHproductions

これは機能しなくなったように見えますが、もう少しゴルフをすることで、正しい結果で197を得ることができますi=>`,${("0".repeat(16)+i.toString(2)).slice(-16).split``.map((v,l,a)=>l%4?"":"| "+a.slice(l,l+4).map(v=>' #'[v]).join` | `+" |").filter(v=>v).join`,`},`.replace(/,/g,`<line break>+---+---+---+---+<line break>`).slice(1)
。– ETHproductions

2
("0".repeat(16)+i.toString(2)).slice(-16) ->(65536|i).toString(2).slice(1)
edc65

正確なロジックを保持して、これを169までゴルフできます。jsfiddle.net/ 76fp7aw6
edc65


2

Pyth、50バイト

j.i*5]<3*5"+---"ms.i*5\|dc4mj@" #"qd\1*2\ .[Z16.BQ

説明は別の時間まで待たなければなりません、私はこれを私の電話に投稿しています!


2

ルビー、102

n=gets.to_i
print j="+---"*4+"+
" 
19.downto(0){|i|print i%5>0?"| #{((n>>i*4/5)%2*3+32).chr} ":"|
"+j}

アルゴリズム

水平分割線を印刷する

20回ループ(19..0)

ループ番号が5で除算されない場合、4/5を乗算して範囲16..0の数値に変換します。前にスペース(ascii 32)または#(ascii 32 + 3 = 35)を出力します|ます。

ループ番号が5で除算される場合、終了|、改行、および最初と同じ水平分割線を出力します。


2

Perl、103バイト

$_=(($l='+---'x4 .'+
').'| x 'x4 .'|
')x4 .$l;@n=(sprintf'%016b',<>)=~/./g;s/x/$n[$x++]?'#':$"/eg;print

多数の文字列を繰り返してxsのグリッドを作成し、入力をバイナリに変換してから、指定された位置()のフラグに応じs///xsを(#または)に変換します。$"$x


2

PHP、159バイト

bingrid16.php

<?$r=10;while(--$r){if($r%2){echo str_repeat('+---',4).'+';}else{$c=9;echo'|';while(--$c){echo' '.($c%2?'|':($argv[1]&pow(2,$r*2+$c/2-5)?'#':' '));}}echo"\n";}

使用法:

php bingrid16.php 4242

派手なものは何もありませんでした。

ループの代わりに配列を使用して別の角度を試してみましたが、224バイトと長くなりました。

<?=implode(array_map(function($r)use($argv){return($r%2?str_repeat('+---',4).'+':'|'.implode(array_map(function($c)use($r,$argv){return' '.($c%2?'|':($argv[1]&pow(2,$r*2+$c/2-5)?'#':' '));},range(8,1))))."\n";},range(9,1)));


1

c99 263バイト

ゴルフ:

main(int argc,char **argv){short i=atoi(argv[argc-1]);char *t="| # ", *f="|   ",*a[16],**p=a,*b="+---+---+---+---+\r\n";while(p<a+16){if((i|0x8000)==i)(*(p++))=t;else(*(p++))=f;i<<=1;}for(p=a;p<a+16;p+=4)printf("%s%s%s%s%s|\n",b,*p,p[1],p[2],p[3]);printf("%s",b);}

なし:

main(int argc, char **argv)
{
    short i=atoi(argv[argc -1]);
    char *t ="| # ", *f="|   ",*a[16],**p=a,*b="+---+---+---+---+\r\n";

    while (p<a+16)
    {
        if((i|32768)==i)
            (*(p++))=t;
        else
            (*(p++))=f;

        i<<=1;
    }

    for (p=a;p<a+16;p+=4)
        printf("%s%s%s%s%s|\n",b,*p,p[1],p[2],p[3]);
    printf("%s",b);
}

私はビットシフトのバリアントを提示するのが好きで、argcを使用するのはこれが適切であると感じました(数バイトの費用がかかりますが、Cはチャンスがあってもこのバイトで挑戦することはできません) / argv


1

ルビー、95

簡潔な文字列変換のためにMhmdにうなずきますが、数値メソッドではなく文字列メソッドを使用してみたかったのです。

->i{puts g='+---'*4+?+;("%016b"%i).scan(/.{4}/){puts$&.gsub(/./){"| #{$&<?1?' ':?#} "}+"|
"+g}}

1

ルビー、93

数値演算のみを使用するわずかに短いバージョン。

->i{n=g='+---'*4+"+
";15.downto(0){|m|n+="| #{[' ',?#][1&i>>m]} "
n+="|
"+g if m%4<1}
puts n}

1

C#227バイト

ゴルフ:

class B{public static string G(short v){string s="",b=System.Convert.ToString(v,2).PadLeft(16,'0');for(int i=9;i>0;){s+=i--%2!=0?"+---+---+---+---+\n":"| "+b[i*2+1]+" | "+b[i*2]+" | "+b[i*2-1]+" | "+b[i*2-2]+" |\n";}return s;}}

インデント:

class B
{
    public static string G(short v)
    {
        string s="",b=System.Convert.ToString(v, 2).PadLeft(16,'0');
        for(int i=9;i>0;)
            s+=i--%2!=0?"+---+---+---+---+\n":"| "+b[i*2+1]+" | "+b[i*2]+" | "+b[i*2-1]+" | "+b[i*2-2]+" |\n";
        return s;
    }
}

初めてこのようなことをしようとするとき、ヒントは大歓迎です!


まず、286バイトをカウントし、インデントスペースを削除できます。
ブルー

どのくらい正確に数えますか?私はプロパティに行ってファイルサイズを確認しましたが、それがそれを行う方法であるかどうかはわかりません!インデントなしで230バイトになりました!
アントニマー

のようなものを使用してください mothereff.in/byte-counter、またはLinuxであれば、使用wcコマンドを
ブルー

1

Python 3、145 144バイト

列をなして:

a="|";b="+"+"---+"*4+"\n";r=0,1,2,3;(lambda x:print(b+b.join(a+a.join(" %s "%'# '[x&2**(i+j*4)<1]for i in r)+a+"\n"for j in r)+b))(int(input()))

改行あり:

a="|"
b="+"+"---+"*4+"\n"
r=0,1,2,3
lambda x:print(b+b.join(a+a.join(" %s "%'# '[x&2**(i+j*4)<1]for i in r)+a+"\n"for j in r)+b)
x(int(input()))

編集:1バイトを保存するためのTanks @manatwork


1
ニブラー先端に基づいて、ハードコーディングr=0,1,2,3はそれを生成するより1文字短いですr=range(4)
マナトワーク

0

Kotlin、192バイト

{val v=it.toString(2).padStart(16,'0')
fun p(){(0..3).map{print("+---")}
println("+")}
(0..3).map{p()
v.subSequence(it*4,(it+1)*4).map{print("| ${if(it>'0')'#' else ' '} ")}
println("|")}
p()}

美化

{
    val v = it.toString(2).padStart(16, '0')
    fun p() {
        (0..3).map { print("+---") }
        println("+")
    }
    (0..3).map {
        p()
        v.subSequence(it *4, (it +1) *4).map {print("| ${if (it > '0') '#' else ' '} ")}
        println("|")
    }
    p()
}

テスト

var b:(Int) -> Unit =
{val v=it.toString(2).padStart(16,'0')
fun p(){(0..3).map{print("+---")}
println("+")}
(0..3).map{p()
v.subSequence(it*4,(it+1)*4).map{print("| ${if(it>'0')'#' else ' '} ")}
println("|")}
p()}

fun main(args: Array<String>) {
    b(255)
}

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.