Вызов
Напишите код, который выводит код математического уравнения TeX (LaTeX) (приведенный ниже), который будет набирать фрактал Серпинского из 5 уровней. Самый короткий код выигрывает .
Детали
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. Вы можете просмотреть сгенерированный TeX во многих онлайн-редакторах, например: http://www.hostmath.com, но вы можете найти много другие тоже. Этот вопрос был вдохновлен обсуждением с друзьями .
Обновить
Есть похожий вопрос, но он гораздо более общий и даст разные решения. Я хотел увидеть действительно колмогоровскую сложность для очень фиксированного простого кода, который в одной системе (TeX) полностью явный, а в другой сжатый. Это также относится n
к комментариям вместо 5 уровней.
источник
Ответы:
SOGL V0.12 ,
1612 байтПопробуй здесь!
Порт Эрика The Outgolfer's Python 2 ответ
источник
Python 2 , 32 байта
Попробуйте онлайн!
источник
обычный TeX, 29 байт
Это выводит то, что есть у других. Но если нам нужен код для компиляции, он будет на 6 байт больше
объяснение
~
является активным символом в TeX, поэтому мы можем дать ему (новое) определение.\def~#1x{{#1x_#1x^#1x}}
определяется~
как макрос, так что когда TeX видит~
, он делает следующее:x
и назовите это#1
(сопоставление с образцом).{#1x_#1x^#1x}
Например,
~ABCx
будет заменен на{ABCx_ABCx^ABCx}
.Когда
~~~~~x
используется,#1
есть~~~~
, так что все это заменяется{~~~~x_~~~~x^~~~~x}
. И так далее.Как только мы получим длинную строку, мы можем распечатать ее на терминал с помощью
\message
(и заканчивая\bye
так, чтобы TeX останавливался), так что\message{~~~~~x}\bye
. Или наберите полученное выражение (как математическую формулу), заключив его в$
s: so$~~~~~x$\bye
.источник
n
(а не5
) может быть более эффективным создать макрос, который выводит списокn
тильд,~
а не запись~~~~~
. Кроме того, он будет выглядеть лучше , если все выражение типографских под\scriptscriptstyle
.05AB1E , 17 байт
Попробуйте онлайн!
объяснение
Другие программы с таким же количеством байтов включают
источник
"{x^x_x}"
может быть уменьшен.PowerShell ,
4435 байтПопробуйте онлайн!
Использует умножение строк для многократного
-replace
x
преобразования с использованием вспомогательных и суперскриптов, а затем вывод.Сохранено 9 байтов благодаря Joey.
источник
"'x'"+"-replace'x','{x^x_x}'"*5|iex
немного проще, нет?MATL ,
2120 байт-1 байт благодаря Джузеппе
Попробуйте онлайн!
источник
'x'XJ5:"J'{x^x_x}'Zt
или даже5pc5:"5pc'{x^x_x}'Zt
JavaScript (ES6),
454237 байтРедактировать: Сохранено
32 байта благодаря @Arnauld. Указание 5 все еще стоит мне 2 байта; эта414035-байтовая версия принимает параметр вместо:источник
05AB1E , 13 байтов
Попробуйте онлайн!
Порт моего Python 2 ответа.
источник
Желе , 12 байт
Попробуйте онлайн!
Порт моего Python 2 ответа.
источник
Japt ,
212018 байтПопробуй это
объяснение
Создайте массив длиной 5 и отобразите его.
Разделить строку на массив символов
Вернитесь (
q
) к строке, используя текущее значениеU
или (ª
)"x"
.Назначьте результат этого
U
.Получить последний элемент в массиве.
Альтернативы, 18 байт
То же, что и выше, но уменьшение массива после его создания.
Попробуй это
Рекурсивный вариант.
Попробуй это
источник
Java (OpenJDK 8) ,
179167 байт@ Нейл порт
Попробуйте онлайн!
источник
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 будет короче лямбды: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 знаков
Обобщая 3 лучших ответа здесь :
40 байтов:
41 байт:
44 байта:
источник
C (gcc) , 82 байта
Попробуйте онлайн!
источник
Pyth,
171613 байтовПопробуйте онлайн!
Перевод Python 3:источник