ビットウィービングの視覚化


32

難解なプログラミング言語の悪には、「織り」と呼ばれるバイト値に対する興味深い操作があります。基本的には、バイトの8ビットの順列です(パターンが対称であるため、どちらの端からカウントを開始してもかまいません)。

  • ビット0はビット2に移動します
  • ビット1はビット0に移動します
  • ビット2はビット4に移動します
  • ビット3はビット1に移動します
  • ビット4はビット6に移動します
  • ビット5はビット3に移動します
  • ビット6はビット7に移動します
  • ビット7はビット5に移動します

便宜上、置換のその他の2つの表現を示します。サイクルとして:

(02467531)

そして、マッピングのペアのリストとして:

[[0,2], [1,0], [2,4], [3,1], [4,6], [5,3], [6,7], [7,5]]

あなたの仕事は、ボックス描画文字を使用して、この順列を視覚化することで(Unicodeコードポイント:U + 2500、U + 2502、U + 250C、U + 2510、U + 2514、U + 2518、U + 253C)。この視覚化は、次の制約を満たす必要があります。

最初と最後の行は正確に次のとおりです。

0 1 2 3 4 5 6 7

それらの間で、ボックス描画文字に合うように、それぞれ最大15文字の行を使用できます(少なくとも4行必要です)。行は、最初の行の1つの数字の下で垂直に始まり、最後の行の対応する数字の上で垂直に終わる必要があります。8本の線を接続する必要があります。また、クロスするのはビアのみです(これは常にクロスであり、2本のラインが接触することはありません)。ラインの正確なパスはあなた次第です(そして、特にゴルフに適したレイアウトを見つけることがこの課題の中心です)。有効な出力は次のとおりです。

0 1 2 3 4 5 6 7
│ │ └─┼┐│ │ └┐│
└─┼─┐ ││└─┼─┐││
┌─┘ │ ││  │ │││
│ ┌─┼─┘│  │ │││
│ │ │ ┌┼──┘ │││
│ │ │ │└┐ ┌─┼┼┘
│ │ │ │ │ │ │└┐
0 1 2 3 4 5 6 7

ただし、正しい数字を正しく接続する他のレイアウトも問題ありません。選択した出力を回答に表示してください。

プログラムまたは関数を記述できますが、入力は受け付けません。ダイアグラムをSTDOUT(または最も近い代替)に出力するか、文字列または文字列のリスト(それぞれが1行を表す)の形式で関数の戻り値として出力します。

標準の規則が適用されるため、最短のコード(バイト単位)が優先されます。


1
Unicodeをサポートしない言語に他のシンボルを使用できますか?
flawr

3
この課題は基本的に、提供された出力をコピーして貼り付けることに要約されます... 01234567入力としての順列を取得し、次にそれを接続するの01234567どうですか?自分でリンクを把握する必要があるように?特にゴルフでは、それは非常に難しい課題になります。
-shooqie

5
@shooqieこれはサンドボックスで議論されました。それは確かに非常に異なる挑戦であり、私はそれをある時点で同様に投稿することを検討しています。ただし、上記の例をコピーアンドペーストするよりも、この課題には多くのことがあると思います。無数の異なる許容可能な出力があり、上記のものは特に圧縮が困難ですが、他のもの(既存の回答で使用されるものなど)ははるかに圧縮可能です。課題は、単一の圧縮可能な文字列を見つけることです。これは、数バイトでレイアウトを自動的に見つけることとは大きく異なります。
マーティンエンダー

2
誰かがこれを悪で解決しなければなりません。
RK。

3
@Holgerそれをしない正当な理由があります:それから人々は単一の文字で数バイトの情報を保存できる大きなユニコード文字でそれをパックすることによって文字列をエンコードすることができます。例。
マーティンエンダー

回答:


13

実際には、69バイト

"│ ┌┘│ │└┐ │└┐└┐""┌┘└┼┐└┼┐ └┼┐└┐""└┼┐│└┐┌┘└┐┌┘│""┌┼─┘"3*"│┌┘"+8r' j;)

オンラインでお試しください!(オンラインインタプリタでは、配置が少し台無しになっています)

