esmpmpmeimtmemqmememqicelic
esmpmpmeimememqmlmtmemoc
esmpmpmeimememqmtmtmtmtmeic
esmpmpmeimememqmtmtmtmtmeic
esmpmpmeimeiscic
esmpmpmeimemeimfsic
esmpmpmeisciscimqmtmemeic
esmpmpmeiscimlmqmqmemeic
esmpmpmeimemomqmqmemeic
esmpmpmeisciscimfsimqic
esmpmpmeimeiscic
esmpmpmeisciscimfsimqic
esmpmpmeimemomqmemqmemtmemoc
esmpmpmeiscic
esmpmpmeimemomeimqmeic
esmpmpmeimemeimqmlmtmeic
esmpmpmeimtmtmqmemtmtmeic
esmpmpmeimemomqmqmtmeic
esmpmpmeimemqmqmemeic
esmpmpmeiscimlmqmqmemeic
esmpmpmeiscimqmtmtmtmqmemeic
esmpmpmeimeimemtmqmemeic
esmpmpmeimeiscimlmlmtmlmtic
esmpmpmeimemeimqmlmtmeic
~~
Semua umpan garis untuk keperluan kosmetik dan dapat dihapus tanpa mempengaruhi program.
Cobalah online!
Penjelasan
Setelah Lynn dihapus {|}
dari daftar karakter yang diizinkan, saya harus mencoba sesuatu yang baru. Ternyata kita masih bisa membuat string arbitrer dan mengevaluasinya sebagai kode.
Pertama, kita perlu mendapatkan beberapa nilai ke stack. Satu-satunya built-in yang mendorong sesuatu tanpa muncul sesuatu yang lain terlebih dahulu (dan tanpa membaca input) adalah es
, ea
dan et
. Saya yakin Anda bisa mulai dari semua ini dengan satu atau lain cara, tapi saya pergi dengan es
yang mendorong cap waktu saat ini. Karena saya tidak ingin membuat asumsi tentang nilai aktualnya, saya menguji keutamaannya dengan mp
(yang memberi 0
dan 1
) dan menguji keutamaan nilai itu lagi untuk memastikan saya mendapatkan nilai 0
di tumpukan. Sebuah 1
akan lebih berguna, jadi kita menghitung exp(0)
dengan me
dan mengubahnya menjadi integer dengan i
. Jadi semua angka dimulai dengan:
esmpmpmei
Sekarang kita punya banyak operator matematika unary untuk bekerja dengan:
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)
Kami juga dapat menggabungkan beberapa built-in untuk fungsi yang lebih rumit dari 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.
Dengan menggunakan ini, kami dapat memperoleh nomor dalam 0 <= x < 128
(dan banyak lainnya) dalam waktu kurang dari 10 langkah dari 1
. Saya yakin subset yang jauh lebih kecil dari perintah ini juga cukup. Saya telah menulis sebuah program Mathematica kecil, untuk menentukan semua cuplikan ini (tidak mudah dibaca, maaf):
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]
Dengan itu, kita cukup mendorong daftar kode karakter yang sewenang-wenang, mengonversinya masing-masing menjadi karakter dengan c
sesudahnya. Setelah kami mendorong seluruh kode yang ingin kami jalankan, kami mendorong 95
( ]
). Kami mengevaluasinya dengan ~
membungkus semua yang lain dalam sebuah string, dan kemudian kami mengevaluasinya ~
.
Sekali lagi kode aktual yang dijalankan di akhir program:
ri__2#,:)/2/[1W]f.%:~<p
Lihat solusi saya sebelumnya untuk penjelasan.
¦
kerjanya membunuh saya setiap kali, saya mencoba ini kemarin tetapi denganṚ
dan bukannyaU
memutuskanḤ
itu tidak berhasil.