esmpmpmeimtmemqmememqicelic
esmpmpmeimememqmlmtmemoc
esmpmpmeimememqmtmtmtmtmeic
esmpmpmeimememqmtmtmtmtmeic
esmpmpmeimeiscic
esmpmpmeimemeimfsic
esmpmpmeisciscimqmtmemeic
esmpmpmeiscimlmqmqmemeic
esmpmpmeimemomqmqmemeic
esmpmpmeisciscimfsimqic
esmpmpmeimeiscic
esmpmpmeisciscimfsimqic
esmpmpmeimemomqmemqmemtmemoc
esmpmpmeiscic
esmpmpmeimemomeimqmeic
esmpmpmeimemeimqmlmtmeic
esmpmpmeimtmtmqmemtmtmeic
esmpmpmeimemomqmqmtmeic
esmpmpmeimemqmqmemeic
esmpmpmeiscimlmqmqmemeic
esmpmpmeiscimqmtmtmtmqmemeic
esmpmpmeimeimemtmqmemeic
esmpmpmeimeiscimlmlmtmlmtic
esmpmpmeimemeimqmlmtmeic
~~
Усі корми для лінійки призначені для косметичних цілей і їх можна видалити, не впливаючи на програму.
Спробуйте в Інтернеті!
Пояснення
Після того, як Лінн була видалена {|}
зі списку дозволених персонажів, мені довелося спробувати щось нове. Виявляється, ми все ще можемо побудувати довільні рядки та оцінити їх як код.
Спочатку нам потрібно отримати деяку цінність на стеку. Доступні тільки вбудовані модулі , які штовхають що - щось не вискакують що - то ще перший (і без читання входу) є es
, ea
і et
. Я впевнений, що ви могли почати з усіх цих так чи інакше, але я пішов із тим, es
що підштовхує поточну мітку часу. Оскільки я не хотів робити жодних припущень щодо його фактичного значення, я перевіряю його первинність за допомогою mp
(що дає 0
і 1
) та ще раз перевіряю первинність цього значення, щоб переконатися, що я потрапив 0
у стек. 1
Буде більш корисним, тому ми обчислимо exp(0)
з me
і перетворити його в ціле число з i
. Отже всі цифри починаються з:
esmpmpmei
Зараз у нас є ціла купа операторів з одинарної математики, з якими можна працювати:
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)
Ми також можемо поєднати кілька вбудованих для більш детальних функцій 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.
Використовуючи ці дані, ми можемо отримати будь-яке число в 0 <= x < 128
(та багатьох інших) менш ніж за 10 кроків 1
. Я впевнений, що набагато менший підмножина цих команд також буде достатнім. Я написав невелику програму Mathematica, щоб визначити всі ці фрагменти (це не дуже читабельно, вибачте):
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]
З цим ми можемо просто висунути довільний список символьних кодів, перетворивши кожен з них у символ із c
наступним. Після того, як ми висунули весь код, який ми хочемо виконати, ми натискаємо 95
( ]
). Ми оцінюємо ту, з якою ~
обернути всі інші в рядок, а потім зрівняємо її ~
.
Дійсний код, виконаний в кінці програми, знову:
ri__2#,:)/2/[1W]f.%:~<p
Дивіться моє попереднє рішення для пояснення.
¦
роботи вбиває мене кожен раз, я спробував це вчора, але з,Ṛ
а неU
вирішив, щоḤ
це не працює.