Forum jest zablokowane. Podczas blokady nie można dodawać ani edytować wiadomości.
Temat: [WDP] Rozwiązanie
Czy ktoś, kto ma 10 chce się podzielić rozwiązaniem (albo po prostu wrzucić swój kod)
Zaczynamy w lewym dolnym wierzchołku. Robimy procedurę, która rysuje trójkąt bez dolnej podstawy. Dzielimy swój trójkąt na 3 figury, od lewego dolnego wierzchołka do połowy prawej ściany tworzymy taki romb o boku n/2, taki romb oczywiście łatwo się rysuje, jednak rysujemy go bez dolnej podstawy. Skończyliśmy rysować romb w połowie lewej ściany, ruszamy się do górnego wierzchołka trójkąta. Teraz zostały nam do zrobienia dwa kawałki, które są trójkątami i wyglądają prawie tak samo (dolny może być większy o 1). Tylko te trójkąty mają już stworzoną lewą i dolną ścianę :( Obróćmy więc rysunek tak, żeby lewa ściana stała się dolną i narysujmy trójkąty o 1 mniejsze niż mamy na to miejsce, dzięki temu nie przejedziemy dwa razy po tej zajętej krawędzi. No to wywołujemy się rekurencyjnie, a jeden/dwa ostatnie poziomy rysujemy ręcznie.
Rysunek: https://ibb.co/pZzjJ3G
Trójkąt ABC o boku n rysujemy od punktu A do punktu B - rysujemy go bez górnych brzegów AC i BC
Rekurencyjnie budujemy sekwencję ruchów dla trójkąta o boku k = floor((n-1)/2) i powtarzamy ją 2 razy => otrzymujemy trójkąty ADF i DEG - oba z narysowaną podstawą ale bez górnych boków (całość przechodzi z A do E
Kolejny krok to przejście E => G
Od punktu G rysujemy romb GDFH jako k-krotne powtórzenie sekwencji k ząbków z powrotem - jeden wiersz przechodzi od G do D (prosta) oraz dalej do K (łamana) => k takich wierszy doprowadza do punktu H (romb nie ma narysowanego boku FH)
Ostatni krok to wypełniania trójkąta to czworokąt HEBC z punktu H do B - w zależności od parzystości n ma on szerokość 1 lub 2, więc robimy ząbki pojedyncze lub podwójne.
Dopełnieniem jest dorysowanie boków BC i CA
Oczywiście przy powielaniu sekwencji ruchów x razy dynamikiem wyznaczam optymalny podział na mnożniki, np. 98*S => 2[7[7[S]]]
Trójkąt ABC o boku n rysujemy od punktu A do punktu B - rysujemy go bez górnych brzegów AC i BC
Rekurencyjnie budujemy sekwencję ruchów dla trójkąta o boku k = floor((n-1)/2) i powtarzamy ją 2 razy => otrzymujemy trójkąty ADF i DEG - oba z narysowaną podstawą ale bez górnych boków (całość przechodzi z A do E
Kolejny krok to przejście E => G
Od punktu G rysujemy romb GDFH jako k-krotne powtórzenie sekwencji k ząbków z powrotem - jeden wiersz przechodzi od G do D (prosta) oraz dalej do K (łamana) => k takich wierszy doprowadza do punktu H (romb nie ma narysowanego boku FH)
Ostatni krok to wypełniania trójkąta to czworokąt HEBC z punktu H do B - w zależności od parzystości n ma on szerokość 1 lub 2, więc robimy ząbki pojedyncze lub podwójne.
Dopełnieniem jest dorysowanie boków BC i CA
Oczywiście przy powielaniu sekwencji ruchów x razy dynamikiem wyznaczam optymalny podział na mnożniki, np. 98*S => 2[7[7[S]]]
Prawie to samo co u Jana, tylko bez obracania. Procedura rysuje trójkąt bez lewego boku zaczynając od lewego dolnego rogu, a kończąc w górnym. Jeśli ma parzyście wiele wierszy, rysujemy dolny wiersz osobno. Jeśli ma nieparzyście wiele wierszy to rozbijamy tak: https://i.imgur.com/ucEsNlX.png. Najpierw idziemy narysować te dwa czerwone trójkąty rekurencyjnie, wracamy po ich lewym boku, potem idziemy narysować romb (zygzakiem na dole) i na końcu kończymy ramkę.
https://pastebin.com/FJjuw7Ms
Rekurencja próbuje narysować trójkąt z "pełnym" prawym bokiem i ząbkowanymi pozostałymi. Zaczynam na gorze, konczę po prawej.
Trójkąt rozmiaru 2k+1 lub 2k+2 rysuję tak:
-2x (dopisując 2[ przed wejściem w podfunkcję i ] po wyjściu) rekutencyjnie trojkąt rozmiaru k, trojkąty stykaja się (wierzchołkami prawy do gornego), jestem w prawym wierzchołku dolnego trójkąta.
-dorysowuje zygzaczek (linia w lewo, w gorę-prawo i znow w lewo, dodaliśmy dwie krawędzie dolnemu trojkątowi, i dolną gornemu ) - lądują w lewym rogu gornego trojkąta.
-rysuję romb. Kończę w lewym rogu wielkiego, tworzonego wlaśnie trojkąta.
Ale ten trójkąt ma "pełną" dolną krawędź, co się nie splata z warunkiem na rekurnecję. Dorysowuję więc zygzaczek (albo falbankę szerokości 2), co naprawia trojkąt i przesuwa zółwia na właściwa pozycję (prawy rog trojkąta).
Jeśli to trojkąt, który chcaiłem narysować (korzeń rekurencji), rysuję kreskę w lewo i prawo-gorę, by dorysować brakujace boki.
Liczby koduję jak w rozwiązaniu z OIJ, w systemie o podstawie 9.
Edit: obraz wart więcej i te sprawy https://youtu.be/PUEMoPTok70
Moje rozwiązanie jest bardzo podobne do rozwiązania Michała, tylko orientacja inna.
Rekurencja próbuje narysować trójkąt z "pełnym" prawym bokiem i ząbkowanymi pozostałymi. Zaczynam na gorze, konczę po prawej.
Trójkąt rozmiaru 2k+1 lub 2k+2 rysuję tak:
-2x (dopisując 2[ przed wejściem w podfunkcję i ] po wyjściu) rekutencyjnie trojkąt rozmiaru k, trojkąty stykaja się (wierzchołkami prawy do gornego), jestem w prawym wierzchołku dolnego trójkąta.
-dorysowuje zygzaczek (linia w lewo, w gorę-prawo i znow w lewo, dodaliśmy dwie krawędzie dolnemu trojkątowi, i dolną gornemu ) - lądują w lewym rogu gornego trojkąta.
-rysuję romb. Kończę w lewym rogu wielkiego, tworzonego wlaśnie trojkąta.
Ale ten trójkąt ma "pełną" dolną krawędź, co się nie splata z warunkiem na rekurnecję. Dorysowuję więc zygzaczek (albo falbankę szerokości 2), co naprawia trojkąt i przesuwa zółwia na właściwa pozycję (prawy rog trojkąta).
Jeśli to trojkąt, który chcaiłem narysować (korzeń rekurencji), rysuję kreskę w lewo i prawo-gorę, by dorysować brakujace boki.
Liczby koduję jak w rozwiązaniu z OIJ, w systemie o podstawie 9.
Edit: obraz wart więcej i te sprawy https://youtu.be/PUEMoPTok70
Moje rozwiązanie jest bardzo podobne do rozwiązania Michała, tylko orientacja inna.
Moje ładne rysunki: https://ibb.co/FDzvmXq
(rozwiązanie to co wszyscy)
(rozwiązanie to co wszyscy)