Vẽ các gốc lồng nhau


13

Nhiều công thức trong toán học liên quan đến các gốc lồng nhau (dấu hiệu căn bậc hai bên trong các dấu hiệu căn bậc hai khác). Nhiệm vụ của bạn ở đây là vẽ những thứ này bằng nghệ thuật ascii.

Thông số kỹ thuật

Bạn sẽ được cung cấp hai số nguyên, số bên trong gốc và số lượng gốc. Tôi nghĩ rằng cách tốt nhất để giải thích những gì bạn phải làm là với một ví dụ. Đây là đầu ra cho 2, 4:

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

Dưới đây là một số điều cần lưu ý:

  • Chiều cao của mỗi gốc tăng thêm một
  • Chiều dài của chiều cao _luôn 5nhân với chiều cao
  • Có một khoảng trống sau cái cuối cùng /và trước khi gốc bên trong bắt đầu
  • Số bên trong sẽ không bao giờ lớn hơn 4 chữ số
  • Nếu số lượng gốc là 0, chỉ cần xuất số lượng
  • Đặt thêm không gian để đệm nó vào một hình chữ nhật là tùy thuộc vào bạn
  • Đây là , vì vậy mã ngắn nhất tính bằng byte sẽ thắng!

Các trường hợp thử nghiệm

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

23, 0:
23

4, 1:
  _____
\/ 4

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

12
Tôi cảm thấy như đây sẽ là một thử thách tốt hơn một chút nếu tất cả các thanh ngang phải kết thúc tại cùng một điểm.
Greg Martin

Câu trả lời:


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

Hơi vô dụng:

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)

Đầu ra:

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

print(' '*i+'_____'*i or n)tiết kiệm 7 byte. EDIT print(' '*i+i*'_____'or n)lưu 8.
Jonathan Allan

Cảm ơn bạn. Tôi không biết bạn có thể sử dụng 'hoặc' như thế.
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>

Lưu 3 byte nếu tham số đầu tiên có thể là một chuỗi chứ không phải là một số.


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 mà vĩ đại khủng khiếp.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.