tło
Jak wie większość regularnych PPCG, quine 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 print
instrukcji 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 golfa kodowego .