Gambar radikal bersarang

13

Banyak rumus dalam matematika melibatkan radikal bersarang (tanda akar kuadrat di dalam tanda akar kuadrat lainnya). Tugas Anda di sini adalah menggambar ini menggunakan ascii art.

Spesifikasi

Anda akan diberi dua bilangan bulat, jumlah di dalam radikal, dan jumlah radikal. Saya pikir cara terbaik untuk menjelaskan apa yang harus Anda lakukan adalah dengan contoh. Ini adalah output untuk 2, 4:

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

Berikut beberapa hal yang perlu diperhatikan:

  • Tinggi masing-masing radikal meningkat satu
  • Panjangnya _selalu 5kali tinggi
  • Ada ruang setelah yang terakhir /dan sebelum radikal dalam berikutnya dimulai
  • Angka di dalam tidak akan pernah lebih dari 4 digit
  • Jika jumlah radikal adalah 0, cukup keluarkan jumlahnya
  • Menempatkan ruang ekstra untuk memasukkannya ke dalam persegi panjang terserah Anda
  • Ini adalah , jadi kode terpendek dalam byte menang!

Uji Kasus

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

23, 0:
23

4, 1:
  _____
\/ 4

1234, 3:
      _______________
\    /     __________
 \  /  \  /   _____
  \/    \/  \/ 1234
Maltysen
sumber
12
Saya merasa ini akan menjadi tantangan yang sedikit lebih baik jika palang horizontal semuanya harus berakhir pada titik yang sama.
Greg Martin

Jawaban:

2

Python 3.5, 145 137 byte

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

Sedikit tidak berbulu:

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)

Keluaran:

s(2,4)
        ____________________
\      /       _______________
 \    /  \    /     __________
  \  /    \  /  \  /   _____
   \/      \/    \/  \/ 2
James Hollis
sumber
print(' '*i+'_____'*i or n)menghemat 7 byte. EDIT print(' '*i+i*'_____'or n)menghemat 8.
Jonathan Allan
Terima kasih. Saya tidak tahu Anda bisa menggunakan 'atau' seperti itu.
James Hollis
2

JavaScript, 133 132 131 byte

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}

Washington Guedes
sumber
2

JavaScript (ES6), 124 byte

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>

Simpan 3 byte jika parameter pertama bisa berupa string daripada angka.

Neil
sumber
1

PHP, 178 byte

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

bah itu sangat panjang.

Titus
sumber