İç içe radikaller çizme


13

Matematikteki birçok formül iç içe geçmiş radikalleri (diğer kare kök işaretleri içindeki kare kök işaretleri) içerir. Buradaki göreviniz ascii sanatı kullanarak bunları çizmektir.

gözlük

Size radikal içindeki sayı ve radikal sayısı olmak üzere iki tamsayı verilecektir. Yapmanız gerekeni açıklamanın en iyi yolunun bir örnek olduğunu düşünüyorum. İşte çıktı 2, 4:

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

Dikkat edilmesi gereken bazı noktalar:

  • Her radikalin yüksekliği bir kat artar
  • _'S uzunluğu her 5zaman yüksekliğinin katıdır
  • Sondan sonra /ve bir sonraki iç radikal başlamadan önce bir boşluk var
  • İçindeki sayı asla 4 basamaktan fazla olmayacak
  • Radikal sayısı 0 ise, sadece sayı
  • Bir dikdörtgene yerleştirmek için fazladan boşluk bırakmak size kalmış
  • Bu , bayt en kısa kod kazanır!

Test Durumları

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

23, 0:
23

4, 1:
  _____
\/ 4

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

12
Yatay çubukların aynı noktada bitmesi gerekiyorsa, bunun biraz daha iyi bir meydan okuma olacağını düşünüyorum.
Greg Martin

Yanıtlar:


2

Python 3.5, 145 137 bayt

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

Hafifçe soluksuz:

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)

Çıktı:

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

print(' '*i+'_____'*i or n)7 bayt kaydeder. EDIT print(' '*i+i*'_____'or n)8 kaydeder.
Jonathan Allan

Teşekkür ederim. 'Veya' bu şekilde kullanabileceğinizi bilmiyordum.
James Hollis

2

JavaScript, 133 132 131 bayt

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 bayt

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>

İlk parametre sayı yerine dize olabiliyorsa 3 bayt kaydedin.


1

PHP, 178 bayt

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

çok uzun.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.