Dobry wieczór Panie i Panowie.
Dzisiaj - mamy wyzwanie kodowe. Zawody, które zostaną określone nie w liczbie punktów (asteroidy), ale po prostu, czy możesz je ukończyć (a la Zelda). I dla porównania, ilość bajtów (uh ... ale powiedziałeś ...).
Twoim wyzwaniem jest skomponowanie pojedynczego quine, który skompiluje się zarówno w WhiteSpace, jak i w dowolnym innym wybranym języku. Oba quiny muszą mieć absolutnie identyczne wyjście (które jako quine jest absolutnie identyczne z kodem źródłowym). Twój quine musi mieć więcej niż 3 bajty.
Twój wynik to rozmiar kodu źródłowego w bajtach.
Biorąc pod uwagę, że wyzwanie to dotyczy WhiteSpace, unikaj odpowiedzi, aby były jasne - najlepiej w stylu C. Twój wynik jest oryginalnym źródłem w bajtach - nie wersją ucieczkową.
Powodzenia.
Odpowiedzi:
Biała spacja i Perl,
992975 znakówDobry wieczór panie i Panowie.
Na początek, oto moje przesłanie zakodowane w base64, co moim zdaniem jest najlepszym sposobem na komunikację dużego programu Whitespace. (Naprawdę nie chcesz używać kodowania, które pozostawia białe znaki bez zmian, więc nie ma sensu wybierać czegoś bardziej „czytelnego”).
Oto fragment, który podkreśla wszystkie widoczne części źródła.
⇥
służy do wskazania tabulacji i↲
znaku nowej linii.Perl był naturalnym wyborem drugiego języka w tym wyzwaniu, będąc jednym z najlepszych języków ogólnego przeznaczenia do pisania zwartych quinów. Moja najkrótsza wersja Perla to 19 bajtów:
- i widać, jak to było ziarno dla połowy Perla podwójnej quine. Dla porównania, moja najlepsza biała księga ma długość 541 bajtów. (Chociaż istnieją krótsze - najlepiej 445 bajtów.)
Z punktu widzenia interpretera Perla pierwsza linia pliku źródłowego podwójnej quine zawiera dwie instrukcje, które składają się na cały program, ponieważ pozostała zawartość to dwa ciągi cudzysłowione. Pierwszy ciąg jest powtarzającą się linią Perla i jest ograniczony pustą trzecią linią. Drugi ciąg składa się z białych znaków i biegnie od czwartej linii źródła aż do
0
separatora na dole pliku.W przypadku czterech programów, pierwsze cztery linie zawierają trzy instrukcje, które są w dużej mierze bezużyteczne. (Ich efektem jest wypchnięcie dwóch wartości zerowych na stos, a następnie odrzucenie drugiej.) Są one uwzględnione tylko po to, aby bezpiecznie przejść przez nowe wiersze, których wymaga program Perl - po tym zaczyna się prawdziwy program. Zamiast zacytować dalsze nieczytelne źródło, oto parafrazowanie instrukcji, które składają się na program Whitespace, w formacie przypominającym asembler:
Olbrzymie liczby na górze to to, czego my, użytkownicy Whitespace, musimy używać zamiast rzeczywistych ciągów. Nie zawracaj sobie głowy próbą uruchomienia tego na interpreterze Whitespace, który nie ma odpowiedniego wsparcia bignum.
Wreszcie, oto program ponownie, ale tym razem z ucieczkami w stylu C, ponieważ został specjalnie zażądany:
źródło