Jakie masz ogólne wskazówki na temat gry w golfa w dwuwymiarowych językach programowania? Szukam wskazówek, które można zastosować do problemów z golfem i są specyficzne dla języków programowania 2D, ale nie są specyficzne dla jednego języka (odpowiedzi typu „usuń komentarze” i „użyj M
operacji” nie są odpowiedziami).
Proszę zamieścić jedną wskazówkę na odpowiedź.
Odpowiedzi:
Unikaj poziomych luk
Często kod pozostawia duże odstępy po lewej stronie programu, w ten sposób.
Dodaje to 4 bajty, kiedy można tego uniknąć, wyrównując do lewej.
Jeśli chcesz użyć dużych odstępów między spacjami, spróbuj ustawić je pionowo, a nie poziomo.
vs
źródło
Jeśli to możliwe, użyj jednego wymiaru
Zwykle prostsze programy można pisać w jednym wierszu. Na przykład klasyczny program dla kotów może być:
Ale można nadużyć zachowania owijania i zrobić to:
Lub w językach bez takiego zachowania opakowywania:
(Zakładając,
?
że nie wyskakuje.) W przypadku języka bez opakowania, wyraźna pętla jest często lepsza.Z poleceniami skoku
W językach 2D z poleceniami skoku i skoku warunkowego program może wyglądać następująco:
Może to być również:
(jeśli
!
jest trampoliną i&
skacze na pozycję)źródło
ioiioiioi
itp.?io;
robić, i wszystko, co wiem, to to, że?
nie wyskakuje. Wygląda na to, że są to polecenia ryb, ale nie sądzę, aby były bardzo standardowe.Zwroty karetki są zbyt duże
Im mniej 2D, tym lepiej. Zwrot karetki to kolejny brak możliwości. Nie ignorując wskazówek tylko od @ATaco i @ ASCII, staraj się, aby wymiar Y był jak najmniejszy.
To
jest lepszy niż
źródło
\n
(line-feed) jest końcem linii regularnie używanym w tekście wyrównanym do lewej strony w systemach POSIX, chociaż Windows i Mac OS (pre-macOS) używają kombinacji\n
(line-feed) i\r
(return-return).SUCHO (nie powtarzaj się)
Podczas gdy abstrakcja za pomocą funkcji jest zwykle dłuższa w Code Golf, może naprawdę pomóc w językach 2D. Spróbuj przerobić kod, aby mógł ponownie użyć tego samego fragmentu kodu, wprowadzając go / wychodząc z dwoma różnymi gałęziami wykonania.
źródło
Ścieżki przeplotu
Zwykle w języku 2D istnieje adres IP, który porusza się zgodnie z poleceniami kierunku. Ponieważ spacje są marnowane na bajty, prawie zawsze bardziej wydajne jest przestawianie programu, aby jak najczęściej przesuwa się w lewo, oszczędzając zbędnych spacji.
źródło
Użyj luster
Lustra mogą czasem być używane jednocześnie na dwóch ścieżkach (każda ścieżka odbija się od jednej strony lustra). To może nie wydawać się pomocne, ale może pozwolić ci zmienić układ programu lub jeśli masz dużo, jeśli zmiany kierunku mogą być zastąpione mniejszą liczbą kopii lustrzanych.
źródło
Zapamiętaj idiomy
Oto kilka „idiomów”, które robią pewne rzeczy, w zależności od charakteru języka.
Kod pseudoliniowy
Jeśli kiedykolwiek wymagane jest dynamiczne generowanie kodu, może być przydatne użycie pseudoliniowego modelu kodu:
Zakładając
\
i mając nav
myśli to, co zwykle robią.Nieskończona pętla
W prawie wszystkich językach 2D
><
jest nieskończoną, niezniszczalną pętlą. Jeśli z jakiegoś powodu musisz to zrobić, jest to najlepszy sposób, pomimo tego, jak fajnie może to wyglądać:W rzeczywistości, jeśli uczynisz swój kod 1-liniowym , możesz po prostu użyć
^
lubv
jako takiego:Spowoduje
v
to wysłanie adresu IP do siebie, owijając się wokół. Nadal możesz być w stanie zastosować to podejście w każdym przypadku, gdy polecenie kierunkowe wskazuje na serię (względnych) przerw.Ramy Quine
Zazwyczaj języki ze strukturą łańcuchów znaków / cytatów mogą mieć następującą quine:
Dla> <> wyglądałoby to tak:
Z wyjątkiem tego, że wychodzi z błędem jako zakończenie. Jest to prawdopodobnie najkrótszy > <> quine , a przynajmniej najkrótszy, jaki znalazłem.
źródło
<
w quine> <>?"
kończy się na niewłaściwej stronie. Wskazówka jest dobra, w przeciwnym razie użyłem tego ogólnego szkieletu w wielu moich odpowiedziach