Narysuj sekwencję Recamana za pomocą ASCII


12

Sekwencja Recamana ( A005132 ) jest sekwencją matematyczną zdefiniowaną jako taka:

ZA(n)={0Jeśli n=0ZA(n-1)-nJeśli ZA(n-1)-n jest dodatni i nie znajduje się już w sekwencjiZA(n-1)+nInaczej

Alternatywne, prostsze wyjaśnienie słowne jest następujące:

Odejmij, chyba że nie możesz (liczba jest ujemna lub była wcześniej używana), w takim przypadku dodaj.

Pierwsze kilka warunków to 0,1,3),6,2),7,13,20,12,21,11

Teraz jest już to wyzwanie, które wymaga wygenerowania nth-tego ciągu sekwencji. Ten jest nieco inny.

Wyzwanie

Biorąc pod uwagę liczbę n, narysuj pierwsze nwarunki sekwencji. Co rozumiem przez „remis”? Pokażę:

  1. Narysuj max([A(y) for y<=n])jednostki linii liczbowej o długości. Załóżmy, że na razie njest to 5, więc linia liczbowa ma długość 6 jednostek (ponieważ największa z ZA(1)=0 , ZA(2))=1 , ZA(3))=3) , ZA(4)=6 a ZA(5)=2) wynosi 6 ). Utwórz linię z podkreślników, zaczynając od 0:

______

  1. Zacznij od przejścia od pierwszego do drugiego wyrażenia: 0 i 1. Użyj |i, -aby narysować kwadrat (równa długość i wysokość), idąc w górę. W takim przypadku będziemy musieli przegapić, -ponieważ odległość wynosi tylko 1.
||
______
  1. Teraz przejdziemy do następnego kroku ( ZA(2))=1 do ZA(3))=3) ) na dole linii (za każdym razem i niższy):
||
______
 | |
 |-|

Jak widać, ta linia ma również wysokość 2, ponieważ wysokość musi być równa odległości między dwoma członami.

Jeśli będziemy kontynuować, w końcu osiągniemy:

   |--|
   |  |
|| |  |
______
 |||  |
 |||  |
  |   |
  |---|

Zasady

  • Jeśli tam jest - i |kolizji, później jeden ma pierwszeństwo.
  • Przed / po obrazie mogą występować poprzedzające / końcowe spacje , ale końcowe / poprzedzające_ s lub -s są niedozwolone (wyjątek to indeksowanie 0 lub 1)
  • Możesz ustawić punkt 0 tuż przed pierwszym _ na linii liczbowej lub tuż po nim.
  • Nie ma alternatywy dla znaków -, |lub_ mogą być wykorzystywane.
  • To jest , więc wygrywa najkrótsza odpowiedź w bajtach.

Przypadek testowy

Oto kolejny przypadek testowy z n=10

            |-------|
            ||-----||
            ||     ||
  |----|    ||     ||
  |    |    ||     ||
  ||--||    ||     ||
  ||  ||    ||     ||
||||  ||    ||     ||
_____________________
 |||  ||   |||     ||
 |||  ||   |||     ||
  |   ||   |||     ||
  |---||   |||     ||
       |   |||     ||
       |---|||     ||
           ||------||
           |--------|

Nie jest jasne, gdzie należy umieścić lewą krawędź kwadratu.
Daniil Tutubalin

@DaniilTutubalin Nie jestem pewien, czy rozumiem, co masz na myśli.
Geza Kerecsenyi

w zasadzie stwierdzenie określa tylko, że musimy narysować kwadraty (szerokość = wysokość) i że powinny się one zmieniać na przemian w górę i w dół. Nie ma instrukcji dotyczących wielkości i pozycji kwadratów. W przypadku testowym widzę, że 2 kwadraty mogą mieć tę samą pozycję lewej krawędzi.
Daniil Tutubalin

Myślę As you can see, this line also has a height of 2, since the height must be equal to the distance between the two terms., że i You can choose to set the 0 point just before the first _ on the number line, or just after it.całkiem dobrze to podsumuję.
Geza Kerecsenyi

Myślę, że przypadek testowy dla n = 10 jest nieprawidłowy od 13-> 20 lat.
Nick Kennedy

Odpowiedzi:


4

Galaretka , 70 65 bajtów

µ_ż+ɗLṪ>Ƈ-ḟ⁸Ḣṭµ¡µL;ⱮṀ’ṭr,;ɗƝJW,RN¹ƭƲ€$+Lp""ƲZẎ€Ʋ‘ŒṬ×"J$»/ị“-|_ ”Y

Wypróbuj online!

Pełny program przyjmujący jedną liczbę całkowitą n poprzez STDIN i generowanie grafiki ASCII w oparciu o indeksowanie zerowe.

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.