esmpmpmeimtmemqmememqicelic
esmpmpmeimememqmlmtmemoc
esmpmpmeimememqmtmtmtmtmeic
esmpmpmeimememqmtmtmtmtmeic
esmpmpmeimeiscic
esmpmpmeimemeimfsic
esmpmpmeisciscimqmtmemeic
esmpmpmeiscimlmqmqmemeic
esmpmpmeimemomqmqmemeic
esmpmpmeisciscimfsimqic
esmpmpmeimeiscic
esmpmpmeisciscimfsimqic
esmpmpmeimemomqmemqmemtmemoc
esmpmpmeiscic
esmpmpmeimemomeimqmeic
esmpmpmeimemeimqmlmtmeic
esmpmpmeimtmtmqmemtmtmeic
esmpmpmeimemomqmqmtmeic
esmpmpmeimemqmqmemeic
esmpmpmeiscimlmqmqmemeic
esmpmpmeiscimqmtmtmtmqmemeic
esmpmpmeimeimemtmqmemeic
esmpmpmeimeiscimlmlmtmlmtic
esmpmpmeimemeimqmlmtmeic
~~
すべての改行は表面的な目的のためであり、プログラムに影響を与えることなく削除できます。
オンラインでお試しください!
説明
Lynn {|}
が許可されたキャラクターのリストから削除した後、私は何か新しいことを試みなければなりませんでした。それでも、任意の文字列を構築し、コードとして評価することができます。
まず、スタックに値を取得する必要があります。最初に何かをポップせずに(そして入力を読み取らずに)何かをプッシュする唯一の利用可能なビルトインはes
、ea
とet
です。これらのすべてから何らかの方法で開始できると確信していますがes
、現在のタイムスタンプをプッシュする方法を使用しました。私はその実際の値について仮定をしたくなかったので、私はその素数性をテストしますmp
(与える0
と1
私が持っていることを確認するために、再度テスト、その値の素数を)し、0
スタックに。A 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
(]
)をプッシュします。その1つを評価し~
て他のすべてを文字列にラップし、その文字列をで評価します~
。
プログラムの最後に実行される実際のコードは、次のとおりです。
ri__2#,:)/2/[1W]f.%:~<p
以前の解決策を見る説明を。
¦
は毎回私を殺します。昨日これを試しましたが、Ṛ
むしろではなく、うまくいかないU
と決めḤ
ました。