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

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

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}


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.


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.