Trochę tęsknię za tymi starymi wersjami demonstrującymi możliwości komputerów, które nazywały się x86 zamiast i3, i5 i i7. Jednym z pierwszych, które obejrzałem w moim 386, było demo Unreal od Future Crew, które obchodzi 25-lecie istnienia. W minucie 0:43 rozpoczyna się pierwsza część wersji demo i widzimy przewijany tekst podążający ścieżką sinusoidalną. Spróbujmy naśladować ten efekt w sztuce ASCII!
Wyzwanie
Biorąc pod uwagę tę ścieżkę:
*** ***
*** ***
** **
* *
* *
* *
* *
** **
*** ***
******
i tekst wejściowy, narysuj tekst podążając tą ścieżką:
Thi Golf!
s i de Yay
s Co !
P
r d
o n
g a
ra s
mmi zle
ng Puz
Zauważ, że spacje liczą się jako znaki na ścieżce i że ścieżka powtarza się, jeśli tekst jest dłuższy niż próbka.
Część animacji
Po narysowaniu tekstu poczekaj 100 ms (aby utworzyć animację około 10 fps) i narysuj tekst ponownie, zaczynając od następnej pozycji ścieżki. Tak więc w przypadku ramki #n
oblicz n modulo 40
i rozpocznij rysowanie w następującej pozycji ścieżki z tekstem zawsze wyrównanym do lewej strony obszaru roboczego:
*** ***
| *** *** |
| ** ** |
| * * |
| * * |
| * * |
| * * |
| ** ** |
| *** *** |
| ****** |
Position 0 Position 39
Tak więc dla klatki 10 będziemy mieli:
and Co
es de
zl Go
z l
u f
T P !
h
is ng Ya
is mmi y!
Progra
Notatki
- Wejściowy będzie pojedynczy
string
(lubchar
tablica, cokolwiek) z tekstem do animacji i zawsze będzie miał co najmniej 1 znak. - Prawidłowe znaki do animowania to te z zestawu drukowalnego ASCII .
- Ścieżka do podążania będzie dokładnie taka, jak podana.
- Tekst zawsze będzie wyrównywany do lewej strony obszaru roboczego, więc efektem będzie tekst falujący jak flaga, bez przesunięcia tekstu. I przez płótno mam na myśli ekran lub cokolwiek, czego użyjesz do wyświetlenia tekstu . ;-)
- Ramki muszą być wolne od znaków / pikseli z poprzednich klatek, chyba że znak / piksel jest taki sam w obu klatkach.
- Szybkość animacji nie ma znaczenia, o ile działa płynnie lub tak szybko, jak to tylko możliwe (możemy ustawić minimum 5 klatek na sekundę, ale nie jest to wymagane). Po prostu dostosuj prędkość, aby płyn był płynny i nie martw się, jeśli czasy oczekiwania nie będą dokładnie takie same.
- Animacja będzie się powtarzać w nieskończoność.
To jest gra w golfa , więc może wygrać najkrótszy program lub funkcja animująca tekst!
Odpowiedzi:
HTML + ES6,
241244237 bajtówAwaria:
W jaki sposób?
Budowanie ścieżki
Poniższy kod buduje ścieżkę:
Daje to tablicę tablic, w
[j, y, z]
których j oznacza modulo pozycji 20, y jest współrzędną y w tej pozycji, a z nie jest później używane (po prostu oblicza się tutaj, aby zapisać niektóre bajty).Ponieważ ścieżka jest symetryczna, musimy jedynie zakodować 20 pierwszych pozycji. Robimy to za pomocą liczby binarnej, w której każdy
1
bit oznacza, że y musi zostać zaktualizowany (+1 dla pierwszej połowy, -1 dla drugiej połowy).Dzięki odwzorowaniu pierwszej pozycji na najmniej znaczący bit daje to:
Ponieważ sama liczba binarna jest również symetryczna, możemy ją odczytać w tej samej kolejności dla drugiej połowy.
Stąd wzór:
które można również zapisać jako:
gdzie k jest pozycją, a j jest pozycją modulo 20.
Aktualizacja x jest znacznie łatwiejsza: mamy tylko jeden specjalny przypadek do wykrycia, porównując modulo pozycji 20 z 9.
Rysowanie tekstu
W poniższym kodzie opisany powyżej kod budowania ścieżki został zastąpiony
path
zmienną zapewniającą czytelność.źródło
*
w pionie nie są wyrównane (na tej samej wysokości) i kolejny mały nitpick. Ale muszę powiedzieć, że nadal nie wiem, w jaki sposób twój kod tworzy efekt fali (co robiy+=155464
?). Gratulacje!