Tạo TeX để sắp chữ Sierpinki Triangle Fractal


30

Thử thách

Viết mã xuất ra mã phương trình toán học TeX (LaTeX) (được đưa ra dưới đây) sẽ đánh máy Sierpinki Triangle Fractal gồm 5 cấp. Mã ngắn nhất sẽ thắng .

Chi tiết

TeX (và những người bạn như LaTeX, v.v.) là một hệ thống sắp chữ tinh vi. Nó có thể biểu hiện các biểu thức phức tạp lồng nhau tùy ý cho các công thức toán học. Thật trùng hợp, "tổ hợp lồng nhau" này cũng được mô tả về các mảnh nhỏ. Sau đây được kết xuất với MathJaX

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

bởi mã phương trình toán học văn bản thuần sau đây bao gồm các siêu tập lệnh và siêu tập lệnh lồng nhau:

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

Lưu ý đây chỉ là một lồng 5 cấp. Bạn không cần phải tạo $...$hoặc $$...$$hoặc đánh dấu khác cần thiết để bắt đầu / kết thúc một phương trình toán học trong TeX & Co. Bạn có thể xem trước TeX được tạo trong nhiều trình soạn thảo trực tuyến, ví dụ: http://www.hostmath.com nhưng bạn có thể tìm thấy nhiều những người khác cũng vậy. Câu hỏi này được lấy cảm hứng từ một cuộc thảo luận với bạn bè .

Cập nhật

Có một câu hỏi tương tự nhưng nó tổng quát hơn nhiều và sẽ tạo ra các giải pháp khác nhau. Tôi muốn thấy độ phức tạp thực sự của kolmogorov đối với một mã đơn giản rất cố định mà trong một hệ thống (TeX) hoàn toàn rõ ràng trong khi ở một hệ thống nén khác. Điều này cũng giải quyết nthay vì bình luận 5 cấp.


2
Xin chào; Tôi đã đóng câu hỏi của bạn dưới dạng trùng lặp vì tôi tin rằng câu trả lời có thể được sửa đổi quá tầm thường so với câu hỏi khác để trả lời câu hỏi này. Tuy nhiên, tôi thích ý tưởng này và tôi nghĩ nó trông khá tuyệt! :)
HyperNeutrino

2
Đối với những gì nó có giá trị, tôi đã mở lại câu hỏi này vì tôi không thấy mã là có thể sửa đổi tầm thường để dịch từ cái này sang cái khác.
admBorkBork

4
Đó là xa quá nhanh chóng để được chấp nhận một giải pháp!
Xù xì


2
Khi tôi thấy thử thách này, câu trả lời này xuất hiện trong đầu tôi ... codegolf.stackexchange.com/a/6830/67961 và ... nó là của bạn
J42161217

Câu trả lời:




14

TeX đơn giản, 29 byte

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

Đó là đầu ra những gì người khác có đầu ra. Nhưng nếu chúng ta cần mã để có thể biên dịch được thì nó sẽ có thêm 6 byte

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

Giải trình

~là một nhân vật hoạt động trong TeX, vì vậy chúng tôi có thể cung cấp cho nó một định nghĩa (mới).

