Na cześć Dnia Gwiezdnych wojen napisz program, który wyświetli następujący tekst, przewijając jak indeksowanie Gwiezdnych wojen :
It is a period of civil war. Rebel
spaceships, striking from a hidden
base, have won their first victory
against the evil Galactic Empire.
During the battle, Rebel spies managed
to steal secret plans to the Empire's
ultimate weapon, the Death Star, an
armored space station with enough
power to destroy an entire planet.
Pursued by the Empire's sinister agents,
Princess Leia races home aboard her
starship, custodian of the stolen plans
that can save her people and restore
freedom to the galaxy...
Możesz wygenerować animowany plik GIF lub wyświetlić go w programie. Dane wyjściowe muszą zawierać następujące informacje:
- Tekst musi zaczynać się od dołu obrazu / wyświetlacza
- Musi przewijać w górę, aż osiągnie szczyt.
30
Dotarcie tekstu na górę zajmuje co najmniej sekundy. Animacja musi być kontynuowana, dopóki cały tekst nie osiągnie górnej krawędzi. - W tej odległości tekst musi być mniejszy, aż będzie mniejszy niż
1/3
rozmiar (długość i czcionka) - Tekst musi być pochylony, aby podążać pod tym kątem.
- Tekst musi być wyrównany do lewej i prawej. Podany tekst jest już uzasadniony dla czcionek o stałej szerokości, możesz jednak usunąć dodatkowe spacje (nie nowe linie) i sam je uzasadnić.
- Tekst musi być żółty
- Tło musi być czarne
Ten film pokazuje indeksowanie początkowe.
Powodzenia i niech czwarty będzie z tobą !
Odpowiedzi:
HTML, 762
Niby niepewny (czytaj: bardzo niepewny: P).
Oto JSFiddle (z
-webkit-
dodanymi prefiksami dostawcy, dzięki czemu działa w Chrome).źródło
HTML / CSS, 1047
Mógłbym
-webkit
zagrać w golfa o wiele więcej, usuwając prefiksy itp., Ale na razie to zrobi:Demo na żywo
źródło
HTML + CSS + SVG
16141625Chciałem też być poprawny wizualnie. SVG używany do maskowania i animacji. HTML + CSS używany do transformacji. Nie sprawdziłem, czy tekst ma dokładnie 1/3 rozmiaru.
Zalecane wyświetlanie w Chrome ze względu na
-webkit-
prefiks. Wymaga transformacji CSS 3D do pracy; może być konieczne otwarciechrome://flags
i wybranie opcji „Zastąp listę renderowania oprogramowania”.W bajtecount znajdują się znaki nowego wiersza i puste.
Aktualizacja 1: Dodanie obsługi przeglądarki Firefox i innych przeglądarek, które nie wymagają prefiksów. Dodano 11 bajtów nawet po dalszym czyszczeniu. Oczyszczanie było możliwe, ponieważ przeglądarki szczęśliwie interpretują SVG za pomocą parserów do łamania HTML, w przeciwieństwie do parserów zgodnych z XML.
Relacja na żywo
źródło
PerlMagick, program 661 + plik tekstowy 547 = 1208
Za późno na rocznicę, ale OP powiedział „animowany GIF”, więc ...
TL; DR: link do animowanego GIF-a (5 Mb, 480 * 240, 1360 klatek) (za każdym razem, gdy próbuję teraz ten link, następuje fałszywy start - nie ma go w pliku, być może najpierw spróbuję go pobrać. I niewielkie migotanie ... może wytłumaczę to później, - nie bułka z masłem, cała idea IM i GIF;)).
Z nowymi liniami i wcięciem dla czytelności:
Czyta tekst ze STDIN, ale geometria jest zakodowana na stałe, więc prawdopodobnie każdy inny tekst nie byłby dobrym pomysłem. Może być krótszy, ale dodałem zanikanie tekstu, gdy dochodzi on do góry, a przesuwanie się o jeden piksel powodowało niestabilną animację, więc wykonałem interpolację. Zjada 2,2 Gb pamięci RAM i zajmuje 2-3 minuty na 8-letnim pulpicie (i prawdopodobnie nie będzie działać na ludziach z Windows), więc oto jak uzyskać GIF: zamień (lub dodaj) ostatnią linię (tworzy ponad 200 Plik Mb):
A potem biegnij
Kompromisy między jakością (rozmiar palety itp.) A ostatecznym rozmiarem GIF są oczywiste. Wywołanie
$i->Remap
bezpośrednio z PerlMagick nie działa, prawdopodobnie występuje błąd, zajmuje to wiele godzin, zanim (jak sądzę) spróbuje+remap
pierwszy. Właściwie rozsądny (tylko nieznacznie większy) rozmiar GIF można uzyskać bez globalnej palety, ale użycie$i->Quantize
tego zmniejsza lokalną paletę każdej klatki do wymaganego rozmiaru. Aha, i bez optymalizacji palet, tzn. Zapisanie GIF-a z powyższego skryptu „jak jest” tworzy plik GIF około 9 Mb.źródło