実際、ここには大きな利点があります-ボックス描画文字はすべてCP437にあるため、それぞれが1バイトだけです。理論的には必要な各文字を4ビットでエンコードできますが(一意の文字は9個しかないため)、文字列の圧縮によって節約された31バイトは、実際には文字列処理能力が非常に低いため失われます。これは、8x4の構成でも同じスコアになることを意味します。8x4は(垂直方向の)可能な最短構成であるように見えるため、これが最適です。

3バイトのMartinに感謝します!

さらに4バイトのTimmyDに感謝します!

説明:

"│ ┌┘│ │└┐ │└┐└┐""┌┘└┼┐└┼┐ └┼┐└┐""└┼┐│└┐┌┘└┐┌┘│""┌┼─┘"3*"│┌┘"+8r' j;)
"│ ┌┘│ │└┐ │└┐└┐""┌┘└┼┐└┼┐ └┼┐└┐""└┼┐│└┐┌┘└┐┌┘│""┌┼─┘"3*"│┌┘"+         push the individual lines, using string multiplication to shorten repeated sections
                                                              8r' j   push the string "0 1 2 3 4 5 6 7" (range(8), join on spaces)
                                                                   ;)  make a copy and move it to the bottom of the stack

1
技術的には、言語がサポートするシングルバイトエンコーディング(存在する場合)を使用して、同じバイトを出力し、「出力はCP437でエンコードされている」と言って、シングルバイトエンコーディングも使用できます。 、しかし誰もそれを取り上げていないようです。¯\ _(ツ)_ /¯
マーティン・エンダー

21

PowerShellのV2 +、172 153 148 145 142 131 123バイト(81文字)

($a=""+0..7)
$b='┌┘'
"│$b$('┌┼─┘'*3)
└┼┐$('│└─┐'*3)
$b$('└┼─┐'*3)│
│ $($b*6)│"
$a

インラインコードブロックを使用することで、いくつかの変数の必要性を排除し、さらに織り込みをしました。これはおそらく最適の数バイト以内です。

まず、スペースで結合さ$aれた範囲に等しい値を設定0..7します。これは$ofs、配列のデフォルト(出力フィールド区切り文字)がスペースであるため、配列が文字列化されている場合""+(このような演算子を使用すると、PowerShellは暗黙的に右側のオブジェクトを左側のオブジェクトとしてキャストしようとします)、結果は、スペースで区切られた範囲です。

それは括弧にカプセル化され、結果がパイプラインに追加されます。次に、1つのヘルパー変数をセットアップ$bし、適切な変数を配置した4行の出力(リテラル改行で分割)を繰り返し、繰り返しセクションにインラインコードブロックを使用し、その後に続け$aます。4行と$aは、パイプライン上にも配置され、出力は最後に暗黙的になります。

PS C:\Tools\Scripts\golfing> .\visualize-bit-weaving.ps1
0 1 2 3 4 5 6 7
│┌┘┌┼─┘┌┼─┘┌┼─┘
└┼┐│└─┐│└─┐│└─┐
┌┘└┼─┐└┼─┐└┼─┐│
│ ┌┘┌┘┌┘┌┘┌┘┌┘│
0 1 2 3 4 5 6 7

1
下部で行ったり来たりする素晴らしい作業。:)
マーティンエンダー

11

JavascriptをES6、168の 167バイト

編集:おっと、関数の一部で|U + 2502の代わりにパイプ文字を使用していたことが判明し、バイトカウントが更新されました。

_=>((n=`0 1 2 3 4 5 6 7 `)+[...`6452301`].map(i=>`${(d=n=>`│ `.repeat(n))(i)}└┐│ ${r=d(6)}┌┼┘ ${r}│└┐ ${d(6-i)}`).join``+n).match(/.{16}/g).join`
`

文字列を返します。

出力:

