TeXを生成してSierpinski Triangle Fractalをタイプセットする


30

チャレンジ

5レベルのSierpinski Triangle FractalをタイプセットするTeX(LaTeX)数学方程式コード(以下に示す)を出力するコードを記述します。最短コードが勝ちます。

詳細

TeX(およびLaTeXなどの友人)は、洗練された組版システムです。数式のネストされた任意の複雑な式をレンダリングできます。偶然にも、この「ネストされた複合体」はフラクタルを説明しています。以下はMathJaXでレンダリングされます

バツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツバツ

ネストされた上付き文字と下付き文字で構成される次のプレーンテキストの数学方程式コードによって:

{{{{{x^x_x}^{x^x_x}_{x^x_x}}^{{x^x_x}^{x^x_x}_{x^x_x}}_{{x^x_x}^{x^x_x}_{x^x_x}}}^{{{x^x_x}^{x^x_x}_{x^x_x}}^{{x^x_x}^{x^x_x}_{x^x_x}}_{{x^x_x}^{x^x_x}_{x^x_x}}}_{{{x^x_x}^{x^x_x}_{x^x_x}}^{{x^x_x}^{x^x_x}_{x^x_x}}_{{x^x_x}^{x^x_x}_{x^x_x}}}}^{{{{x^x_x}^{x^x_x}_{x^x_x}}^{{x^x_x}^{x^x_x}_{x^x_x}}_{{x^x_x}^{x^x_x}_{x^x_x}}}^{{{x^x_x}^{x^x_x}_{x^x_x}}^{{x^x_x}^{x^x_x}_{x^x_x}}_{{x^x_x}^{x^x_x}_{x^x_x}}}_{{{x^x_x}^{x^x_x}_{x^x_x}}^{{x^x_x}^{x^x_x}_{x^x_x}}_{{x^x_x}^{x^x_x}_{x^x_x}}}}_{{{{x^x_x}^{x^x_x}_{x^x_x}}^{{x^x_x}^{x^x_x}_{x^x_x}}_{{x^x_x}^{x^x_x}_{x^x_x}}}^{{{x^x_x}^{x^x_x}_{x^x_x}}^{{x^x_x}^{x^x_x}_{x^x_x}}_{{x^x_x}^{x^x_x}_{x^x_x}}}_{{{x^x_x}^{x^x_x}_{x^x_x}}^{{x^x_x}^{x^x_x}_{x^x_x}}_{{x^x_x}^{x^x_x}_{x^x_x}}}}}

これは5レベルのネストにすぎないことに注意してください。あなたは生成する必要はありません$...$か、$$...$$または他のマークアップは、例えば、あなたは多くのオンラインエディタで生成されたTeXをプレビューすることができます/起動のTeX&カンパニーにおける数学の方程式を終了するために必要な: http://www.hostmath.comしかし、あなたは多くを見つけることができます他も。この質問は友達との議論に触発されました。

更新

同様の質問がありますが、それははるかに一般的であり、異なるソリューションを生成します。あるシステム(TeX)では完全に明示的で、別のシステムでは圧縮されている非常に固定された単純なコードのkolmogorov-complexityを本当に見たかったのです。これnは、5レベルではなくコメントにも対応しています。


2
Hello; I closed your question as a duplicate because I believe that answers can be too trivially modified from the other question to answer this question. However, I like the idea and I think it looks pretty cool! :)
HyperNeutrino

2
For what it's worth, I reopened this question as I do not see the code as being trivially modifiable to translate from one to the other.
AdmBorkBork

4
That's far too quick to be accepting a solution!
Shaggy


2
When I saw this challenge, this answer came to my mind... codegolf.stackexchange.com/a/6830/67961 and... it was yours
J42161217

回答:




14

plain TeX, 29 bytes

\def~#1x{{#1x_#1x^#1x}}~~~~~x

That outputs what others have output. But if we need the code to be compilable it would be 6 bytes more

\def~#1x{{#1x_#1x^#1x}}$~~~~~x$\bye

Explanation

~ is an active character in TeX, so we can give it a (new) definition.

