Sierpinski Triangle Fractal을 조판하기 위해 TeX 생성


30

도전

Sierpinski Triangle Fractal을 5 레벨로 조판하는 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 & Co에서 수학 방정식을 시작 / 종료하는 데 필요한 마크 업 을 생성 $...$하거나 생성 할 필요가 없습니다 $$...$$. http://www.hostmath.com 과 같은 많은 온라인 편집기에서 생성 된 TeX를 미리 볼 수 있지만 많은 것을 찾을 수 있습니다 다른 사람들도. 이 질문은 친구들과토론 에서 영감을 얻었습니다 .

최신 정보

거기입니다 비슷한 질문이 있지만 훨씬 더 일반적인 다른 솔루션을 생성합니다. 하나의 시스템 (TeX)이 다른 압축 된 동안 완전히 명시 적 인 고정 된 간단한 코드에 대한 kolmogorov-complexity를 실제로보고 싶었습니다. 이것은 또한 n5 단계 의견 대신에 설명합니다.


2
안녕하세요; 이 질문에 대한 답변을 다른 질문에서 너무 사소하게 수정할 수 있다고 생각하기 때문에 귀하의 질문을 중복으로 마감했습니다. 그러나 나는 그 아이디어를 좋아하고 그것이 꽤 멋져 보인다고 생각합니다! :)
HyperNeutrino

2
가치있는 것을 위해, 나는이 질문을 다시 열었습니다. 코드가 한 언어에서 다른 언어로 번역하기 위해 사소하게 수정 가능한 것으로 보지 않기 때문입니다.
AdmBorkBork

4
그건 지금까지 해결책을 받아들이는 것으로 너무 빠른!
얽히고 설킨


2
나는이 문제를 볼 때,이 대답은 내 마음을 ...에 온 codegolf.stackexchange.com/a/6830/67961 가 당신했다 ... 그리고
J42161217

답변:




14

일반 TeX, 29 바이트

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

그것은 다른 사람들이 출력 한 것을 출력합니다. 그러나 코드를 컴파일 할 수 있어야한다면 6 바이트 더 늘어납니다.

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

설명

~입니다 활성 문자 우리가 그것을 (신규) 정의를 제공 할 수 있도록 텍있다.

\def~#1x{{#1x_#1x^#1x}}~TeX가 볼 때 ~다음을 수행 하도록 매크로로 정의합니다 .

  • 다음까지 모든 것을 읽고 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

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

자바 스크립트 (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

Japt , 21 20 18 바이트

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

그것을 테스트


설명

5Æ             Ã

길이가 5 인 배열을 생성하고 그 위에 매핑합니다.

"\{^_}"¬

문자열을 문자 배열로 분할

qUª'x

q현재 값 U또는 ( ª)를 사용하여 ( )를 문자열에 다시 결합하십시오 "x".

=

그 결과를에 할당하십시오 U.

Ì

배열의 마지막 요소를 가져옵니다.


대안, 18 바이트

위와 동일하지만 배열을 만든 후 줄입니다.

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

그것을 테스트

재귀 옵션.

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

그것을 테스트


1

자바 (OpenJDK 8) , 179 바이트

@ 닐 포트

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 로 쓰는 것이 더 짧다고 생각합니다
Roman Gräf

전체 프로그램을 사용하는 경우 대신 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";}}
Kevin Cruijssen

0

Wolfram Language ( 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
다른 사람을 며칠 먼저 떠나지 않고 자신의 도전에 대답하는 것은 권장하지 않습니다.
Mr. Xcoder

1
첫 번째 코드 스 니펫에는 41 바이트가 필요하지 않습니까?
Jonathan Frech

@ Mr.Xcoder 사과, 편집기 양식은 내 자신의 답변을 게시하는 옵션으로 제안했습니다. 답변을 삭제해야합니까?
Vitaliy Kaurov

@VitaliyKaurov 당신이 생각해야합니다, 다른 사용자가 아마 이것을받을 것입니다.
Mr. Xcoder


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.