Cykliczna lewenquina

45

tło

Jak wie większość regularnych PPCG, to program, który po uruchomieniu wyświetla swój własny kod źródłowy; a odległość Levenshteina między dwoma łańcuchami to minimalna liczba wstawek, usunięć i edycji potrzebnych do zmiany jednego łańcucha na drugi. W tym wyzwaniu łączymy dwie koncepcje w „levenquine”: program, który wyświetla swój własny kod źródłowy, ale z jednym wystąpieniem jednego znaku wstawionego, usuniętego lub zastąpionego innym znakiem. (Innymi słowy, odległość Levenshteina między programem a jego wynikiem wynosi 1).

Zadanie

Napisz lewenquine w taki sposób, że jej wyjściem jest lewenquine, wyjściem tego programu jest również lewenquine i tak dalej. Ponadto w pewnym momencie sekwencja wielokrotnego uruchamiania programu, uruchamiania danych wyjściowych, uruchamiania danych wyjściowych itp. Musi ostatecznie powrócić do oryginalnego programu.

Jest jeszcze jedno dodatkowe ograniczenie, które znacznie utrudnia: muszą być gdzieś w tym cyklu dwa odrębne programy, które nie mają wspólnych znaków (innymi słowy, nie ma znaku, który istnieje w jednym programie, a także w innym programie). W związku z tym Twój program będzie musiał stopniowo przekształcić się w inny zestaw znaków iz powrotem.

Jeśli używasz języka programowania, który ma nieunikniony schemat, który jest wymagany w każdym programie, który generuje dane wyjściowe (np. Ma tylko jeden sposób na napisanie printinstrukcji i żadnych innych przydatnych form danych wyjściowych), możesz potraktować ten szablon jako nieistniejący w tym celu określania, które znaki mają dwa programy wspólne. Musisz jednak policzyć tę płytkę kotłową w celu ustalenia właściwości Levenquine kodu.

Wyjaśnienia

  • Każdy z „programów” w cyklu może być pełnym programem lub funkcją. Nie wszystkie muszą być takie same, np. Niektóre mogą być pełnymi programami, a niektóre funkcjami.
  • Nie wszystkie programy w cyklu muszą używać tej samej formy danych wyjściowych. Na przykład niektóre mogą generować za pośrednictwem standardowego wyjścia, a niektóre mogą generować za pomocą standardowego błędu.
  • Twoje programy będą uruchamiane bez wprowadzania danych (lub w językach, które wymagają wprowadzania danych w celu zrobienia czegokolwiek, najprostsze z możliwych).
  • Obowiązują właściwe zasady quine ; chociaż Levenquine nie jest prawdziwym quine, nie możesz robić niczego, co byłoby nielegalne, pisząc odpowiedni quine. W szczególności program zerowy nigdy nie jest prawidłowym wyjściem z właściwej Levenquine (i dlatego nie może być częścią twojego cyklu).
  • Ograniczenie Levenquine jest mierzone raczej w postaci znaków niż bajtów (np. êJest jednym znakiem, nawet jeśli źródło jest zakodowane w UTF-8). Ograniczenie braku wspólnych znaków mierzy się również w kategoriach znaków. Warunek zwycięstwa liczy się jednak w bajtach.

Warunek zwycięstwa

Prześlij co najmniej następujące trzy programy z cyklu: najkrótszy program (mierzony w bajtach); oraz dwa programy z cyklu, które nie mają wspólnych znaków. Możliwe, że dwa z nich są takie same, a także możliwe, że wszystkie trzy są różne. Wynik oparty jest na długości w bajtach najkrótszego programu, przy czym krótszy jest lepszy, co czyni z tego rodzaju zawody w .


źródło
Dla osób, które mogą zobaczyć usunięte posty: post Sandbox był tutaj .
Myślę, że dobrze by było, gdyby odpowiedzi zawierały długość cyklu.
mbomb007
Co jeśli, powiedzmy, język ma kilka funkcji do wykonywania danych wyjściowych, ale wszystkie one wspólnie korzystają ze znaków?
Ørjan Johansen
2
@ ØrjanJohansen: Wydaje mi się, że nie byłbym przeciwny wybraniu jednego z nich i trzymaniu się go w tym przypadku. Jednak jest to prawdopodobnie niekonkurencyjne; Chciałem, aby reguła była obiektywna, ponieważ w przeciwnym razie ludzie będą mieli skłonność do wyłapywania w niej luk, a jeśli spróbujesz sprawić, że reguła będzie zbyt złożona, zwykle pojawiają się spory o jej znaczenie.
Czy może to być nieco lewenquine? Czy w odległości od oryginalnego kodu źródłowego jest 1 bajt wyłączony?
Magic Octopus Urn