0 1 2 3 4 5 6 7 
│ │ │ │ │ │ └┐│ 
│ │ │ │ │ │ ┌┼┘ 
│ │ │ │ │ │ │└┐ 
│ │ │ │ └┐│ │ │ 
│ │ │ │ ┌┼┘ │ │ 
│ │ │ │ │└┐ │ │ 
│ │ │ │ │ └┐│ │ 
│ │ │ │ │ ┌┼┘ │ 
│ │ │ │ │ │└┐ │ 
│ │ └┐│ │ │ │ │ 
│ │ ┌┼┘ │ │ │ │ 
│ │ │└┐ │ │ │ │ 
│ │ │ └┐│ │ │ │ 
│ │ │ ┌┼┘ │ │ │ 
│ │ │ │└┐ │ │ │ 
└┐│ │ │ │ │ │ │ 
┌┼┘ │ │ │ │ │ │ 
│└┐ │ │ │ │ │ │ 
│ └┐│ │ │ │ │ │ 
│ ┌┼┘ │ │ │ │ │ 
│ │└┐ │ │ │ │ │ 
0 1 2 3 4 5 6 7 

追加:@TimmyDのメソッドを使用して、別の167バイトのソリューションがあります。

(n=`0 1 2 3 4 5 6 7
`,a=`│┌┘ `,b=`└┼─┐`,d=`┌┼─┘`,f=` │└┐`)=>[n,a,a,a,a,`
`,b,b,b,`└┼┐
┌┘`,d,d,d,`│
│`,f,f,f,` │
`,n].join``

8

JavaScript(ES6)、137 134バイト

f=
_=>`0
2525252
1 1 1 1
24242423525252 3 1 1 1 3 242424
0`.replace(/\d/g,d=>`0 1 2 3 4 5 6 7,└┼┐,┌┘,│
│,│ , │`.split`,`[d])  
;
o.textContent=f();
<pre id=o></pre>

ベルリンガーとして、私はすぐにこれをPlain Hunt Majorの最初の2行として認識しました(リンクされた画像は0-7ではなく1-8を使用していることに注意してください)。


4

Pyth - 119の 104 100 81バイト

非常に簡単です。(今回は実際にはバイトです)。

