Narysuj zagnieżdżone rodniki

13

Wiele wzorów matematycznych obejmuje rodniki zagnieżdżone (znaki pierwiastka kwadratowego wewnątrz innych znaków pierwiastka kwadratowego). Twoim zadaniem tutaj jest narysowanie ich za pomocą sztuki ascii.

Okular

Otrzymasz dwie liczby całkowite, liczbę wewnątrz rodnika i liczbę rodników. Myślę, że najlepszym sposobem na wyjaśnienie tego, co musisz zrobić, jest przykład. Oto dane wyjściowe dla 2, 4:

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

Oto kilka rzeczy, na które należy zwrócić uwagę:

  • Wysokość każdego radykała wzrasta o jeden
  • Długości _są zawsze 5razy wysokość
  • Jest miejsce po ostatnim /i przed rozpoczęciem następnego wewnętrznego radykała
  • Liczba w środku nigdy nie będzie większa niż 4 cyfry
  • Jeśli liczba rodników wynosi 0, wystarczy podać liczbę
  • Od Ciebie zależy, czy umieścisz dodatkowe spacje w prostokącie
  • To jest , więc wygrywa najkrótszy kod w bajtach !

Przypadki testowe

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

23, 0:
23

4, 1:
  _____
\/ 4

1234, 3:
      _______________
\    /     __________
 \  /  \  /   _____
  \/    \/  \/ 1234
Maltysen
źródło
12
Wydaje mi się, że byłoby to nieco lepsze wyzwanie, gdyby wszystkie poziome kreski musiały kończyć się w tym samym punkcie.
Greg Martin

Odpowiedzi:

2

Python 3.5, 145 137 bajtów

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

Nieznacznie nie golfista:

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)

Wynik:

s(2,4)
        ____________________
\      /       _______________
 \    /  \    /     __________
  \  /    \  /  \  /   _____
   \/      \/    \/  \/ 2
James Hollis
źródło
print(' '*i+'_____'*i or n)oszczędza 7 bajtów. EDYCJA print(' '*i+i*'_____'or n)oszczędza 8.
Jonathan Allan,
Dziękuję Ci. Nie wiedziałem, że możesz użyć „lub” w ten sposób.
James Hollis,
2

JavaScript, 133 132 131 bajtów

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
źródło
2

JavaScript (ES6), 124 bajty

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>

Zapisz 3 bajty, jeśli pierwszym parametrem może być ciąg, a nie liczba.

Neil
źródło
1

PHP, 178 bajtów

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, to jest okropnie długie.

Tytus
źródło