esmpmpmeimtmemqmememqicelic
esmpmpmeimememqmlmtmemoc
esmpmpmeimememqmtmtmtmtmeic
esmpmpmeimememqmtmtmtmtmeic
esmpmpmeimeiscic
esmpmpmeimemeimfsic
esmpmpmeisciscimqmtmemeic
esmpmpmeiscimlmqmqmemeic
esmpmpmeimemomqmqmemeic
esmpmpmeisciscimfsimqic
esmpmpmeimeiscic
esmpmpmeisciscimfsimqic
esmpmpmeimemomqmemqmemtmemoc
esmpmpmeiscic
esmpmpmeimemomeimqmeic
esmpmpmeimemeimqmlmtmeic
esmpmpmeimtmtmqmemtmtmeic
esmpmpmeimemomqmqmtmeic
esmpmpmeimemqmqmemeic
esmpmpmeiscimlmqmqmemeic
esmpmpmeiscimqmtmtmtmqmemeic
esmpmpmeimeimemtmqmemeic
esmpmpmeimeiscimlmlmtmlmtic
esmpmpmeimemeimqmlmtmeic
~~
Todos los avances de línea son para fines cosméticos y se pueden eliminar sin afectar el programa.
Pruébalo en línea!
Explicación
Después de que Lynn fuera eliminada {|}
de la lista de personajes permitidos, tuve que probar algo nuevo. Resulta que todavía podemos construir cadenas arbitrarias y evaluarlas como código.
Primero, necesitamos obtener algo de valor en la pila. Los únicos elementos integrados disponibles que empujan algo sin que aparezca otra cosa primero (y sin leer la entrada) son es
, ea
y et
. Estoy seguro de que podría comenzar desde todos estos aspectos de una forma u otra, pero fui con lo es
que empuja la marca de tiempo actual. Como no quería hacer suposiciones acerca de su valor real, pruebo su primalidad con mp
(que da 0
y 1
) y pruebo nuevamente la primalidad de ese valor para asegurarme de que tengo una 0
pila. A 1
será más útil, de modo que calculamos exp(0)
con me
y convertirlo en un número entero con i
. Entonces todos los números comienzan con:
esmpmpmei
Ahora tenemos un montón de operadores matemáticos unarios para trabajar:
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)
También podemos combinar algunos elementos integrados para funciones más elaboradas de 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.
Con estos, podemos obtener cualquier número en 0 <= x < 128
(y muchos otros) en menos de 10 pasos 1
. Estoy seguro de que un subconjunto mucho más pequeño de estos comandos también sería suficiente. He escrito un pequeño programa de Mathematica para determinar todos estos fragmentos (no es muy legible, lo siento):
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]
Con eso, simplemente podemos empujar una lista arbitraria de códigos de caracteres, convirtiendo cada uno de ellos en un carácter con c
posterioridad. Una vez que hemos empujado todo el código que queremos ejecutar, presionamos 95
( ]
). Evaluamos ese con ~
para envolver todos los demás en una cadena, y luego evaluamos esa cadena con ~
.
El código real que se ejecuta al final del programa es nuevamente:
ri__2#,:)/2/[1W]f.%:~<p
Vea mi solución anterior para una explicación.
¦
funciona me mata cada vez, lo intenté ayer pero conṚ
más queU
y decidí queḤ
no estaba funcionando.