Hasilkan TeX untuk mengeset Sierpinski Triangle Fractal


30

Tantangan

Tulis kode yang menghasilkan kode persamaan matematika TeX (LaTeX) (diberikan di bawah) yang akan mengeset Fraktal Sierpinski Triangle Fractal dari 5 level. Kode terpendek menang .

Detail

TeX (dan teman-teman seperti LaTeX, dll.) Adalah sistem pengaturan huruf yang canggih. Itu bisa membuat ekspresi kompleks bersarang sembarang untuk rumus matematika. Secara kebetulan "kompleks bersarang" ini juga deskriptif fraktal. Berikut ini diberikan dengan MathJaX

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

oleh kode persamaan matematika teks biasa berikut yang terdiri dari sub-skrip bersarang dan super:

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

Perhatikan ini hanya bersarang 5 tingkat. Anda tidak perlu membuat $...$atau $$...$$atau markup lain yang diperlukan untuk memulai / mengakhiri persamaan matematika di TeX & Co. Anda dapat mempratinjau TeX yang dihasilkan di banyak editor online, misalnya: http://www.hostmath.com tetapi Anda dapat menemukan banyak orang lain juga. Pertanyaan ini terinspirasi oleh diskusi dengan teman-teman .

Memperbarui

Ada pertanyaan serupa tetapi jauh lebih umum dan akan menghasilkan solusi yang berbeda. Saya ingin melihat benar-benar kolmogorov-kompleksitas untuk kode sederhana yang sangat tetap yang dalam satu sistem (TeX) sepenuhnya eksplisit sementara yang lain dikompresi. Ini juga membahas nkomentar bukannya 5 level.


2
Halo; Saya menutup pertanyaan Anda sebagai duplikat karena saya percaya bahwa jawaban dapat terlalu sepele dimodifikasi dari pertanyaan lain untuk menjawab pertanyaan ini. Namun, saya suka ide itu dan saya pikir itu terlihat sangat keren! :)
HyperNeutrino

2
Untuk apa nilainya, saya membuka kembali pertanyaan ini karena saya tidak melihat kode yang sepele dimodifikasi untuk menerjemahkan dari satu ke yang lain.
AdmBorkBork

4
Itu jauh terlalu cepat untuk menjadi menerima solusi!
Shaggy


2
Ketika saya melihat tantangan ini, jawaban ini muncul di benak saya ... codegolf.stackexchange.com/a/6830/67961 dan ... itu milik Anda
J42161217

Jawaban:




14

TeX polos, 29 byte

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

Itu menghasilkan apa yang orang lain miliki. Tetapi jika kita membutuhkan kode yang dapat dikompilasikan akan menjadi 6 byte lebih

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

Penjelasan

~adalah karakter aktif dalam TeX, sehingga kami dapat memberikannya definisi (baru).

