วาดอนุมูลที่ซ้อนกัน


13

หลายสูตรในคณิตศาสตร์เกี่ยวข้องกับอนุมูลที่ซ้อนกัน งานของคุณที่นี่คือการวาดเหล่านี้โดยใช้ศิลปะ ASCII

รายละเอียด

คุณจะได้รับจำนวนเต็มสองจำนวนจำนวนที่อยู่ในรากและจำนวนของอนุมูล ฉันคิดว่าวิธีที่ดีที่สุดในการอธิบายสิ่งที่คุณต้องทำคือตัวอย่าง นี่คือผลลัพธ์สำหรับ2, 4:

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

นี่คือสิ่งที่ควรทราบ:

  • ความสูงของแต่ละอนุมูลจะเพิ่มขึ้นทีละหนึ่ง
  • ความยาวของตัวคูณความสูง_เสมอ5
  • มีช่องว่างหลังจากที่ผ่านมา/และก่อนที่จะเริ่มหัวรุนแรงภายในต่อไปคือ
  • จำนวนที่อยู่ภายในจะไม่เกิน 4 หลัก
  • ถ้าจำนวนของอนุมูลเป็น 0 เพียงเอาท์พุทจำนวน
  • การวางช่องว่างเพิ่มเติมเพื่อวางลงในสี่เหลี่ยมนั้นขึ้นอยู่กับคุณ
  • นี่คือดังนั้นรหัสที่สั้นที่สุดในหน่วยไบต์ชนะ!

กรณีทดสอบ

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

23, 0:
23

4, 1:
  _____
\/ 4

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

12
ฉันรู้สึกว่านี่จะเป็นความท้าทายที่ดีขึ้นเล็กน้อยถ้าแถบแนวนอนทั้งหมดต้องจบที่จุดเดียวกัน
Greg Martin

คำตอบ:


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)]

ungolfed เล็กน้อย:

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
Jonathan Allan

ขอขอบคุณ. ฉันไม่รู้ว่าคุณสามารถใช้ 'หรือ' อย่างนั้น
James Hollis


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.