Krzywa Smoka to fraktal, który generuje się na podstawie ciągu zer i jedynek. Następnie wartości zero przydziela się skręt w lewo, a wartości jeden skręt w prawo. Pomiędzy skrętami należy narysować kreskę do przodu.
Pierwszym wyrazem ciągu smoka jest 1. Każdy następny wyraz polega na wstawieniu na początku i końcu aktualnego wyrażenia oraz pomiędzy aktualnymi znakami naprzemian wartości 1 oraz 0. Wartości te można interpretować na różne sposoby.
Pierwszy wyraz to 1. Następny uzyskujemy poprzez dopisanie pustych pozycji _ 1 _, a następnie wpisaniu w nie naprzemian 1 i 0. Wtedy okaże się, że drugi wyraz to 110. Budowana kolejnego wyrazu polega na tym samym, ale tym razem pojawią się puste pola wewnątrz aktualnego wyrazu _ 1 _ 1 _ 0 _. Ostatecznie trzeci wyraz to 1101100. Następne wyrazy buduje się w identyczny sposób.
Poniżej została przedstawiony fraktal wygenerowany na podstawie Krzywej Smoka. Przyciski służą do wygenerowania fraktalu na podstawie poprzedniego wyrazu ciągu, albo następnego. Uwaga: dla dużych wartości generowanie będzie trawło długo.
Do generowania KrzywaSmokaNastepny(), która na podstawie poprzedniego wyrazu zwróci kolejny wyraz. W przypadku braku podania argumentu (poprzedniego wyrazu) funkcja zwróci pierwszy wyraz ciągu smoka. Funkcja nie sprawdza poprawności podanego wyrażenia!
Niezależnie, który wyraz chcemy wyznaczyć to na początku stoi zawsze wartość 1. Następnie dla każdej wartości z poprzedniego wyrazu przepisywane są kolejne znaki, a pomiędzy nie wstawiana jest na przemian wartość 1 i 0. Do tego celu wykorzystana została funkcja modulo, która na podstawie numeru iteracji zwraca potrzebne wartości. Na koniec funkcja zwraca kolejny wyraz ciągu smoka.
Do przetestowania napisanej funkcji można skorzystać z poniższego fragmentu programu: