esmpmpmeimtmemqmememqicelic
esmpmpmeimememqmlmtmemoc
esmpmpmeimememqmtmtmtmtmeic
esmpmpmeimememqmtmtmtmtmeic
esmpmpmeimeiscic
esmpmpmeimemeimfsic
esmpmpmeisciscimqmtmemeic
esmpmpmeiscimlmqmqmemeic
esmpmpmeimemomqmqmemeic
esmpmpmeisciscimfsimqic
esmpmpmeimeiscic
esmpmpmeisciscimfsimqic
esmpmpmeimemomqmemqmemtmemoc
esmpmpmeiscic
esmpmpmeimemomeimqmeic
esmpmpmeimemeimqmlmtmeic
esmpmpmeimtmtmqmemtmtmeic
esmpmpmeimemomqmqmtmeic
esmpmpmeimemqmqmemeic
esmpmpmeiscimlmqmqmemeic
esmpmpmeiscimqmtmtmtmqmemeic
esmpmpmeimeimemtmqmemeic
esmpmpmeimeiscimlmlmtmlmtic
esmpmpmeimemeimqmlmtmeic
~~
Wszystkie kanały są przeznaczone do celów kosmetycznych i można je usunąć bez wpływu na program.
Wypróbuj online!
Wyjaśnienie
Po usunięciu Lynna {|}
z listy dozwolonych postaci musiałem spróbować czegoś nowego. Okazuje się, że nadal możemy konstruować dowolne ciągi i oceniać je jako kod.
Najpierw musimy zdobyć pewną wartość na stosie. Jedynymi dostępnymi wbudowanymi funkcjami, które wypychają coś bez uprzedniego wyskakiwania czegoś innego (i bez czytania danych wejściowych) są es
, ea
i et
. Jestem pewien, że możesz zacząć od tych wszystkich sposobów, ale poszedłem z tym, es
co przesuwa aktualny znacznik czasu. Ponieważ nie chciałem przyjmować żadnych założeń dotyczących jego rzeczywistej wartości, testuję jej pierwotność za pomocą mp
(co daje 0
i 1
) i testuję pierwotność tej wartości ponownie, aby upewnić się, że mam 0
na stosie. 1
Będzie bardziej przydatny, więc obliczamy exp(0)
ze me
i przekształcić go w liczbie całkowitej z i
. Wszystkie liczby zaczynają się od:
esmpmpmei
Teraz mamy całą masę jednoargumentowych operatorów matematyki do współpracy:
i int(x) (floor for positive numbers, ceiling for negative)
me exp(x)
ml ln(x)
mq sqrt(x)
mo round(x)
mt tan(x)
Możemy również połączyć kilka wbudowanych funkcji, aby uzyskać bardziej rozbudowane funkcje x
:
sci Extract first digit of x and add 48 (convert to string, convert
to character, convert to integer).
ceui Convert to character, convert to upper case, convert to integer.
celi Convert to character, convert to lower case, convert to integer.
mfsi Get a sorted list of prime factors of x and concatenate them into
a new number.
mfseei Get a sorted list of prime factors, interleave it with 1,2,3,..., and
concatenate the result into a new number.
Korzystając z nich, możemy uzyskać dowolną liczbę w 0 <= x < 128
(i wiele innych) w mniej niż 10 krokach od 1
. Jestem pewien, że wystarczyłby znacznie mniejszy podzbiór tych poleceń. Napisałem mały program Mathematica, aby określić wszystkie te fragmenty (przepraszam, nie jest to zbyt czytelne):
codes = SortBy[
Select[Nest[Select[DeleteDuplicatesBy[SortBy[Join @@ (Through[{
List,
If[1 <= # < 50, {Exp@#, #2 <> "me"}, Nothing] &,
If[# >= 1, {Log@#, #2 <> "ml"}, Nothing] &,
If[# > 1, {Sqrt@#, #2 <> "mq"}, Nothing] &,
{If[# > 0, Floor@#, Ceiling@#], #2 <> "i"} &,
{Floor[# + 1/2], #2 <> "mo"} &,
{Tan@#, #2 <> "mt"} &,
If[NumberQ@# && # >= 0, {First@
ToCharacterCode@ToString@#, #2 <> "sci"},
Nothing] &,
If[IntegerQ@# &&
32 < # < 65536, {First@
ToCharacterCode@
ToUpperCase@FromCharacterCode@#, #2 <> "ceui"},
Nothing] &,
If[IntegerQ@# &&
32 < # < 65536, {First@
ToCharacterCode@
ToLowerCase@FromCharacterCode@#, #2 <> "celi"},
Nothing] &,
If[IntegerQ@# && # > 0, ## & @@ {
{FromDigits[
"" <> (ToString /@ (f =
Join @@ Table @@@ FactorInteger@#))], #2 <>
"mfsi"},
{FromDigits[
"" <> (ToString /@
MapIndexed[## & @@ {#2[[1]] - 1, #} &, f])], #2 <>
"mfeesi"}
}, Nothing] &
}@##] &) @@@ #, StringLength@*Last],
First], #[[1]] < 1000000 &] &, {{1, "esmpmpmei"}}, 9],
IntegerQ@# && 0 <= # < 128 &@*First], First]
Dzięki temu możemy po prostu przesunąć dowolną listę kodów znaków, a następnie przekształcić każdy z nich w znak c
. Po wypchnięciu całego kodu, który chcemy wykonać, naciskamy 95
( ]
). Ewaluujemy ten jeden, ~
aby owinąć wszystkie pozostałe w ciąg, a następnie ewaluujemy ten ciąg~
.
Rzeczywisty kod uruchamiany na końcu programu to ponownie:
ri__2#,:)/2/[1W]f.%:~<p
Zobacz moje poprzednie rozwiązanie, aby uzyskać wyjaśnienie.
¦
działania zabija mnie za każdym razem, próbowałem tego wczoraj, aleṚ
raczej zamiastU
i zdecydowałem, żeḤ
to nie działa.