JSFuck jest językiem ezoterycznym, w którym każda instrukcja JavaScript może być dokładnie odtworzona w innym prawidłowym programie JavaScript, który używa tylko 6 znaków []()!+
.
Konwerter JSFuck, gdy otrzyma dane wejściowe alert("Hello World!")
, tworzy blok kodu o długości 22 948 znaków. Ponieważ program użył wielu automatycznych konwersji do utworzenia tego bloku, uważam, że kod można znacznie skrócić za pomocą ręcznych optymalizacji.
Twoim zadaniem jest zbudowanie programu JavaScript, który wykonuje to zadanie alert("Hello World!")
, używając tylko znaków []()!+
. Najkrótszy kod do tego celu wygrywa.
$
i=
proszę? W przeciwnym razie nie sądzę, że możemy najlepiej generatora.Odpowiedzi:
JScrewIt (różne rozwiązania: 16117, 14747 i 5903 znaków)
Silniki Javascript nie są identyczne; niewielkie różnice w implementacji mogą spowodować, że kod działający w przeglądarce nie będzie działał w innej. W przypadku kodu lipogrammatycznego, takiego jak JSFuck - który w dużej mierze polega na włamaniach do kodowania rzeczy tak krótko, jak to możliwe - niezgodności są jeszcze większe.
Na przykład kod wygenerowany przez JSFuck dla
alert("Hello World!")
nie działa w przeglądarce Internet Explorer. Jeśli jest to dopuszczalne ograniczenie, nadal możemy zmniejszyć rozmiar do 1611722174znaków (nie mogę dołączyć całego kodu bezpośrednio, ponieważ rozmiar odpowiedzi jest ograniczony do 30000 znaków):http://jsfiddle.net/ep2jqsj4/1/
Kod, który działa również w Internet Explorerze, ale nie w niektórych starszych przeglądarkach, wymaga 14747 znaków do zakodowania:
http://jsfiddle.net/bbxfqboq/
Wreszcie, jeśli ok, aby kod działał tylko na bieżącej przeglądarce Firefox [aktualizacja] i Safari [aktualizacja końcowa] , możemy to zrobić przy użyciu 5903
5911znaków :http://jsfiddle.net/pkyLy0j8/1/
Wszystkie kodowałem za pomocą JScrewIt . Możesz znaleźć inne kodery podobne do JSFuck wymienione na Esolang: http://esolangs.org/wiki/JSFuck . Wypróbowałem je wszystkie i muszę powiedzieć, że JScrew Wydaje się, że jest najlepszy (i jedyny, który działa we wszystkich przeglądarkach), chociaż nie analizowałem szczegółowo, jak to działa.
Innym interesującym koderem jest 6chars.js , który generuje większe wyjście dla krótkich danych wejściowych, takich jak
alert("Hello World!")
, ale gdy dane wejściowe stają się dłuższe, działa lepiej niż inne kodery, ponieważ koduje znaki jako liczby. Liczby są krótsze do zapisania w JSFuck, ale wymagają dodatkowego obciążenia do dekodowania. Niestety, 6chars.js działa tylko w Chrome i nie mogę powiedzieć, czy nadal jest aktywnie rozwijany.Interesujące byłoby wiedzieć, czy takich koderów jest więcej. Gdyby można połączyć metody stosowane przez różne enkodery w jednym narzędziu, można by stworzyć jeszcze krótsze rozwiązania.
źródło
JSFuck (15 863 znaków)
Niezupełnie zoptymalizowany (zaledwie 7085 znaków), ale nie jest tak, że optymalizacje są naprawdę możliwe, ponieważ JSFuck to tylko prosty hack językowy.
źródło
JSFuck, 18827
Nie mogłem zejść znacznie dalej. Kod wygenerowany automatycznie, zoptymalizowałem czytelny kod JS dla generatora. Przeprowadzono tylko kilka optymalizacji w kodzie JSFuck.
źródło