バイナリブランチ


15

2進数が与えられた場合、あなたの仕事はその深さ2の「分岐」を作成することです。

たとえば、0入力として指定された場合、これを正確に出力する必要があります。

     /000
  /00
 /   \001
0
 \   /010
  \01
     \011

これは、ブランチがどのように作成されるべきかをかなり自明であるはずです。深さ2は、最大2桁までの数の分岐を計算することを意味します。また、上にゼロを、下に1を使用して、分岐を順番に計算します。

その他のテストケース:

0

     /000
  /00
 /   \001
0
 \   /010
  \01
     \011

1

     /100
  /10
 /   \101
1
 \   /110
  \11
     \111

00

       /0000
   /000
  /    \0001
00
  \    /0010
   \001
       \0011

01

       /0100
   /010
  /    \0101
01
  \    /0110
   \011
       \0111

10

       /1000
   /100
  /    \1001
10
  \    /1010
   \101
       \1011

11

       /1100
   /110
  /    \1101
11
  \    /1110
   \111
       \1111

ルール

  • あなたは以外の入力中の文字を受け取ることはありません10
  • 0 < length of input < 11
  • 行末に許可される末尾の空白。

4
0 < length of input < 11ある1110進数またはバイナリは?:P
ETHproductions

@ETHproductions 10進数:P
Okx

回答:


4

ゼリー39 38 バイト

