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 os feeds de linha são para fins cosméticos e podem ser removidos sem afetar o programa.
Experimente online!
Explicação
Depois que Lynn foi removido {|}
da lista de caracteres permitidos, tive que tentar algo novo. Acontece que ainda podemos construir seqüências arbitrárias e avaliá-las como código.
Primeiro, precisamos agregar algum valor à pilha. Os únicos built-ins disponíveis que enviam algo sem aparecer primeiro (e sem ler a entrada) são es
, ea
e et
. Tenho certeza de que você pode começar de todas essas formas, mas fui com o es
que pressiona o timestamp atual. Como não queria fazer suposições sobre seu valor real, testo sua primalidade com mp
(o que dá 0
e 1
) e testo novamente a primalidade desse valor para garantir que eu esteja 0
na pilha. Um 1
será mais útil, então calculamos exp(0)
com me
e transformá-lo em um inteiro com i
. Então, todos os números começam com:
esmpmpmei
Agora temos vários operadores de matemática unários para trabalhar:
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)
Também podemos combinar alguns recursos internos para funções mais 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.
Usando esses, podemos obter qualquer número 0 <= x < 128
(e muitos outros) em menos de 10 etapas a partir de 1
. Tenho certeza de que um subconjunto muito menor desses comandos também seria suficiente. Eu escrevi um pequeno programa Mathematica, para determinar todos esses trechos (não é muito legível, desculpe):
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]
Com isso, podemos simplesmente enviar uma lista arbitrária de códigos de caracteres, convertendo cada um deles em um caractere c
posteriormente. Depois de empurrarmos todo o código que queremos executar, pressionamos 95
( ]
). Avaliamos aquele com ~
que todos os outros devem ser agrupados em uma string e, em seguida, avaliamos essa string com ~
.
O código real executado no final do programa é novamente:
ri__2#,:)/2/[1W]f.%:~<p
Veja minha solução anterior para uma explicação.
¦
funciona mata-me o tempo todo, eu tentei isso ontem, mas comṚ
em vez deU
e decidiu oḤ
não estava funcionando.