esmpmpmeimtmemqmememqicelic
esmpmpmeimememqmlmtmemoc
esmpmpmeimememqmtmtmtmtmeic
esmpmpmeimememqmtmtmtmtmeic
esmpmpmeimeiscic
esmpmpmeimemeimfsic
esmpmpmeisciscimqmtmemeic
esmpmpmeiscimlmqmqmemeic
esmpmpmeimemomqmqmemeic
esmpmpmeisciscimfsimqic
esmpmpmeimeiscic
esmpmpmeisciscimfsimqic
esmpmpmeimemomqmemqmemtmemoc
esmpmpmeiscic
esmpmpmeimemomeimqmeic
esmpmpmeimemeimqmlmtmeic
esmpmpmeimtmtmqmemtmtmeic
esmpmpmeimemomqmqmtmeic
esmpmpmeimemqmqmemeic
esmpmpmeiscimlmqmqmemeic
esmpmpmeiscimqmtmtmtmqmemeic
esmpmpmeimeimemtmqmemeic
esmpmpmeimeiscimlmlmtmlmtic
esmpmpmeimemeimqmlmtmeic
~~
Alle Zeilenvorschübe dienen kosmetischen Zwecken und können ohne Beeinträchtigung des Programms entfernt werden.
Probieren Sie es online!
Erläuterung
Nachdem Lynn {|}
von der Liste der erlaubten Charaktere gestrichen war, musste ich etwas Neues ausprobieren. Es stellt sich heraus, dass wir immer noch beliebige Zeichenfolgen konstruieren und als Code auswerten können.
Zunächst müssen wir den Stack aufwerten. Die einzige verfügbare integrierten Ins , die etwas drücken , ohne etwas anderes zuerst popping (und ohne die Eingabe zu lesen) sind es
, ea
und et
. Ich bin mir sicher, dass Sie von all diesen Möglichkeiten ausgehen können, aber ich habe versucht, es
den aktuellen Zeitstempel zu ändern. Da ich keine Vermutungen über den tatsächlichen Wert anstellen wollte, teste ich seine Ursprünglichkeit mitmp
(was 0
und ergibt 1
) und teste die Primalität dieses Wertes erneut, um sicherzustellen, dass ich einen 0
auf dem Stapel habe. A 1
ist nützlicher, also berechnen wir exp(0)
mit me
und wandeln es in eine Ganzzahl mit um i
. Alle Zahlen beginnen also mit:
esmpmpmei
Jetzt haben wir eine ganze Reihe von unären Mathematikoperatoren, mit denen wir arbeiten können:
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)
Wir können auch einige integrierte Funktionen kombinieren, um Folgendes zu erreichen 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.
Mit diesen können wir eine beliebige Anzahl in 0 <= x < 128
(und viele andere) in weniger als 10 Schritten von erhalten 1
. Ich bin sicher, dass eine viel kleinere Teilmenge dieser Befehle auch ausreichen würde. Ich habe ein kleines Mathematica-Programm geschrieben, um all diese Ausschnitte zu bestimmen (es ist nicht sehr lesbar, sorry):
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]
Damit können wir einfach eine beliebige Liste von Zeichencodes verschieben und diese anschließend in ein Zeichen mit umwandeln c
. Sobald wir den gesamten Code gepusht haben, den wir ausführen möchten, drücken wir 95
( ]
). Wir evaluieren diesen mit ~
, um alle anderen in eine Zeichenfolge zu wickeln, und dann evaluieren wir diese Zeichenfolge mit ~
.
Der eigentliche Code, der am Ende des Programms ausgeführt wird, lautet erneut:
ri__2#,:)/2/[1W]f.%:~<p
Eine Erklärung finden Sie in meiner vorherigen Lösung .
¦
funktioniert tötet mich jedes Mal, habe ich versucht , das gestern , aber mitṚ
nichtU
und beschlossen , dieḤ
nicht trainieren.