L⁶ẋ,W;“/0¶\1 ”ṃ@“ð&ẏ{×ẏĊfẏȷ®ỤṪ⁻ʠaƇGⱮȷ’

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

どうやって?

印刷されるアートは次のとおりです。

L  L /N00
L /N0
L/ L \N01
N
L\ L /N10
L \N1
L  L \N11

where Nは入力文字列Lで、入力文字列の長さのスペースの文字列です。

そのようなものとして、それは、8つのコンポーネント(構成されLN/0、改行文字、\1、および空白文字)、したがって(ゼリー中のベース250の数として圧縮されてもよい)ベース8数として格納されてもよいです。原子は(事実上ものを使用する任意の桁数を定義してもよい)リストにベースの変換とインデックスを組み合わせます。

L⁶ẋ,W;“/0¶\1 ”ṃ@“ð&ẏ{×ẏĊfẏȷ®ỤṪ⁻ʠaƇGⱮȷ’ - Main link: binary string s  e.g. "100"
 ⁶                                     - space character
  ẋ                                    - repeat by:
L                                      -     length(s)                    [' ',' ',' ']
    W                                  - wrap s in a list                 [['1','0','0']]
   ,                                   - pair               [[' ',' ',' '],['1','0','0']]
      “/0¶\1 ”                         - char list: ['/','0',<newline>,'\',','1',' ']

     ;                                 - concatenate        [[' ',' ',' '],['1','0','0'],'/','0',<newline>,'\',','1',' ']
                “ð&ẏ{×ẏĊfẏȷ®ỤṪ⁻ʠaƇGⱮȷ’ - base 250 number: 91531517467460683226372755994113932025707662527
              ṃ@                       - base decompression [reversed @arguments]
                                        -     this uses the concatenated list above as
                                        -     the 8 digits of that number in base 8.
                                        - implicit print

5

バッチ、178 170 159バイト

@set/pb=
@set s=%b:0= %
@set s=%s:1= %
@set e=@echo %s%
%e%  %s% /%b%00
%e% /%b%0
%e%/ %s% \%b%01
@echo %b%
%e%\ %s% /%b%10
%e% \%b%1
%e%  %s% \%b%11

編集:@ ConorO'Brienのおかげで11バイトを保存しました。


149バイトしかカウントしません。
エンジニアトースト

ニールは改行をWindowsスタイルのCRLFとしてカウントしているのに対し、TIOはそれらをLFとしてカウントしていると思います。LFがWindowsのバッチで機能するかどうかはわかりません。
アレックスA.

4

JavaScript(ES6)、112バイト

s=>`22   /300
2 /30
2/2  4301
3
242  /310
2 431
22   4311`.replace(/./g,n=>[s.replace(/./g,' '),s,'\\'][n-2]||n)

デモ


どうして[n,n,s.replace(/./g,' '),s,'\\'][n]
tsh

@tsh 数字以外の文字を無視するので/\d/gはなく、検索する必要があり/./gます。
アーナルド

4

Pythonの3117の 109バイト

lambda k:'ll   /g00\nl /g0\nl/l  \g01\ng\nl\l  /g10\nl \g1\nll   \g11'.replace('l',' '*len(k)).replace('g',k)

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

印刷時のフォーマット文字列は次のようになります。

ll   /g00
l /g0
l/l  \g01
g
l\l  /g10
l \g1
ll   \g11

これは、長さ1の文字列では既に適切に見えます。やらなければならないのは、lをgの長さと等しい長さのスペースに置き換えることです。もちろん、gは元の文字列に置き換えられます。


1
名前のないラムダを使用してバイトを保存できます。これは、文字列を返すことが許容されるため、印刷を削除し、さらに7バイトを保存できることを意味します。あなたは、107にあなたを降りる複数行の文字列を使用して、より多くの2 ...保存しすることができますTIO
ジョナサン・アラン

4

パイソン3.6、172の 153 128バイト

文字通り、これよりも簡単ではありません...これは、実際にアルゴリズムで生成する最初の試みよりも短いです。なんて悲しい。

k=input()
l=len(k)
b=' '*l
print(f'{b*2}   /{k}00\n{b} /{k}0\n{b}/ {b}\\{k}01\n{k}\n{b}\\ {b}/{k}10\n{b} \\{k}1\n{b*2} \\{k}01')

@Leoのおかげで-19バイト
@ L3viathanのおかげで-25バイト


a、c、dをドロップし、最後の文字列でbとスペースのみを使用する方が短いと思います。(はb*2+' '
レオ

奇妙なことに、まだ172バイトのようです。
Programmer5000

@ programmer5000申し訳ありませんが、それはコード自体の更新を忘れたためです。
ハイパーニュートリノ

書式文字列を使用して26文字を保存します。print(f'{a}/{k}00\n{b} /{k}0\n{b}/ {b}\\{k}01\n{k}\n{b}\\ {b}/{k}10\n{b} \\{k}1\n{b*2} \\{k}01')
L3viathan

@ L3viathanその構文を確認できますか?構文エラーが発生しています。
ハイパーニュートリノ

3

C、170 168バイト

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

n;f(char*s){n=strlen(s);printf("%*c%s00\n%*c%s0\n %*c%*c%s01\n%s\n %*c%*c%s10\n%*c%s1\n%*c%s11",2*n+4,47,s,n+2,47,s,n,47,n+3,92,s,s,n,92,n+3,47,s,n+2,92,s,2*n+4,92,s);}

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


1
a /または` padded to width n + 1 , why not print a space, and then a / `を印刷するか\、幅にパディングするのではなくn
ニール

うーん、もう一度試してみましょう。むしろ、印刷未満/または\幅にパディングをn+1、なぜスペースを印刷し、その後ではない/か、\幅のパディングn
ニール

3

Python 3、96バイト

lambda s:"""   /00
 /0
/  \01

\  /10
 \1
   \11""".translate([s,' '*len(s),s])

オンラインでお試しください!印刷できない文字は正しく表示されません。文字列の形式は、officialaimm年代と同じではなく、\x01l\x02g

ll   /g00
l /g0
l/l  \g01
g
l\l  /g10
l \g1
ll   \g11

Python 3のflexibletranslateによる文字列置換を使用します。変換リストは、[s,' '*len(s),s]マッピングさ\x01' '*len(s)して\x02までs。大きい文字は、リストの範囲外のインデックスを与えるため、変更されません。\x00nullバイトがプログラム終了として読み取られるため、最初のエントリが無駄になるため、使用できませんでした。



2

積み上げ、81バイト

{!n#'' '*@s's  s /n00
s /n0
s/ s \n01
n
s\ s /n10
s \n1
s  s \n11' '\l'$#~1/repl}

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

残念ながら、あまり面白くない。最も興味深い部分は次のとおりです。

'\l'$#~1/repl
         repl     replace all
'\l'              letters
    $#~           by evaluating
       1/         over one argument (otherwise, it would evaluate the "last" thingy)

これは基本的に文字列補間ですが、組み込みよりも10バイト短くなります。


2

///、116バイト

/[/\\\///x///*/[y\\0[ y\/\/y\\1[ y\//**********/y///s/yx//~/  /~ ss[x00
 s[x0
s[~s\\x01
x
s\\~s[x10
 s\\x1
~ ss\\x11

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

入力は次のとおりです。

/[/\\\///x/INPUT HERE!!!!!!!!//*/[y\\0[ y\/\/y\\1[ y\//**********/y///s/yx//~/  /~ ss[x00
 s[x0
s[~s\\x01
x
s\\~s[x10
 s\\x1
~ ss\\x11

基本的なテンプレートを使用し、必要に応じてスペースと文字を追加することで機能します。

バイト数が増えたのは、ØrjanJohansenが最初に間隔を処理しなかったことに気付いたためです。しかし、問題は修正済みです。


動作を確認する前に、賛成票を渡しましたが、長さの間隔を調整していません。そのようなリテラル入力形式でそれを行う簡潔な方法は見当たりません。
Ørjanヨハンセン

または、入力の長さには11の制限があるため、まったく絶望的ではありません。
ØrjanJohansen

のようなものを使用する/*/\/y0\/ y\/\/y1\/ y\//**********/y///s/yx/と、でスペースを取得できますs
Ørjanヨハンセン

@ØrjanJohansenおっと、間隔を忘れてしまいました...ありがとう。あなたのコードをどのように答えに組み入れますか?
同志SparklePony

FWIW /00/0|0//01/0|1//10/1|0//11/1|1//|/<\\y>//z/<y>x//<y>0/ //<y>1/ //<\\y\>///s/z/は任意の長さを処理できます。
Ørjanヨハンセン

1

Pythonの2101,91バイト 113バイト

lambda y:'   ++/_00\n +/_0\n+/  +\\_01\n_\n+\\  +/_10\n +\\_1\n   ++\\_11'.replace('_',y).replace('+',' '*len(y))

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

入力は、長さ1または2の0と1の文字列です!それは0,01,10または11です!

+12バイト-長さ2の入力の\の間隔を修正しました。


3
your output does not adjust as per the length of the string.
officialaimm

1
...そして質問に「0 < length of input < 11」が指定されています。
ジョナサンアラン

1
@officialaimmそうそう。気づいた。ありがとう。私の答えを更新します!Jonathan ..それはタイプミスでした。修正してくれてありがとう。
Keerthana Prabhakaran

0

、34バイト

P<³←⮌θF²«J³⁻×⁴ι²θP<²Iι↗F²«P⁺⁺θικ↓↓

オンラインでお試しください!リンクは、コードの詳細バージョンです。説明:

P<³

/sと\sの左のペアを印刷します。

←⮌θ

現在の位置で右揃えで入力を印刷します。

F²«

枝をループします。

J³⁻×⁴ι²

ブランチの位置を移動します。これは、中間の分岐が常に同じ絶対位置になるように、ルートが右揃えで印刷されたためです。

θ

入力を印刷します。

P<²

左右一対を印刷/して\

Iι

ブランチサフィックスを出力します。

最初の葉に移動します。

F²«

葉をループします。

P⁺⁺θικ

入力とブランチおよびリーフサフィックスを出力します。

↓↓

次の葉に移動します。注:末尾の空白が許容される場合F²⁺⁺⁺θι궶、1バイト節約されます。

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