Generieren Sie TeX, um Sierpinski Triangle Fractal zu setzen

30

Herausforderung

Schreiben Sie Code, der TeX (LaTeX) -Mathematik-Gleichungscode (siehe unten) ausgibt, der Sierpinski Triangle Fractal mit 5 Ebenen setzt. Kürzester Code gewinnt .

Einzelheiten

TeX (und Freunde wie LaTeX usw.) ist ein ausgeklügeltes Schriftsatzsystem. Es kann beliebige verschachtelte komplexe Ausdrücke für mathematische Formeln rendern. Zufälligerweise beschreibt dieser "verschachtelte Komplex" auch Fraktale. Folgendes wird mit MathJaX gerendert

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

durch den folgenden Klartext-Mathe-Gleichungscode, der aus verschachtelten Über- und Unterskripten besteht:

{{{{{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}}}}}

Beachten Sie, dass dies nur eine 5-stufige Verschachtelung ist. Sie müssen nicht generieren müssen $...$oder $$...$$können eine mathematische Gleichung in TeX & Co. Sie erzeugt TeX zum Beispiel in vielen Online - Redakteure, eine Vorschau oder andere Markup erforderlich , um Start / Ende: http://www.hostmath.com aber man kann viele finden auch andere. Diese Frage wurde durch eine Diskussion mit Freunden inspiriert .

Aktualisieren

Es gibt eine ähnliche Frage, die jedoch viel allgemeiner ist und unterschiedliche Lösungen hervorbringt. Ich wollte wirklich Kolmogorov-Komplexität für einen sehr festen einfachen Code sehen, der in einem System (TeX) vollständig explizit ist, während in einem anderen komprimiert. Dies betrifft auch den nKommentar mit statt 5 Ebenen.

Vitaliy Kaurov
quelle
2
Hallo; Ich habe Ihre Frage als Duplikat geschlossen, da ich glaube, dass die Antworten gegenüber der anderen Frage zu geringfügig geändert werden können, um diese Frage zu beantworten. Die Idee gefällt mir aber und ich finde sie sieht ziemlich cool aus! :)
HyperNeutrino
2
Für das, was es wert ist, habe ich diese Frage erneut geöffnet, da ich nicht sehe, dass der Code trivial modifizierbar ist, um von einem zum anderen zu übersetzen.
AdmBorkBork
4
Das ist viel zu schnell, um eine Lösung zu akzeptieren!
Shaggy
3
Relevante Meta: codegolf.meta.stackexchange.com/q/5056/32352
Sanchises
2
Als ich diese Herausforderung sah, kam mir diese Antwort in den Sinn ... codegolf.stackexchange.com/a/6830/67961 und ... es war deins
J42161217

Antworten:

14

normaler TeX, 29 Bytes

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

Das gibt aus, was andere ausgegeben haben. Aber wenn wir den Code brauchen, um kompilierbar zu sein, wären es 6 Bytes mehr

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

Erläuterung

~ist ein aktiver Charakter in TeX, daher können wir ihm eine (neue) Definition geben.