\def~#1x{{#1x_#1x^#1x}} defines ~ as a macro, so that when TeX sees ~, it does the following:

  • Read everything up to the next x, and call that #1 (pattern-matching).
  • Replace the whole thing with {#1x_#1x^#1x}

For example, ~ABCx would get replaced with {ABCx_ABCx^ABCx}.

When ~~~~~x is used, #1 is ~~~~, so the whole thing gets replaced with {~~~~x_~~~~x^~~~~x}. And so on.

Once we have the long string, we can print it out to terminal with \message (and ending with a \bye so TeX stops), so \message{~~~~~x}\bye. Or typeset the resulting expression (as a mathematical formula), by surrounding it in $s : so $~~~~~x$\bye.


Sorry if there's anything wrong, first answer here.
Manuel

For a big n (rather than 5) it could be more efficient to create a macro that outputs a list of n tildes ~ rather than writing ~~~~~. Plus it would look better if the whole expression is typeset under \scriptscriptstyle.
Manuel

Nice trick… can you add an explanation, or mind if I add one? This illustrates a nice feature of pattern-matching in TeX macros, which is not a feature common to many languages (that I know of).
ShreevatsaR

I will add it, but feel free to edit.
Manuel

おっと、あなたのコメントは表示されませんでした…非常によく似た説明を追加しました。気軽に拒否してください。素敵な答えのために+1!
シュリーバツァー




2

JavaScript(ES6)、45 42 37バイト

f=n=>n>4?'x':[...'{^_}'].join(f(-~n))

編集:@Arnauldのおかげで3 2バイト保存されました。5を指定しても2バイトかかります。この41 40 35バイトバージョンは、代わりにパラメーターを取ります。

f=n=>n?[...'{^_}'].join(f(n-1)):'x'



2

Japt21 20 18バイト

5Æ="\{^_}"¬qUª'xÃÌ

試して


説明

5Æ             Ã

長さ5の配列を生成し、その上にマッピングします。

"\{^_}"¬

文字列を文字の配列に分割します

qUª'x

または()のq現在の値を使用して()を文字列に再結合します。Uª"x"

=

その結果をに割り当てUます。

Ì

配列の最後の要素を取得します。


代替、18バイト

上記と同じですが、作成後に配列を減らします。

5o r@"\{^_}"¬qX}'x

試して

再帰オプション。

>4©'xª"\{^_}"¬qßUÄ

試して


1

Java(OpenJDK 8)179 167バイト

@ニールポート

interface Y{static void main(String[]a){System.out.println(t.apply(1));}java.util.function.Function<Integer,String>t=N->N>0?Y.t.apply(N-1).replace("x","{x^x_x}"):"x";}

オンラインでお試しください!


私はあなたがそれを書くために短いだと思うtの代わりにラムダの本当のfunctioとして
ローマグラーフ

プログラム全体を使用する場合は、代わりに使用するt.apply(1)必要がありt.apply(new Integer(a[0]))ます。しかし、なぜメソッドを投稿しないのですか?String t(int n){return n>0?t(n-1).replace("x","{x^x_x}"):"x";}そして挑戦の要件は、Java 7再帰的な方法を使用すると、ラムダよりも短くなり、(ではない)完全なプログラムになる場合:interface Y{static void main(String[]a){System.out.print(t(new Integer(a[0])));}static String t(int n){return n>0?t(n-1).replace("x","{x^x_x}"):"x";}}
ケビンCruijssen

0

Wolfram言語(Mathematica)-40文字

ここで 3つのベストアンサーを要約します

40バイト:

Nest["{"<>#<>"_"<>#<>"^"<>#<>"}"&,"x",5]

41バイト:

Nest[StringReplace["x"->"{x^x_x}"],"x",5]

44バイト:

Last@SubstitutionSystem["x"->"{x^x_x}","x",5]

3
最初に他の人に数日を残すことなく、あなた自身の挑戦に答えることは推奨されません。
ミスターXcoder

1
最初のコードスニペットは41バイトを必要としませんか?
ジョナサンフレッチ

@ Mr.Xcoder謝罪、私自身の答えを投稿するオプションとして提案されたエディターフォーム。回答を削除する必要がありますか?
ビタリーカウロフ

@VitaliyKaurov他のユーザーはおそらくこれをひどく受け取るでしょう。
ミスターXcoder


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.