生成TeX以排版Sierpinski三角分形


30

挑战

编写输出TeX(LaTeX)数学方程式代码(如下所示)的代码,该代码将对5级的Sierpinski Triangle Fractal进行排版。最短的代码胜出

细节

TeX(和LaTeX等朋友)是一个复杂的排版系统。它可以为数学公式呈现任意嵌套的复杂表达式。巧合的是,这种“嵌套复合体”也描述了分形。以下是使用MathJaX呈现的

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

通过以下由嵌套的上标和下标组成的纯文本数学方程式代码:

{{{{{x^x_x}^{x^x_x}_{x^x_x}}^{{x^x_x}^{x^x_x}_{x^x_x}}_{{x^x_x}^{x^x_x}_{x^x_x}}}^{{{x^x_x}^{x^x_x}_{x^x_x}}^{{x^x_x}^{x^x_x}_{x^x_x}}_{{x^x_x}^{x^x_x}_{x^x_x}}}_{{{x^x_x}^{x^x_x}_{x^x_x}}^{{x^x_x}^{x^x_x}_{x^x_x}}_{{x^x_x}^{x^x_x}_{x^x_x}}}}^{{{{x^x_x}^{x^x_x}_{x^x_x}}^{{x^x_x}^{x^x_x}_{x^x_x}}_{{x^x_x}^{x^x_x}_{x^x_x}}}^{{{x^x_x}^{x^x_x}_{x^x_x}}^{{x^x_x}^{x^x_x}_{x^x_x}}_{{x^x_x}^{x^x_x}_{x^x_x}}}_{{{x^x_x}^{x^x_x}_{x^x_x}}^{{x^x_x}^{x^x_x}_{x^x_x}}_{{x^x_x}^{x^x_x}_{x^x_x}}}}_{{{{x^x_x}^{x^x_x}_{x^x_x}}^{{x^x_x}^{x^x_x}_{x^x_x}}_{{x^x_x}^{x^x_x}_{x^x_x}}}^{{{x^x_x}^{x^x_x}_{x^x_x}}^{{x^x_x}^{x^x_x}_{x^x_x}}_{{x^x_x}^{x^x_x}_{x^x_x}}}_{{{x^x_x}^{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&Co中,您不需要生成$...$或不需要$$...$$其他标记来开始/结束数学方程式。您可以在许多在线编辑器中预览生成的TeX,例如:http : //www.hostmath.com,但您可以找到许多其他人也一样。这个问题的灵感来自与朋友讨论

更新资料

有一个类似的问题,但是它更笼统,将产生不同的解决方案。我想看到非常固定的简单代码的真正kolmogorov复杂性,它在一个系统(TeX)中是完全显式的,而在另一个系统中则是完全显式的。这也解决了n而不是5级注释。


2
你好; 我封闭了您的问题,因为我相信答案可以与其他问题相提并论,无法回答。但是,我喜欢这个主意,而且我觉得它很酷!:)
HyperNeutrino

2
对于它的价值,我重新提出了这个问题,因为我认为该代码无法轻易地进行修改以从一个代码转换到另一个代码。
AdmBorkBork

4
这是太快是接受的解决方案!
毛茸茸的


2
当我看到这个挑战时,这个答案浮现在我的脑海…… codegolf.stackexchange.com/a/6830/67961 和……那是你的
J42161217

Answers:




14

纯TeX,29个字节

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

那输出其他人输出的。但是,如果我们需要代码可编译的话,那将增加6个字节

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

说明

~是TeX中的活动字符,因此我们可以给它一个(新的)定义。

\def~#1x{{#1x_#1x^#1x}}定义~为宏,以便当TeX看到时~,它将执行以下操作:

  • 阅读所有内容,直到next x,然后调用它#1(模式匹配)。
  • 将整个内容替换为 {#1x_#1x^#1x}

例如,~ABCx将被替换为{ABCx_ABCx^ABCx}

~~~~~x被使用,#1~~~~的,所以整个事情被替换为{~~~~x_~~~~x^~~~~x}。等等。

一旦有了长字符串,我们就可以将其打印到终端\message(并以\byeTeX终止),所以\message{~~~~~x}\bye。或通过将结果表达式括在$s中来排版(作为数学公式):so $~~~~~x$\bye


对不起,如果有什么问题,请先在这里回答。
曼努埃尔

对于大的n(而不是5),创建一个输出n波浪号列表~而不是写入的宏可能会更有效~~~~~。另外,如果整个表达式都在下排版,则看起来会更好\scriptscriptstyle
曼努埃尔

不错的窍门...您能添加一个解释,还是介意我添加一个?这说明了TeX宏中模式匹配的一个不错的功能,这不是许多语言所共有的功能(据我所知)。
ShreevatsaR

我将添加它,但是随时可以编辑。
曼努埃尔

糟糕,看不到您的评论……添加了非常类似的解释;随时拒绝。+1是个不错的答案!
ShreevatsaR

4

05AB1E,17个字节

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

在线尝试!

说明

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

具有相同字节数的其他程序包括

"{x^x_x}"©4F'x¡®ý
'x5F'x"{x^x_x}".:

我觉得"{x^x_x}"可以减少._。
魔术章鱼缸

4

PowerShell 44  35字节

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

在线尝试!

使用字符串乘法重复-replace x使用子脚本和上脚本,然后输出。

由于Joey,节省了9个字节。


"'x'"+"-replace'x','{x^x_x}'"*5|iex容易一点,不是吗?
乔伊(Joey)

@Joey哦,这是一个聪明的方法。谢谢!
AdmBorkBork


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作为一个真正的函数的,而不是一个拉姆达
罗马格拉夫

如果使用整个程序,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递归方法将比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语言(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先生17年

1
您的第一个代码段不需要41个字节吗?
乔纳森·弗雷希

@ Mr.Xcoder表示歉意,建议使用编辑器形式来发布我自己的答案。我应该删除答案吗?
Vitaliy Kaurov

@VitaliyKaurov我认为您应该这样做,其他用户可能会收到不好的消息。
Xcoder先生17年


0

Pyth,17 16 13字节

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

在线尝试!

Python 3翻译:
from functools import*;print(reduce(lambda x,y:x.join(y),["x"]+5*["{^_}"]))
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.