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

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

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}


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.


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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.