\def~#1x{{#1x_#1x^#1x}}định nghĩa ~là một macro, để khi TeX nhìn thấy ~, nó thực hiện như sau:

  • Đọc mọi thứ tiếp theo xvà gọi nó #1(khớp mẫu).
  • Thay thế toàn bộ bằng {#1x_#1x^#1x}

Ví dụ, ~ABCxsẽ được thay thế bằng {ABCx_ABCx^ABCx}.

Khi ~~~~~xđược sử dụng, #1~~~~, vì vậy toàn bộ điều được thay thế bằng {~~~~x_~~~~x^~~~~x}. Và như vậy.

Khi chúng ta có chuỗi dài, chúng ta có thể in nó ra tới terminal bằng \message(và kết thúc bằng một \byeTeX dừng), vì vậy \message{~~~~~x}\bye. Hoặc sắp xếp biểu thức kết quả (như một công thức toán học), bằng cách bao quanh nó trong $s: so $~~~~~x$\bye.


Xin lỗi nếu có gì sai, trước tiên hãy trả lời ở đây.
Manuel

Đối với một cái lớn n(chứ không phải 5), có thể hiệu quả hơn khi tạo một macro tạo ra một danh sách các dấu nngã ~thay vì viết ~~~~~. Thêm vào đó, nó sẽ trông tốt hơn nếu toàn bộ biểu thức được sắp chữ \scriptscriptstyle.
Manuel

Thủ thuật hay, bạn có thể thêm một lời giải thích hay không nếu tôi thêm một lời giải thích? Điều này minh họa một tính năng hay của khớp mẫu trong các macro TeX, đây không phải là một tính năng phổ biến đối với nhiều ngôn ngữ (mà tôi biết).
ShreevatsaR

Tôi sẽ thêm nó, nhưng cảm thấy tự do để chỉnh sửa.
Manuel

Rất tiếc, không thấy bình luận của bạn đã thêm một lời giải thích tương tự; hãy từ chối. +1 cho câu trả lời hay!
ShreevatsaR


4

PowerShell ,  44  35 byte

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

Hãy thử trực tuyến!

Sử dụng phép nhân chuỗi để lặp lại -replace xes với các tập lệnh con và siêu tập lệnh, sau đó xuất ra.

Lưu được 9 byte nhờ Joey.


"'x'"+"-replace'x','{x^x_x}'"*5|iexcó dễ hơn một chút không?
Joey

@Joey Oh, đó là một cách làm thông minh. Cảm ơn!
admBorkBork


2

JavaScript (ES6), 45 42 37 byte

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

Chỉnh sửa: Đã lưu 3 2 byte nhờ @Arnauld. Chỉ định 5 vẫn tốn 2 byte; này 41 40 phiên bản 35-byte mất một tham số thay vì:

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



2

Japt , 21 20 18 byte

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

Kiểm tra nó


Giải trình

5Æ             Ã

Tạo một mảng có độ dài 5 và ánh xạ qua nó.

"\{^_}"¬

Tách một chuỗi thành một mảng các ký tự

qUª'x

Tham gia lại ( q) vào một chuỗi bằng giá trị hiện tại của Uhoặc ( ª) "x".

=

Chỉ định kết quả của điều đó cho U.

Ì

Lấy phần tử cuối cùng trong mảng.


Các lựa chọn thay thế, 18 byte

Tương tự như trên nhưng giảm mảng sau khi nó được tạo.

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

Kiểm tra nó

Tùy chọn đệ quy.

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

Kiểm tra nó


1

Java (OpenJDK 8) , 179 167 byte

Cổng @

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

Hãy thử trực tuyến!


Tôi nghĩ bạn sẽ ngắn hơn khi viết tnhư một funcio thực sự thay vì lambda
Roman Gräf

Nếu bạn sử dụng toàn bộ chương trình, t.apply(1)nên t.apply(new Integer(a[0]))thay thế. Nhưng tại sao không chỉ đăng một phương pháp? String t(int n){return n>0?t(n-1).replace("x","{x^x_x}"):"x";}Và nếu yêu cầu của thử thách sẽ là một chương trình đầy đủ (không phải), sử dụng phương pháp đệ quy Java 7 sẽ ngắn hơn 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

Ngôn ngữ Wolfram ( Mathicala ) - 40 ký tự

Tóm tắt 3 câu trả lời hay nhất tại đây :

40 byte:

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

41 byte:

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

44 byte:

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

3
Không nên trả lời thử thách của riêng bạn, mà không để lại cho người khác một vài ngày đầu tiên.
Ông Xcoder

1
Đoạn mã đầu tiên của bạn không yêu cầu 41 byte?
Jonathan Frech

@ Mr.Xcoder xin lỗi, mẫu biên tập được đề xuất như một tùy chọn để đăng câu trả lời của riêng tôi. Tôi có nên xóa câu trả lời của mình?
Vitaliy Kaurov

@VitaliyKaurov Tôi nghĩ bạn nên, những người dùng khác có thể sẽ nhận được điều này rất tệ.
Ông Xcoder


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.