Bounty się skończyło, phpdeveloper wygrywa w Conway's Game of Life
Platforma internetowa rozwija się dziś w szybkim tempie. Funkcje, takie jak animacje CSS3 , transformacje , cienie i gradienty , <canvas>
, <audio>
i <video>
tagi, SVG , WebGL i wiele więcej znaczy, że można zrobić o wiele więcej w przeglądarce, aw znacznie mniej kodu niż kiedykolwiek wcześniej. Oczywiście wielu programistów nie korzysta z tych nowych funkcji, ponieważ witryny i aplikacje, nad którymi pracują, muszą być kompatybilne wstecz ze starymi, zjadanymi przez mole przeglądarkami, takimi jak IE6.
Co się stanie, jeśli zdejmiesz uprząż? Pozwolić sobie na korzystanie z dowolnych nowych funkcji, które lubisz? Żyj trochę, oszalej, używaj dziwnych, najnowocześniejszych funkcji, z których tylko 1% użytkowników będzie mógł skorzystać?
Oczywiście, mając nieograniczone zasoby i możliwość komunikowania się z serwerem, możesz robić różne rzeczy - ładować megabajty kodu, bibliotek i filmów itd. - ale wyzwania nie są bardzo interesujące bez ograniczeń. Głównym ograniczeniem dla tego konkursu jest: co można zrobić w pojedynczym, niezależnym, 4k data:
URI? Samowystarczalny oznacza, że nie może odnosić się do żadnych zasobów zewnętrznych, łączyć się z żadnym serwerem za pomocą WebSockets lub XHR ani niczego w tym rodzaju. Jeśli chcesz osadzić zasoby, takie jak PNG lub MP3, możesz dołączyć identyfikatory URI danych do identyfikatora URI danych lub wymyślić jakiś inny sprytny sposób osadzania sub-zasobów. 4k oznacza 4096 bajtów, poprawnie zakodowany URI, tekst ASCII (możesz użyć URI zakodowanego w base64, jeśli chcesz, aby uniknąć kodowania URI, ale zwykle tekst zakodowany w URI będzie mniejszy niż base64 dla zwykłego tekstu).
Aby zapewnić inspirację, tematem konkursu są memy StackOverflow . Stwórz grę z jednorożcem, generator faktów Jona Skeeta, program do rysowania oparty na kółkach odręcznych lub cokolwiek wspólnego z jednym z popularnych memów StackOverflow i meta.so.
Chciałbym zachęcić wpisy, które są w jakiś sposób interaktywne; nie tylko zwykła animacja lub obraz statyczny, powinny reagować na dane wejściowe użytkownika, czy to poprzez zdarzenia, najechanie kursorem CSS, przewijanie, zmianę rozmiaru okna przeglądarki, czy w dowolny inny sposób. Nie jest to jednak trudne wymaganie; zostaną wzięte pod uwagę świetne demonstracje, które nie są interaktywne, chociaż preferowana byłaby interaktywność.
Wpis musi być uruchomiony w co najmniej jednej publicznej wersji co najmniej jednej z 5 głównych przeglądarek (IE, Firefox, Chrome, Safari, Opera). Dozwolone są tylko główne wersje (nie kompilacje z gałęzi lub kompilacje wymagające łatek), bez specjalnych ustawień konfiguracji, wtyczek lub czegokolwiek, co nie jest dostarczane z przeglądarką podstawową. Nocne wersje, bety i kandydaci do wydania są w porządku. Podaj we wpisie, z którymi przeglądarkami testowałeś swój wpis. Nie ma żadnych ograniczeń dotyczących tego, jakich technologii można użyć w ramach tych ograniczeń; możesz zrobić czystą animację SVG, czystą animację CSS, coś w JavaScript za pomocą WebGL, lub cholera, nawet coś, co używa XML i XSLT, jeśli ci się to podoba. Jeśli umieścisz go w poprawnym identyfikatorze URI danych, bez zewnętrznych zależności, i uruchomisz przeglądarkę, to jest to uczciwa gra.
Aby dodać do konkursu tutaj, w poniedziałek, 21 marca, otworzę nagrodę za to pytanie. Jak mogę sobie pozwolić na nagrodę, gdy mam tylko 101 powtórzeń? Cóż, wszyscy przedstawiciele, których zdobędę w wyniku głosowania na to pytanie od teraz do poniedziałku, przejdą na nagrodę (do limitu 500 dozwolonych na jedną nagrodę; byłoby mi jednak bardzo trudno przekroczyć ten limit, biorąc pod uwagę przedstawiciela czapka). Zgłoszenia będą przyjmowane przez 6 dni później; wszystkie zgłoszenia muszą upłynąć co najmniej 24 godziny przed wygaśnięciem nagrody, aby dać mi czas na ich sprawdzenie i ocenę. W tym momencie zaakceptuję najwyższą głosowaną odpowiedź i dam nagrodę mojej ulubionej odpowiedzi (która może, ale nie musi być taka sama jak najwyższa głosowana). Moje kryteria przyznawania nagrody będą obejmowały piękno, zabawę, sprytną technikę, ciekawe wykorzystanie nowych funkcji, interaktywność i rozmiar.
Oto kilka źródeł inspiracji na początek:
- Eksperymenty z Chrome - zbiór demonstracji nowoczesnej platformy internetowej
- Mozilla Hacks , blog o nowoczesnej platformie internetowej z wieloma prezentacjami nowych funkcji w Firefoksie 4
- JS1k , konkurs na demonstracje 1k JavaScript
- 10k Apart , aplikacja internetowa w konkursie 10k
- gl64k , obecnie trwający konkurs demo dla 64k wersji demonstracyjnych WebGL
- Shader Toy , zestaw demonstracji tego, co możesz zrobić z modułami cieniującymi WebGL
Format wpisów:
Nazwa wpisu
data: text / html, Twój% 20data% 20URIDziała w Firefox 4 RC, Chrome 10 i Opera 11
Opis twojego wpisu; co robi, dlaczego jest schludny, jakich sprytnych technik użyłeś.
<script> // code in expanded form to more easily see how it works </script>
Wszelkie kredyty za inspiracje, dowolny kod, który mógłbyś pożyczyć itp.
(Wygląda na to, że StackExchange nie akceptuje identyfikatorów URI danych w linkach, więc musisz osadzić je bezpośrednio w <pre>
tagu)
źródło
Odpowiedzi:
SO meme: Wszystko jest memem
Conway's Game of Life, HTML5 + CSS3 + JS,
354335613555 bajtówTo jest Gra życia Conwaya napisana dla HTML5 z płótnem i CSS3. Napisałem to dla zabawy podczas konkursu 10K Apart, ale nie zgłosiłem tego do konkursu.
Wersja zakodowana w standardzie Base64 zajmuje ponad 4,61 KB danych, podczas gdy oryginalna wersja ma ~ 3543 bajtów.
Aby skompresować rozmiar : kod Javascript zminimalizowany przez kompresor internetowy YUI , a następnie przez pakera Deana Edwardsa . Kod CSS zminimalizowany przez kompresor internetowy YUI .
Korzysta z biblioteki jQuery z biblioteki Google API Library.Poprawny HTML5 i CSS3 (eksperymentalna wersja walidatora w3).Grać:
<Start>
aby uruchomić symulację,<Stop>
wstrzymać i<Next>
wyświetlić następny krokWersja czytelna dla ludzi (roboty umrą):
Klasa z historii:
źródło
/>
sekwencji, które możesz zastąpić,>
ponieważ nie piszesz XHTML. Pamiętaj także, aby poprawnie zakodować swój wynik; chociaż przeglądarki mogą akceptować spacje w identyfikatorach URI, nie są one technicznie poprawne.<html>
,<head>
oraz<body>
znaczniki (tagi ani ich zamknięcia). Są niejawne w HTML i zostaną dodane w odpowiednich miejscach przez przeglądarkę.Przepraszam, że wykopałem stary wątek, ale widziałem to wyzwanie na bocznym pasku i po prostu nie mogłem się oprzeć. Nie mam nic przeciwko temu, że wyzwanie naprawdę się skończyło, fajnie było wymyślić coś.
Może moglibyśmy mieć kolejną rundę?
W każdym razie moje zgłoszenie:
Edytować
Przepraszam, że wykopałem to jeszcze raz , ale od wieków przeszkadzało mi, że nie mogłem dostać tego poniżej 1 KB. Teraz to zrobiłem!
Interaktywny, zacieniony moduł:
960
987 1082 1156 1182 1667 1587bajtów !, HTML + CSS3 + JSPorusz myszką.
Działa w Chrome (18. Coś, ale powinno działać na najnowszych).
Grałem w to całkiem dobrze, uratowałem kilka postaci, wykorzystując sztuczkę, która moim zdaniem była całkiem fajna: Powiedz, że masz następujące rzeczy:
znaki można zapisać, zwracając funkcję w sobie i wykonując następujące czynności:
Oszczędności zależą od liczby wywołań funkcji. Jest to prawdopodobnie lepsze w przypadku zaciemnienia niż gry w golfa.
Zapisałem również postacie, zastępując
1000
je1e4
, podającMath
klasie i niektóre jej funkcje, aliasy. Używanie zmiennych dla powtarzających się łańcuchów (dość trudno znaleźć niektóre z tych zapisów). Miałemstyle
też kilka razy słowo w kodzie; niektóre z nich były łańcuchami, a inne podobnymi do identyfikatorówelement.style.whatever
. Przypisanie ciągu do zmiennej (D='style
) pozwoliło mi zamienić ciągi naD
i tak zmienić identyfikatoryelement[D].whatever
.Ostatnia edycja: przepraszam, że przywołałem starą komp.
źródło
onmousemove
Mogą być modyfikowane:onmousemove=function(e){U=K-e.pageX;J=e.pageY-K};
. W ten sposób sześcian potoczy się w kierunku wskaźnika myszy (bardziej intuicyjnie).function g(x){alert("hello "+x+"!");return g} g("dave")("martin")("alice")("rose")("bob")("helen")("jo");
może stać sięg=x=>alert("hello "+x+"!"),g;g("dave")("martin")("alice")("rose")("bob")("helen")("jo");
JavaScript 489 znaków
Gra w Zgadnij liczbę.
Opracowałem to z tym kodem:
źródło