\def~#1x{{#1x_#1x^#1x}}Wird ~als Makro definiert , sodass TeX beim Anzeigen ~Folgendes ausführt:

  • Lesen Sie alles bis zum nächsten xund nennen Sie das #1(Mustervergleich).
  • Ersetzen Sie das Ganze durch {#1x_#1x^#1x}

~ABCxWürde zum Beispiel durch ersetzt werden {ABCx_ABCx^ABCx}.

Wenn ~~~~~xverwendet wird, #1wird ~~~~das Ganze durch ersetzt {~~~~x_~~~~x^~~~~x}. Und so weiter.

Sobald wir den langen String haben, können wir ihn zum Terminal mit ausdrucken \message(und mit \byeso TeX aufhören), also \message{~~~~~x}\bye. Oder setzen Sie den resultierenden Ausdruck (als mathematische Formel), indem Sie ihn in $s: so umgeben $~~~~~x$\bye.

Manuel
quelle
Tut mir leid, wenn etwas nicht stimmt, antworte zuerst hier.
Manuel
Für ein großes n(anstatt 5) könnte es effizienter sein, ein Makro zu erstellen, das eine Liste von nTilden ausgibt, ~anstatt zu schreiben ~~~~~. Außerdem würde es besser aussehen, wenn der gesamte Ausdruck unter gesetzt ist \scriptscriptstyle.
Manuel
Netter Trick… kannst du eine Erklärung hinzufügen oder etwas dagegen, wenn ich eine hinzufüge? Dies zeigt eine nette Funktion der Mustererkennung in TeX-Makros, die nicht in allen (mir bekannten) Sprachen verwendet wird.
ShreevatsaR
Ich werde es hinzufügen, aber Sie können es gerne bearbeiten.
Manuel
Hoppla, habe Ihren Kommentar nicht gesehen ... hat eine sehr ähnliche Erklärung hinzugefügt. zögern sie nicht abzulehnen. +1 für die nette Antwort!
ShreevatsaR
4

05AB1E , 17 Bytes

'x5F'x¡"{x^x_x}"ý

Probieren Sie es online!

Erläuterung

'x                  # push "x"
  5F                # 5 times do
    'x¡             # split on "x"
       "{x^x_x}"ý   # join on "{x^x_x}"

Andere Programme mit derselben Byteanzahl umfassen

"{x^x_x}"©4F'x¡®ý
'x5F'x"{x^x_x}".:
Emigna
quelle
Ich fühle mich wie "{x^x_x}"kann reduziert werden.
Magic Octopus Urn
4

PowerShell ,  44-35  Byte

"'x'"+"-replace'x','{x^x_x}'"*5|iex

Probieren Sie es online!

Verwendet die String-Multiplikation, um sie -replace xmit den Unter- und Über-Skripten zu wiederholen und dann auszugeben.

9 Bytes gespart dank Joey.

AdmBorkBork
quelle
"'x'"+"-replace'x','{x^x_x}'"*5|iexist ein bisschen einfacher, nein?
Joey
@Joey Oh, das ist eine clevere Art und Weise. Vielen Dank!
AdmBorkBork
2

MATL ,21 20 Bytes

'x'XJ5:"J'{x^x_x}'Zt

-1 Byte danke an Giuseppe

Probieren Sie es online!

Cinaski
quelle
1
20 Bytes mit 'x'XJ5:"J'{x^x_x}'Ztoder sogar5pc5:"5pc'{x^x_x}'Zt
Giuseppe
@ Giuseppe Danke!
Cinaski
2

JavaScript (ES6), 45 42 37 Byte

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

Bearbeiten: 3 2 Bytes dank @Arnauld gespeichert. Die Angabe von 5 kostet mich immer noch 2 Byte. diese 41 40 35-Bit - Version benötigt einen Parameter statt:

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

Japt , 21 20 18 Bytes

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

Probier es aus


Erläuterung

5Æ             Ã

Generieren Sie ein Array der Länge 5 und ordnen Sie es zu.

"\{^_}"¬

Teilen Sie eine Zeichenfolge in ein Array von Zeichen

qUª'x

Verbinden Sie ( q) mit dem aktuellen Wert von Uoder ( ª) wieder mit einer Zeichenfolge "x".

=

Weisen Sie das Ergebnis davon zu U.

Ì

Holen Sie sich das letzte Element im Array.


Alternativen, 18 Bytes

Wie oben, aber das Array nach der Erstellung verkleinern.

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

Probier es aus

Die rekursive Option.

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

Probier es aus

Zottelig
quelle
1

Java (OpenJDK 8) , 179 167 Bytes

@ Neil Port

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";}

Probieren Sie es online!

Roberto Graham
quelle
Ich denke, es ist kürzer, tals echte Funktion statt als Lambda zu schreiben
Roman Gräf
Wenn Sie ein gesamtes Programm verwenden, t.apply(1)sollte dies t.apply(new Integer(a[0]))stattdessen sein. Aber warum nicht einfach eine Methode posten? String t(int n){return n>0?t(n-1).replace("x","{x^x_x}"):"x";}Und wenn die Anforderung für die Herausforderung ein vollständiges Programm wäre (was nicht der Fall ist), wäre die Verwendung einer rekursiven Java 7-Methode kürzer als ein Lambda: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";}}
Kevin Cruijssen,
0

Wolfram Language ( Mathematica ) - 40 Zeichen

Zusammenfassend 3 besten Antworten hier :

40 Bytes:

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

41 Bytes:

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

44 Bytes:

Last@SubstitutionSystem["x"->"{x^x_x}","x",5]
Vitaliy Kaurov
quelle
3
Es wird nicht empfohlen, Ihre eigene Herausforderung zu beantworten, ohne anderen erst ein paar Tage Zeit zu lassen.
Mr. Xcoder
1
Benötigt Ihr erstes Code-Snippet keine 41 Bytes?
Jonathan Frech
@ Mr.Xcoder entschuldigt sich, das Editor-Formular hat als Option vorgeschlagen, meine eigene Antwort zu posten. Soll ich meine Antwort löschen?
Vitaliy Kaurov
@VitaliyKaurov Ich denke, du solltest, andere Benutzer werden dies wahrscheinlich schlecht erhalten.
Mr. Xcoder
0

Pyth, 17 16 13 Bytes

jF+\x*5]"{^_}

Probieren Sie es online!

Python 3 Übersetzung:
from functools import*;print(reduce(lambda x,y:x.join(y),["x"]+5*["{^_}"]))
hakr14
quelle