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

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

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}


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.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.