\def~#1x{{#1x_#1x^#1x}}didefinisikan ~sebagai makro, sehingga ketika TeX melihat ~, ia melakukan hal berikut:

  • Baca semuanya hingga yang berikutnya x, dan panggil itu#1 (pencocokan pola).
  • Ganti semuanya dengan {#1x_#1x^#1x}

Misalnya, ~ABCxakan diganti dengan{ABCx_ABCx^ABCx} .

Kapan ~~~~~xdigunakan, #1adalah ~~~~, jadi semuanya akan diganti{~~~~x_~~~~x^~~~~x} . Dan seterusnya.

Setelah kami memiliki string yang panjang, kami dapat mencetaknya ke terminal dengan \message(dan diakhiri dengan \byeberhenti begitu TeX), jadi \message{~~~~~x}\bye. Atau mengeset ekspresi yang dihasilkan (sebagai rumus matematika), dengan mengelilinginya dalam $s: so $~~~~~x$\bye.


Maaf jika ada yang salah, jawab dulu di sini.
Manuel

Untuk yang besar n(daripada 5) bisa lebih efisien untuk membuat makro yang menampilkan daftar ntilde ~daripada menulis ~~~~~. Plus itu akan terlihat lebih baik jika seluruh ekspresi adalah set di bawah \scriptscriptstyle.
Manuel

Trik yang bagus ... bisakah Anda menambahkan penjelasan, atau keberatan jika saya menambahkannya? Ini menggambarkan fitur pencocokan pola yang bagus di makro TeX, yang bukan fitur umum untuk banyak bahasa (yang saya tahu).
ShreevatsaR

Saya akan menambahkannya, tetapi merasa bebas untuk mengedit.
Manuel

Ups, tidak melihat komentar Anda… menambahkan penjelasan yang sangat mirip; jangan ragu untuk menolak. +1 untuk jawaban yang bagus!
ShreevatsaR

4

05AB1E , 17 byte

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

Cobalah online!

Penjelasan

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

Program lain pada byte-count yang sama termasuk

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

Saya merasa seperti "{x^x_x}"dapat dikurangi ._.
Magic Octopus Guci

4

PowerShell ,  44  35 byte

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

Cobalah online!

Menggunakan perkalian string untuk berulang kali -replace xmenggunakan sub-dan super-skrip, kemudian menghasilkan.

Disimpan 9 byte berkat Joey.


"'x'"+"-replace'x','{x^x_x}'"*5|iexsedikit lebih mudah, bukan?
Joey

@ Joey Oh, itu cara cerdas untuk melakukannya. Terima kasih!
AdmBorkBork


2

JavaScript (ES6), 45 42 37 byte

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

Sunting: Disimpan 3 2 byte berkat @Arnauld. Menentukan 5 masih menghabiskan 2 byte; ini 41 40 versi 35-byte mengambil parameter sebagai gantinya:

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



2

Japt , 21 20 18 bytes

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

Menguji


Penjelasan

5Æ             Ã

Buat array dengan panjang 5 dan petakan di atasnya.

"\{^_}"¬

Pisahkan string ke array karakter

qUª'x

Bergabung kembali dengan ( q) ke string menggunakan nilai saat ini Uatau ( ª) "x".

=

Tetapkan hasil itu untuk U.

Ì

Dapatkan elemen terakhir dalam array.


Alternatif, 18 byte

Sama seperti di atas tetapi mengurangi array setelah dibuat.

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

Menguji

Opsi rekursif.

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

Menguji


1

Java (OpenJDK 8) , 179 167 byte

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

Cobalah online!


Saya pikir Anda lebih pendek untuk menulis tsebagai functio nyata daripada lambda
Roman Gräf

Jika Anda menggunakan seluruh program, t.apply(1)seharusnya t.apply(new Integer(a[0])). Tetapi mengapa tidak memposting metode saja? String t(int n){return n>0?t(n-1).replace("x","{x^x_x}"):"x";}Dan jika persyaratan tantangan akan menjadi program penuh (yang tidak), menggunakan metode rekursif Java 7 akan lebih pendek dari 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

Bahasa Wolfram ( Mathematica ) - 40 karakter

Meringkas 3 jawaban terbaik di sini :

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
Tidak disarankan untuk menjawab tantangan Anda sendiri, tanpa meninggalkan orang lain beberapa hari pertama.
Tn. Xcoder

1
Apakah cuplikan kode pertama Anda tidak memerlukan 41 byte?
Jonathan Frech

@ Mr.Xcoder meminta maaf, formulir editor disarankan sebagai opsi untuk mengirim jawaban saya sendiri. Haruskah saya menghapus jawaban saya?
Vitaliy Kaurov

@ VitaliyKaurov Saya pikir Anda harus, pengguna lain mungkin akan menerima ini dengan buruk.
Tn. Xcoder


0

Pyth, 17 16 13 byte

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

Cobalah online!

Terjemahan Python 3:
from functools import*;print(reduce(lambda x,y:x.join(y),["x"]+5*["{^_}"]))
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.