js[KjdU8cX."sz¨ú¨ãÆhÆ?\ÕüÓ¼xFNøa"_G"│┌┘└┼─┐ "15K

こちらからオンラインでお試しください

@TimmyDの出力も盗みました。

0 1 2 3 4 5 6 7
│┌┘ │┌┘ │┌┘ │ │
└┼─┐└┼─┐└┼─┐└┐│
┌┘┌┼─┘ └┐│┌┼─┼┘
│ │└┐ ┌─┼┘│└┐└┐
0 1 2 3 4 5 6 7

3

MS-DOSバッチ、136バイト

@echo 0 1 2 3 4 5 6 7
@echo ³ÚÙ ³ÚÙ ³ÚÙ ³ÚÙ
@echo ÀÅÄ¿ÀÅÄ¿ÀÅÄ¿ÀÅ¿
@echo ÚÙÚÅÄÙÚÅÄÙÚÅÄÙ³
@echo ³ ³À¿ ³À¿ ³À¿ ³
@echo 0 1 2 3 4 5 6 7

@TimmyDの出力を使用します。これはWindows Batchでも機能する可能性がありますが、私のコードページはCP437ではなくCP850です。


CP437を使用するかCP850を使用するかに関係なく、Windowsでも動作します。
ホルガー

@Holger Huh、私はとにかくそれを試してみるべきだったと思う、ただ見るだけ!
ニール

3

MATLAB /オクターブ、112 109バイト

a='0 1 2 3 4 5 6 7';d=['└┐│ ';'┌┼┘ ';'│└┐ '];e=repmat('│ ',3,1);[a;d d d d;e d d d e;a]

出力:

0 1 2 3 4 5 6 7
└┐│ └┐│ └┐│ └┐│
┌┼┘ ┌┼┘ ┌┼┘ ┌┼┘
│└┐ │└┐ │└┐ │└┐
│ └┐│ └┐│ └┐│ │
│ ┌┼┘ ┌┼┘ ┌┼┘ │
│ │└┐ │└┐ │└┐ │
0 1 2 3 4 5 6 7

私のコードは@Dendrobium@Neil出力基づいています。



注意:リンクされたコメントは削除されました。あなたの出力は@TimmyDの出力よりもゴルフに適しているというOPでした。
エリックアウトゴルファー

3

///、112バイト(100文字)

/8/0 1 2 3 4 5 6 7//9/│//A/└┐//B/┌┼┘/8/C/9 A9 A9 A9//D/9A 9A 9A 9/
AC
B B B B
DA
C 9
9 B B B 9
9 D
8

-3バイトありがとう@MartinEnder!
-9バイトをありがとう@MartinEnder!
15文字のルールを指摘してくれた@MartinEnder(OP)に感謝

@TimmyDの@Marcoの出力を使用します

0 1 2 3 4 5 6 7
└┐│└┐│└┐│└┐│
┌┼┘┌┼┘┌┼┘┌┼┘
│└┐│└┐│└┐│└┐
│└┐│└┐│└┐││
│┌┼┘┌┼┘┌┼┘│
││└┐│└┐│└┐│
0 1 2 3 4 5 6 7


0

Python3、209バイト

lambda s="0 1 2 3 4 5 6 7\n":s+"│┌┘ │┌┘ │┌┘ │ │\n└┼─┐└┼─┐└┼─┐└┐│\n┌┘┌┼─┘ └┐│┌┼─┼┘\n│ │└┐ ┌─┼┘│└┐└┐\n"+s

文字列を返します。

2バイトを節約してくれた@Megoに感謝します!

キャラクター本体のクレジットは@TimmyDに移動します!


2
このa,部分は必要ありません。これにより、パラメーターで呼び出す必要もなくなります。
メゴ

0

Sprects、99バイト(87文字)

$8
AC
BE
DA
C 9
9E 9
9 D
8$E B B B$D9A 9A 9A 9$C9 A9 A9 A9$B┌┼┘$A└┐$9│$80 1 2 3 4 5 6 7

@Marcoの出力を使用します(16文字ごとに改行(正規表現:(.{15}).-> \1\n)に置き換えます)。

0 1 2 3 4 5 6 7
└┐│└┐│└┐│└┐│
┌┼┘┌┼┘┌┼┘┌┼┘
│└┐│└┐│└┐│└┐
│└┐│└┐│└┐││
│┌┼┘┌┼┘┌┼┘│
││└┐│└┐│└┐│
0 1 2 3 4 5 6 7


0

Bash + GNU sed、140バイト

sed 'h
s/$/nxxxacnb b b bnyyycanc xxxcnc b b b cnc yyyc/
:
s/x/ac /
s/y/ca /
s/a/└┐/
s/b/┌┼┘/
t
y/cn/│\n/
G'<<<'0 1 2 3 4 5 6 7'

出力:

0 1 2 3 4 5 6 7
└┐│ └┐│ └┐│ └┐│
┌┼┘ ┌┼┘ ┌┼┘ ┌┼┘
│└┐ │└┐ │└┐ │└┐
│ └┐│ └┐│ └┐│ │
│ ┌┼┘ ┌┼┘ ┌┼┘ │
│ │└┐ │└┐ │└┐ │
0 1 2 3 4 5 6 7

@TimmyDの出力の使用:142バイト

sed 'h
s/$/npbcccnsurdddnbeeepnp bbbbbbp/
:
s/b/qt/
s/c/quot/
s/d/psor/
s/e/suor/
t
y/nopqrstu/\n─│┌┐└┘┼/
G'<<<'0 1 2 3 4 5 6 7'

出力:

0 1 2 3 4 5 6 7
│┌┘┌┼─┘┌┼─┘┌┼─┘
└┼┐│└─┐│└─┐│└─┐
┌┘└┼─┐└┼─┐└┼─┐│
│ ┌┘┌┘┌┘┌┘┌┘┌┘│
0 1 2 3 4 5 6 7

0

Tcl、205バイト

puts "[set B "0 1 2 3 4 5 6 7"]
│┌┘ │┌┘ │┌┘ └┐│
└┼┐ └┼─┐└┼──┐││
┌┘└─┐│ └┐│┌─┼┼┘
│ ┌─┼┘┌─┼┘│ │└┐
$B"

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

出力

0 1 2 3 4 5 6 7
│┌┘│┌┘│┌┘└┐│
└┼─┐└┼──┐┐││
┌┘└─┐│└┐│┌─┼┼┘
│┌─┼┘┌─┼┘││└┐
0 1 2 3 4 5 6 7

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