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.


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


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.


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}".:

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.


"'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

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'



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


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!


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]

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


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.