Reto
Escriba el código que genera el código de ecuación matemática TeX (LaTeX) (que se proporciona a continuación) que compondrá el Fractal Triángulo Sierpinski de 5 niveles. El código más corto gana .
Detalles
TeX (y amigos como LaTeX, etc.) es un sofisticado sistema de composición. Puede representar expresiones complejas anidadas arbitrarias para fórmulas matemáticas. Casualmente, este "complejo anidado" también es descriptivo de fractales. Lo siguiente se representa con MathJaX
mediante el siguiente código de ecuación matemática de texto sin formato que consta de super y scripts secundarios anidados:
{{{{{x^x_x}^{x^x_x}_{x^x_x}}^{{x^x_x}^{x^x_x}_{x^x_x}}_{{x^x_x}^{x^x_x}_{x^x_x}}}^{{{x^x_x}^{x^x_x}_{x^x_x}}^{{x^x_x}^{x^x_x}_{x^x_x}}_{{x^x_x}^{x^x_x}_{x^x_x}}}_{{{x^x_x}^{x^x_x}_{x^x_x}}^{{x^x_x}^{x^x_x}_{x^x_x}}_{{x^x_x}^{x^x_x}_{x^x_x}}}}^{{{{x^x_x}^{x^x_x}_{x^x_x}}^{{x^x_x}^{x^x_x}_{x^x_x}}_{{x^x_x}^{x^x_x}_{x^x_x}}}^{{{x^x_x}^{x^x_x}_{x^x_x}}^{{x^x_x}^{x^x_x}_{x^x_x}}_{{x^x_x}^{x^x_x}_{x^x_x}}}_{{{x^x_x}^{x^x_x}_{x^x_x}}^{{x^x_x}^{x^x_x}_{x^x_x}}_{{x^x_x}^{x^x_x}_{x^x_x}}}}_{{{{x^x_x}^{x^x_x}_{x^x_x}}^{{x^x_x}^{x^x_x}_{x^x_x}}_{{x^x_x}^{x^x_x}_{x^x_x}}}^{{{x^x_x}^{x^x_x}_{x^x_x}}^{{x^x_x}^{x^x_x}_{x^x_x}}_{{x^x_x}^{x^x_x}_{x^x_x}}}_{{{x^x_x}^{x^x_x}_{x^x_x}}^{{x^x_x}^{x^x_x}_{x^x_x}}_{{x^x_x}^{x^x_x}_{x^x_x}}}}}
Tenga en cuenta que esto es solo un anidamiento de 5 niveles. No necesita generar $...$
u $$...$$
otro marcado necesario para comenzar / finalizar una ecuación matemática en TeX & Co. Puede obtener una vista previa de TeX generado en muchos editores en línea, por ejemplo: http://www.hostmath.com pero puede encontrar muchos otros también Esta pregunta fue inspirada por una discusión con amigos .
Actualizar
Hay una pregunta similar, pero es mucho más general y producirá diferentes soluciones. Quería ver realmente la complejidad de kolmogorov para un código simple muy fijo que en un sistema (TeX) es completamente explícito mientras que en otro está comprimido. Esto también aborda el n
comentario en lugar de 5 niveles.
fuente
Respuestas:
SOGL V0.12 ,
1612 bytesPruébalo aquí!
Port of Erik The Outgolfer's Python 2 respuesta
fuente
Python 2 , 32 bytes
Pruébalo en línea!
fuente
TeX simple, 29 bytes
Eso da salida a lo que otros tienen salida. Pero si necesitamos que el código sea compilable, serían 6 bytes más
Explicación
~
es un personaje activo en TeX, por lo que podemos darle una (nueva) definición.\def~#1x{{#1x_#1x^#1x}}
se define~
como una macro, de modo que cuando TeX ve~
, hace lo siguiente:x
, y llame a eso#1
(coincidencia de patrones).{#1x_#1x^#1x}
Por ejemplo,
~ABCx
sería reemplazado por{ABCx_ABCx^ABCx}
.Cuando
~~~~~x
se usa,#1
es~~~~
, entonces todo se reemplaza con{~~~~x_~~~~x^~~~~x}
. Y así.Una vez que tengamos la cadena larga, podemos imprimirla en la terminal con
\message
(y terminar con un\bye
TeX se detiene), entonces\message{~~~~~x}\bye
. O escriba la expresión resultante (como una fórmula matemática) rodeándola con$
s: so$~~~~~x$\bye
.fuente
n
(en lugar de5
) podría ser más eficiente crear una macro que genere una lista den
tildes en~
lugar de escribir~~~~~
. Además, se vería mejor si toda la expresión está compuesta en\scriptscriptstyle
.05AB1E , 17 bytes
Pruébalo en línea!
Explicación
Otros programas en el mismo conteo de bytes incluyen
fuente
"{x^x_x}"
se puede reducir ._.PowerShell ,
4435 bytesPruébalo en línea!
Utiliza la multiplicación de cadenas para repetidamente
-replace
x
es con los sub y scripts, y luego genera la salida.Guardado 9 bytes gracias a Joey.
fuente
"'x'"+"-replace'x','{x^x_x}'"*5|iex
es un poco más fácil, ¿no?MATL ,
2120 bytes-1 byte gracias a Giuseppe
Pruébalo en línea!
fuente
'x'XJ5:"J'{x^x_x}'Zt
o incluso5pc5:"5pc'{x^x_x}'Zt
JavaScript (ES6),
454237 bytesEditar: Guardado
32 bytes gracias a @Arnauld. Especificar 5 todavía me cuesta 2 bytes; esta versión de414035 bytes toma un parámetro en su lugar:fuente
05AB1E , 13 bytes
Pruébalo en línea!
Puerto de mi respuesta Python 2.
fuente
Jalea , 12 bytes
Pruébalo en línea!
Puerto de mi respuesta Python 2.
fuente
Japt ,
212018 bytesPruébalo
Explicación
Genere una matriz de longitud 5 y mapee sobre ella.
Dividir una cadena en una matriz de caracteres
Vuelva a unir (
q
) a una cadena utilizando el valor actual deU
o (ª
)"x"
.Asigne el resultado de eso a
U
.Obtenga el último elemento en la matriz.
Alternativas, 18 bytes
Igual que el anterior pero reduciendo la matriz después de que se haya creado.
Pruébalo
La opción recursiva.
Pruébalo
fuente
Java (OpenJDK 8) ,
179167 bytes@Neil port
Pruébalo en línea!
fuente
t
como una función real en lugar de una lambdat.apply(1)
debería sert.apply(new Integer(a[0]))
en su lugar. Pero, ¿por qué no simplemente publicar un método?String t(int n){return n>0?t(n-1).replace("x","{x^x_x}"):"x";}
Y si el requisito del desafío sería un programa completo (que no lo es), usar un método recursivo de Java 7 sería más corto que una 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 caracteres
Resumiendo 3 mejores respuestas aquí :
40 bytes:
41 bytes:
44 bytes:
fuente
C (gcc) , 82 bytes
Pruébalo en línea!
fuente
Pyth,
171613 bytesPruébalo en línea!
Traducción de Python 3:fuente