ネストされたラジカルを描く


13

数学の多くの式には、ネストされたラジカル(他の平方根記号内の平方根記号)が含まれます。ここでのタスクは、アスキーアートを使用してこれらを描画することです。

スペック

2つの整数、ラジカル内の数、およびラジカルの数が与えられます。あなたがしなければならないことを説明する最良の方法は、例を使うことだと思います。の出力は2, 4次のとおりです。

        ____________________
\      /       _______________
 \    /  \    /     __________
  \  /    \  /  \  /   _____
   \/      \/    \/  \/ 2

以下に注意する点を示します。

  • 各ラジカルの高さは1ずつ増加します
  • の長さ_は常に5高さの倍です
  • 最後の後/、次の内部ラジカルが始まる前にスペースがあります
  • 内部の数字は4桁を超えることはありません
  • 部首の数が0の場合、単に数を出力します
  • 余分なスペースを入れて長方形に埋め込むのはあなた次第です
  • これはなので、バイト単位の最短コード勝ちです!

テストケース

2, 4:
        ____________________
\      /       _______________
 \    /  \    /     __________
  \  /    \  /  \  /   _____
   \/      \/    \/  \/ 2

23, 0:
23

4, 1:
  _____
\/ 4

1234, 3:
      _______________
\    /     __________
 \  /  \  /   _____
  \/    \/  \/ 1234

12
水平バーがすべて同じポイントで終了する必要がある場合、これは少し良いチャレンジになると思います。
グレッグマーティン

回答:


2

Python 3.5、145 137バイト

def s(n,x):[([print(' '*j+'\\'+'  '*i+'/ '+' '*j,end='')for j in range(x-i-1,-1,-1)],print('  '*i+i*'_____'or n))for i in range(x,-1,-1)]

わずかに未使用:

def s(n,x):
    for i in range(x,-1,-1):
        for j in range(x-i-1,-1,-1):
            print(' '*j+'\\'+'  '*i+'/ '+' '*j,end='')
        print('  '*i+i*'_____' or n)

出力:

s(2,4)
        ____________________
\      /       _______________
 \    /  \    /     __________
  \  /    \  /  \  /   _____
   \/      \/    \/  \/ 2

print(' '*i+'_____'*i or n)7バイト節約します。EDITはprint(' '*i+i*'_____'or n)8セーブ
ジョナサン・アラン

ありがとうございました。そのように「または」を使用できるとは知りませんでした。
ジェームズホリス

2

JavaScript、133 132 131バイト

f=(n,r,q=r)=>~r?'1\\0/1 '[x='repeat'](d=q-r).replace(/\d/g,i=>' '[x](+i?d-=.5:r*2))+(r?' '[x](r*2)+'_'[x](5*r):n)+`
`+f(n,r-1,q):''


F=(n,r)=>console.log( f(n,r) )
F(2,4)
F(23,0)
F(4,1)
F(1234,3)
.as-console-wrapper{max-height:100%!important;top:0}


2

JavaScript(ES6)、124バイト

f=(s,n,i=0,r=(n,c=` `)=>c.repeat(n))=>n?r(n+n)+r(n*5,`_`)+`
`+f(s,n-1).replace(/^/gm,_=>r(i)+`\\${r(n+~i<<1)}/`+r(++i)):s+``
<div oninput=o.textContent=f(s.value,+n.value)><input id=s><input id=n type=number min=0><pre id=o>

最初のパラメーターが数値ではなく文字列の場合、3バイトを節約します。


1

PHP、178バイト

for($r=[" $argv[1]"];$i++<$argv[2];$r[]=$p("",2*$i).$p(_,5*$i,_))for($k=-1;++$k<$i;)$r[$k]=($p=str_pad)("\\".$p("",2*$k)."/",2*$i," ",2).$r[$k];echo join("\n",array_reverse($r));

ひどく長いです。

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