绘制嵌套的部首


13

数学中的许多公式都涉及嵌套的部首(其他平方根符号内的平方根符号)。您在这里的任务是使用ascii艺术画这些。

眼镜

您将得到两个整数,部首内部的个数和部首个数。我认为解释您的工作的最佳方法是举一个例子。这是输出2, 4

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

这里有一些注意事项:

  • 每个部首的高度增加一
  • 的长度_始终5是高度的乘积
  • 在最后/一个内在根之后和下一个内在根开始之前有一个空格
  • 里面的数字永远不会大于4位数字
  • 如果部首数为0,则输出该数
  • 放置额外的空间以将其填充为矩形取决于您
  • 这是,因此以字节为单位的最短代码胜出!

测试用例

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

23, 0:
23

4, 1:
  _____
\/ 4

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

12
我觉得,如果所有水平条都必须在同一点结束,那将是一个稍微更好的挑战。
格雷格·马丁

Answers:


2

蟒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个字节。编辑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));

太长了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.