Odpowiedzi:

34

Gol> <> , 252 167 bajtów

1>'r&ff9++r}}r&f*bc++1z.r}r6=z?Hzznr6rHr}r:ee+6+=z9*5c*+1z . }&z+5c*&H}rebe*b+ke++rHS6PWSb`S6P$$1W5/11b6W6EE/W6EE`S6P$$W61`S6P5W6$5_61P1WW_b_

Wypróbuj online!

I wzajemnie odrębny program ( Weryfikacja ):

0<CŽB‚‚UGGŽ™™ŽB‚F~GGM–JŽ™ŽRY–[d––ŠŽRŽdŽ™ŽVGRGY–UFQFGM–<J<™B–GQFBd™Ž~F~G‡GGŽd;oRl-7-7so~|;oRl@@-Ms7QKMM3-3-3~R-4sRaaK-3sRaa|;oRl@@sR43M|;oRlQ-sR43@Q{RMlMss3{~{"

Wypróbuj online!

Jest to głównie zainspirowane moją odpowiedzią na wyzwanie wzajemnie wykluczających się Quines , z podziękowaniami dla Gol Bubblera > .

Oto program weryfikacyjny, który możesz uruchomić. Niestety upłynął limit czasu, ale możesz obserwować, jak jedna sekcja kodu buduje drugą, a następnie możesz skopiować ostatnią wydrukowaną wersję i wkleić ją do danych wejściowych, aby kontynuować. W końcu dotrzesz do pierwszego programu, który wprowadziłeś.

Wyjaśnienie

Obie sekcje kodu składają się z dwóch sekcji, rzeczywistej części wykonawczej i danych zawierających drugą sekcję kodu. Oba działają praktycznie identycznie:

Zależą od flagi (pierwszy znak kodu albo 1albo 0). Jeśli flaga jest ustawiona, zaczną budować drugą sekcję kodu, usuwając 252 znak, dodając / odejmując 28od niego i dołączając go do kodu.

Oto na przykład dwie pierwsze iteracje kodu po pierwszym programie powyżej:

1>'r&ff9++r}}r&f*bc++1z.r}r6=z?Hzznr6rHr}r:ee+6+=z9*5c*+1z . }&z+5c*&H}rebe*b+ke++rHS6PWSb`S6P$$1W5/11b6W6EE/W6EE`S6P$$W61`S6P5W6$5_61P1WW_b_C

1>'r&ff9++r}}r&f*bc++1z.r}r6=z?Hzznr6rHr}r:ee+6+=z9*5c*+1z . }&z+5c*&H}rebe*b+ke++rHS6PWSb`S6P$$1W5/11b6W6EE/W6EE`S6P$$W61`S6P5W6$5_61P1WW_b_CŽ

W końcu, gdy osiągnie koniec bieżącej sekcji, odwraca drugi znak kodu ( <do >i z powrotem), aby wskazać drugą sekcję.

Oto obie sekcje razem, które mają przejść z wykonywania pierwszej sekcji do wykonywania drugiej.

1>'r&ff9++r}}r&f*bc++1z.r}r6=z?Hzznr6rHr}r:ee+6+=z9*5c*+1z . }&z+5c*&H}rebe*b+ke++rHS6PWSb`S6P$$1W5/11b6W6EE/W6EE`S6P$$W61`S6P5W6$5_61P1WW_b_CŽB‚‚UGGŽ™™ŽB‚F~GGM–JŽ™ŽRY–[d––ŠŽRŽdŽ™ŽVGRGY–UFQFGM–<J<™B–GQFBd™Ž~F~G‡GGŽd;oRl-7-7so~|;oRl@@-Ms7QKMM3-3-3~R-4sRaaK-3sRaa|;oRl@@sR43M|;oRlQ-sR43@Q{RMlMss3{~{"

Wypróbuj online!

Flagi są przeciwne dla każdej sekcji, więc nowo wykonywana sekcja zacznie usuwać drugą sekcję kodu, aż osiągnie swój własny kod. W tym momencie odwraca flagę i cykl się powtarza.

Jo King
źródło