Klein to zaprojektowany przeze mnie język 2D, który można osadzić na 12 różnych powierzchniach topologicznych. Program Klein można uruchomić na różnych powierzchniach, zmieniając argumenty wiersza poleceń.
Topologia określa, dokąd idzie wskaźnik instrukcji, gdy wychodzi poza krawędź programu. Podczas oddalania się od krawędzi ip przeskoczy na krawędź o tym samym kolorze i utrzyma swoją pozycję względem strzałki, tzn. Wskaźnik zachowa swoją odległość od główki strzały.
Na przykład topologia 000
, topologia używana przez większość języków 2D, powoduje, że wskaźnik instrukcji zawija się na drugą stronę, gdy zsunie się z krawędzi.
Zadanie
Zadanie jest dość proste, napisz program Kleina, który po uruchomieniu wyświetli topologię, w której jest uruchomiony. Poszczególne liczby mogą być oddzielone spacjami. (np. 000
i 0 0 0
oba są dopuszczalnymi danymi wyjściowymi). Możesz użyć albo zignorować -A
flagę wiersza poleceń, jeśli nie użyjesz bajtów.
To jest golf golfowy, więc zwycięzcą będzie najkrótsza odpowiedź.
Oto sterownik testowy online, którego można użyć do przetestowania wszystkich topologii jednocześnie. Aby uruchomić w trybie liczb całkowitych, usuń -A
.
Odpowiedzi:
5248 bajtówWypróbuj online!
Kierowca testowy
Wyjaśnienie
W Klein IP zaczyna się w lewym górnym rogu, w prawo. Pierwszym krokiem, który chciałem, aby mój program zrobił, było wysłanie adresu IP z góry programu w celu ustalenia pierwszego i trzeciego bitu. Adres IP ponownie wprowadziłby program w następujący sposób, w zależności od topologii:
Zdecydowałem, że mój program zapisze trzeci bit topologii przed drugim bitem, ale zamieni je (używając
$
) przed końcem. W tym celu dodałem kod do wypychania pierwszego i trzeciego bitu każdej topologii w punktach wejścia IP opisanych powyżej.Następnie skupiłem się na topologiach z
1
lub2
jako ich pierwszym kawałku. Postanowiłem zrekombinować je i odesłać po stronie niepołączonej z stroną północną, abym mógł ustalić ich drugi bit.Dogodnie to przegrupowało topologie według ich drugiego bitu, dzięki czemu mogłem przesunąć to na stos.
Potem musiałem tylko zamienić drugi i trzeci bit i zakończyć program.
Teraz, gdy topologie z
1
lub po uruchomieniu2
ich pierwszego bitu działały, mogłem skupić się na tworzeniu topologii z0
poprawnym wynikiem. Pierwszym krokiem było ich ponowne połączenie, tak aby można je było podzielić na dwie grupy na podstawie drugiego bitu.Najpierw skupiłem się na tych topologiach
1
jako drugim fragmencie. Stanowiło to wyzwanie, ponieważ dla nich IP był na linii już używanej przez topologie2
jako pierwszy bit. Ponieważ byłoby trudniej dopasować więcej niż jedną instrukcję w tej linii (pojedynczą instrukcję można przeskoczyć za pomocą!
instrukcji) i brakowało mi miejsca jako całości, postanowiłem przekierować adres IP z tej linii i ponownie użyć istniejącej1
instrukcji wcisnąć drugi bit.Teraz jedyne, co pozostało do zrobienia dla topologii,
1
ponieważ ich drugim bitem było ustalenie kolejności drugiego i trzeciego bitu i zakończenie.Wreszcie pozostały topologie
0
jako ich drugi bit. W programie nie pozostało wiele miejsca, a największe nieużywane miejsce znajduje się w górnym wierszu, więc to właśnie tam przekierowałem adres IP dla topologii z0
ich drugim bitem.Nadal musiałem naciskać
0
na drugi bit i naprawić kolejność drugiego i trzeciego bitu, a także zakończyć program. Na szczęście mogłem ponownie wykorzystać istniejącą$
instrukcję, aby instrukcje0
i@
zmieściły się w pozostałych miejscach.Wreszcie nopsy mogą zostać usunięte z końców linii, aby uzyskać końcowy program.
źródło
1168886776961605958545350 bajtówWypróbuj online!
źródło
-d
flagą, zrobi to dokładnie to samo. Niestety nie działa w TIO.44 41 40 3837 bajtówWypróbuj online!
Kierowca testowy.
Wykorzystuje kwadrat 6 na 6. Najkrótszy jaki mogłem uzyskać z kwadratem 8 na 8 to 38 bajtów, jeśli ktoś chce spróbować go poprawić.
Wyjaśnienie:
Jeden pierwszy kod przekazuje pierwsze dwie cyfry dla prefiksów
0
i1
. Ponieważ2
koduje trzeci numer, a następnie pierwszy.Następnie przekazujemy adresy IP przez trzecią krawędź, aby ustalić ostateczną liczbę. Łączymy adresy IP z tym samym prefiksem.
W przypadku prefiksów
0
i1
obaj wychodzą z górnej krawędzi, aby zdecydować o trzeciej liczbie.W przypadku
2
prefiksu adresy IP wychodzą z rogów od dolnej krawędzi.Obie krawędzie zamieniają pierwszy i trzeci numer, naciskają drugi numer i zamieniają go z trzecim, aby uzyskać prawidłową kolejność.
źródło