esmpmpmeimtmemqmememqicelic
esmpmpmeimememqmlmtmemoc
esmpmpmeimememqmtmtmtmtmeic
esmpmpmeimememqmtmtmtmtmeic
esmpmpmeimeiscic
esmpmpmeimemeimfsic
esmpmpmeisciscimqmtmemeic
esmpmpmeiscimlmqmqmemeic
esmpmpmeimemomqmqmemeic
esmpmpmeisciscimfsimqic
esmpmpmeimeiscic
esmpmpmeisciscimfsimqic
esmpmpmeimemomqmemqmemtmemoc
esmpmpmeiscic
esmpmpmeimemomeimqmeic
esmpmpmeimemeimqmlmtmeic
esmpmpmeimtmtmqmemtmtmeic
esmpmpmeimemomqmqmtmeic
esmpmpmeimemqmqmemeic
esmpmpmeiscimlmqmqmemeic
esmpmpmeiscimqmtmtmtmqmemeic
esmpmpmeimeimemtmqmemeic
esmpmpmeimeiscimlmlmtmlmtic
esmpmpmeimemeimqmlmtmeic
~~
linefeeds ทั้งหมดมีวัตถุประสงค์เพื่อความงามและสามารถลบออกได้โดยไม่ส่งผลกระทบต่อโปรแกรม
ลองออนไลน์!
คำอธิบาย
หลังจากลินน์ลบออก{|}
จากรายการของตัวละครที่อนุญาตฉันต้องลองอะไรใหม่ ๆ ปรากฎว่าเรายังสามารถสร้างสตริงโดยพลการและประเมินเป็นโค้ด
อันดับแรกเราต้องรับค่าบางอย่างลงบนสแต็ก ที่มีอยู่เพียงตัว -ins ที่จะผลักดันสิ่งที่ไม่ popping อย่างอื่นเป็นครั้งแรก (และโดยไม่ต้องอ่านอินพุต) เป็น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
( ]
) เรา eval ที่เป็นหนึ่งเดียวกับ~
การตัดคนอื่น ๆ ทั้งหมดในสตริงและแล้วเรา eval ~
สตริงที่มี
รหัสจริงที่ทำงานในตอนท้ายของโปรแกรมเป็นอีกครั้ง:
ri__2#,:)/2/[1W]f.%:~<p
ดูโซลูชันก่อนหน้าของฉันสำหรับคำอธิบาย
¦
ทำงานฆ่าฉันทุกครั้งฉันลองทำเมื่อวานนี้ แต่มีṚ
มากกว่าU
และตัดสินใจว่าḤ
มันไม่ได้ผล