Stax , 11 bajtów (wynik 4)
'''cc'~~'dd
Uruchom i debuguj online!
Mam zaszczyt mieć pierwszą (chronologicznie) odpowiedź na to wyzwanie z wynikiem wyższym lub równym 4. Być może wynik może być jeszcze wyższy.
W Stax zapisuje się literał łańcuchowy składający się z jednego znaku '
, podobnie '', 'c, 'd, '~
jak wszystkie literały łańcuchowe. Odpowiednie polecenia c
d
i ~
środki duplikują górę stosu głównego, otwierają górę stosu głównego i otwierają górę stosu głównego i przesuwają odpowiednio do stosu wejściowego. W przypadku tego wyzwania stos wejściowy nie wpływa na wynik i nie jest ważny, dlatego możemy powiedzieć d
i ~
są identyczne.
Wyjaśnienie
Najlepiej jest podzielić kod na kilka części i rozważyć je osobno.
Gdy nie zostanie zmieniony, '''cc
dosuwa literał '
i literał c
do głównego stosu i kopiuje górę, tak aby stos był (od dołu) c,c,'
.
Gdy nie zostanie '~~
zmieniony , popycha literał, ~
a następnie wyskakuje (i przesuwa się do stosu wejściowego), co w zasadzie nie jest możliwe dla głównego stosu.
Gdy nie zostanie 'dd
zmieniony , przesuwa literał, d
a następnie wyskakuje, co stanowi kolejny brak opozycji dla głównego stosu.
Pod koniec programu, ponieważ nie jest wykonywane żadne jawne wyjście, górna część głównego stosu zostanie domyślnie wydrukowana.
Jeśli program działa tak, jak jest, końcowy stos jest nadal c,c,'
i będzie generowany c
.
Jeśli pierwsza część stanie się ''cc
, mamy literał '
i dwie instrukcje kopiowania, końcowy stos będzie ',','
. Biorąc pod uwagę, że dwie pozostałe części nie działają, wynik będzie '
.
Jeśli pierwsza część staje się '''c
, wynik jest w zasadzie taki sam jak w przypadku części niezakłóconej, ale c
nie jest powielany. Tak będzie stos c,'
. Po dwóch „no-op” górna część stosu to c
.
Możemy więc wykryć promieniowanie w pierwszej części.
Druga część i trzecia część działają dokładnie w ten sam sposób. Weźmię trzecią część jako przykład.
Jeśli trzecia część zostanie zmieniona, wówczas dwie pierwsze części zostaną zachowane bez zmian, a stos przed uruchomieniem trzeciej części zostanie zachowany c,c,'
Jeśli trzecia część się stanie 'd
, dosłownie d
zostanie zepchnięty na szczyt głównego stosu i nic więcej nie zostanie zrobione. Na górze głównego stosu znajduje się teraz d
wyjście.
Jeśli trzecia część staje się dd
, dwa elementy są wyskakujące z głównego stosu, a teraz górna część stosu jest '
i jest wyprowadzana.
Stąd możemy wykryć promieniowanie w trzeciej części. Z tego samego powodu możemy wykryć promieniowanie w drugiej części.