Wyzwanie
Napisz kod, który wyprowadza kod równania matematycznego TeX (LaTeX) (podany poniżej), który będzie składał fraktal trójkąta Sierpińskiego o 5 poziomach. Najkrótszy kod wygrywa .
Detale
TeX (i przyjaciele tacy jak LaTeX itp.) To wyrafinowany system składu. Może renderować dowolne zagnieżdżone złożone wyrażenia dla formuł matematycznych. Przypadkowo ten „zagnieżdżony kompleks” opisuje także fraktale. Poniższe jest renderowane z MathJaX
za pomocą następującego prostego tekstu równania matematycznego składającego się z zagnieżdżonych superskryptów i podskryptów:
{{{{{x^x_x}^{x^x_x}_{x^x_x}}^{{x^x_x}^{x^x_x}_{x^x_x}}_{{x^x_x}^{x^x_x}_{x^x_x}}}^{{{x^x_x}^{x^x_x}_{x^x_x}}^{{x^x_x}^{x^x_x}_{x^x_x}}_{{x^x_x}^{x^x_x}_{x^x_x}}}_{{{x^x_x}^{x^x_x}_{x^x_x}}^{{x^x_x}^{x^x_x}_{x^x_x}}_{{x^x_x}^{x^x_x}_{x^x_x}}}}^{{{{x^x_x}^{x^x_x}_{x^x_x}}^{{x^x_x}^{x^x_x}_{x^x_x}}_{{x^x_x}^{x^x_x}_{x^x_x}}}^{{{x^x_x}^{x^x_x}_{x^x_x}}^{{x^x_x}^{x^x_x}_{x^x_x}}_{{x^x_x}^{x^x_x}_{x^x_x}}}_{{{x^x_x}^{x^x_x}_{x^x_x}}^{{x^x_x}^{x^x_x}_{x^x_x}}_{{x^x_x}^{x^x_x}_{x^x_x}}}}_{{{{x^x_x}^{x^x_x}_{x^x_x}}^{{x^x_x}^{x^x_x}_{x^x_x}}_{{x^x_x}^{x^x_x}_{x^x_x}}}^{{{x^x_x}^{x^x_x}_{x^x_x}}^{{x^x_x}^{x^x_x}_{x^x_x}}_{{x^x_x}^{x^x_x}_{x^x_x}}}_{{{x^x_x}^{x^x_x}_{x^x_x}}^{{x^x_x}^{x^x_x}_{x^x_x}}_{{x^x_x}^{x^x_x}_{x^x_x}}}}}
Pamiętaj, że jest to tylko 5-poziomowe zagnieżdżenie. Nie musisz generować $...$
ani $$...$$
używać innych znaczników wymaganych do rozpoczęcia / zakończenia równania matematycznego w TeX & Co. Możesz wyświetlić podgląd wygenerowanego TeX w wielu edytorach internetowych, na przykład: http://www.hostmath.com, ale możesz znaleźć wiele inni też. To pytanie zostało zainspirowane dyskusją z przyjaciółmi .
Aktualizacja
Jest podobne pytanie, ale jest ono bardziej ogólne i przyniesie różne rozwiązania. Chciałem zobaczyć naprawdę złożoność kolmogorowa dla bardzo naprawionego prostego kodu, który w jednym systemie (TeX) jest całkowicie jawny, podczas gdy w innym jest skompresowany. Dotyczy to również n
komentarza zamiast 5 poziomów.
źródło
Odpowiedzi:
SOGL V0.12 ,
1612 bajtówWypróbuj tutaj!
Port of Erik The Outgolfer's Python 2 answer
źródło
Python 2 , 32 bajty
Wypróbuj online!
źródło
zwykły TeX, 29 bajtów
To daje to, co inni mają. Ale jeśli potrzebujemy kompilacji kodu, będzie to 6 bajtów więcej
Wyjaśnienie
~
jest aktywną postacią w TeX, więc możemy nadać jej (nową) definicję.\def~#1x{{#1x_#1x^#1x}}
definiuje się~
jako makro, więc gdy TeX zobaczy~
, wykonuje następujące czynności:x
i nazwij to#1
(dopasowywanie wzorca).{#1x_#1x^#1x}
Na przykład
~ABCx
zostałby zastąpiony przez{ABCx_ABCx^ABCx}
.Kiedy
~~~~~x
jest używany,#1
jest~~~~
, więc całość zostaje zastąpiona{~~~~x_~~~~x^~~~~x}
. I tak dalej.Kiedy mamy już długi ciąg, możemy wydrukować go do terminala z
\message
(i kończy się\bye
tak, aby TeX się zatrzymał), więc\message{~~~~~x}\bye
. Lub wpisz wynikowe wyrażenie (jako wzór matematyczny), otaczając je w$
s: so$~~~~~x$\bye
.źródło
n
(zamiast5
) bardziej efektywne może być utworzenie makra, które wyświetla listęn
tyldy,~
zamiast pisania~~~~~
. Ponadto wyglądałoby to lepiej, jeśli całe wyrażenie jest składane pod\scriptscriptstyle
.05AB1E , 17 bajtów
Wypróbuj online!
Wyjaśnienie
Inne programy o tej samej liczbie bajtów obejmują
źródło
"{x^x_x}"
można zmniejszyć ._.PowerShell ,
4435 bajtówWypróbuj online!
Wielokrotnie używa mnożenia ciągów
-replace
x
w przypadku podskryptów i superskryptów, a następnie wyprowadza dane wyjściowe.Zaoszczędź 9 bajtów dzięki Joeyowi.
źródło
"'x'"+"-replace'x','{x^x_x}'"*5|iex
jest trochę łatwiejsze, nie?MATL ,
2120 bajtów-1 bajt dzięki Giuseppe
Wypróbuj online!
źródło
'x'XJ5:"J'{x^x_x}'Zt
lub nawet5pc5:"5pc'{x^x_x}'Zt
JavaScript (ES6),
454237 bajtówEdycja: Zapisano
32 bajty dzięki @Arnauld. Określenie 5 nadal kosztuje mnie 2 bajty; ta414035-bajtowa wersja przyjmuje zamiast tego parametr:źródło
05AB1E , 13 bajtów
Wypróbuj online!
Port mojej odpowiedzi na Python 2.
źródło
Galaretka , 12 bajtów
Wypróbuj online!
Port mojej odpowiedzi na Python 2.
źródło
Japt ,
212018 bajtówSprawdź to
Wyjaśnienie
Wygeneruj tablicę o długości 5 i odwzoruj na niej.
Podziel ciąg na tablicę znaków
Połącz ponownie (
q
) z ciągiem, używając bieżącej wartościU
lub (ª
)"x"
.Przypisz wynik tego do
U
.Uzyskaj ostatni element w tablicy.
Alternatywy, 18 bajtów
To samo co powyżej, ale redukuje tablicę po jej utworzeniu.
Sprawdź to
Opcja rekurencyjna.
Sprawdź to
źródło
Java (OpenJDK 8) ,
179167 bajtów@Neil port
Wypróbuj online!
źródło
t
jako prawdziwego funkio zamiast lambdat.apply(1)
powinno byćt.apply(new Integer(a[0]))
zamiast. Ale dlaczego nie opublikować metody?String t(int n){return n>0?t(n-1).replace("x","{x^x_x}"):"x";}
A jeśli wymaganiem byłby pełny program (który nie jest), zastosowanie metody rekurencyjnej Java 7 byłoby krótsze niż 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";}}
Wolfram Language ( Mathematica ) - 40 znaków
Podsumowując 3 najlepsze odpowiedzi tutaj :
40 bajtów:
41 bajtów:
44 bajty:
źródło
C (gcc) , 82 bajty
Wypróbuj online!
źródło
Pyth,
171613 bajtówWypróbuj online!
Tłumaczenie Python 3:źródło