Zeichnen Sie verschachtelte Radikale

13

Viele mathematische Formeln enthalten verschachtelte Radikale (Quadratwurzelzeichen innerhalb anderer Quadratwurzelzeichen). Ihre Aufgabe hier ist es, diese mit ASCII-Kunst zu zeichnen.

Technische Daten

Sie erhalten zwei ganze Zahlen, die Zahl innerhalb des Radikals und die Zahl der Radikale. Ich denke, der beste Weg zu erklären, was Sie tun müssen, ist mit einem Beispiel. Hier ist die Ausgabe für 2, 4:

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

Hier sind einige Dinge zu beachten:

  • Die Höhe jedes Radikals erhöht sich um eins
  • Die Länge der _'s ist immer 5mal die Höhe
  • Nach dem letzten /und vor dem nächsten inneren Radikal beginnt ein Leerzeichen
  • Die Zahl darin wird niemals größer als 4 Ziffern sein
  • Wenn die Anzahl der Radikale 0 ist, geben Sie einfach die Anzahl aus
  • Es liegt an Ihnen, zusätzliche Leerzeichen in ein Rechteck einzufügen
  • Das ist , also gewinnt der kürzeste Code in Bytes !

Testfälle

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

23, 0:
23

4, 1:
  _____
\/ 4

1234, 3:
      _______________
\    /     __________
 \  /  \  /   _____
  \/    \/  \/ 1234
Maltysen
quelle
12
Ich denke, dies wäre eine etwas bessere Herausforderung, wenn die horizontalen Balken alle am selben Punkt enden müssten.
Greg Martin

Antworten:

2

Python 3.5, 145 137 Bytes

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

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

Ausgabe:

s(2,4)
        ____________________
\      /       _______________
 \    /  \    /     __________
  \  /    \  /  \  /   _____
   \/      \/    \/  \/ 2
James Hollis
quelle
print(' '*i+'_____'*i or n)spart 7 Bytes. BEARBEITEN print(' '*i+i*'_____'or n)speichert 8.
Jonathan Allan
Vielen Dank. Ich wusste nicht, dass du so etwas verwenden kannst.
James Hollis
2

JavaScript, 133 132 131 Bytes

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
quelle
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>

Sparen Sie 3 Bytes, wenn der erste Parameter eine Zeichenfolge anstelle einer Zahl sein kann.

Neil
quelle
1

PHP, 178 Bytes

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 das ist furchtbar lang

Titus
quelle