Estas fórmulas parecían intrigantes, así que decidí intentar calcular algunas de ellas yo mismo con Maple, utilizando la aproximación $$\pi \approx \frac{355}{113} \approx 3.1415929.$$
El algoritmo utiliza una programación dinámica en la que los nodos son los subconjuntos de $\{1,2,3,\ldots,8,9\}$ y el valor correspondiente es una tabla de todos los valores enteros menores que algún máximo que puede ser expresado por una fórmula legal como se especifica en la definición del problema utilizando los dígitos del subconjunto. El paso recursivo divide el argumento en dos conjuntos y combina los valores obtenidos para ellos utilizando los cinco operadores que se dan. En este caso he utilizado $360$ como valor máximo porque $355<360.$ Finalmente para expresar una fracción iteramos sobre todas las 2 particiones de los nueve dígitos, buscando encontrar un par donde el primer subconjunto pueda expresar el numerador y el segundo el denominador. Las aproximaciones no se limitan a $\pi$ se puede intentar para cualquier fracción con numerador y denominador pequeños.
Estas son algunas de las fórmulas que he obtenido: $$\frac{1 \times \left(2 \times 6 + {7}^{3}\right)}{5 + 9 \times \left(4 + 8\right)}$$ $$\frac{1 + 5 + 6 + {7}^{3}}{{9}^{2} + 4 \times 8}$$ $$\frac{5 \times \left(8 + 9 \times \left(1 + 6\right)\right)}{{7}^{2} + {4}^{3}}$$ $$\frac{5 \times \left(\left(8 \times 9\right) - 1\right)}{7 - \left(\frac{4 - \left({6}^{3}\right)}{2}\right)}$$ $$\frac{4 + 8 + {7}^{3}}{1 - \left(9 - \left({\left(5 + 6\right)}^{2}\right)\right)}$$ $$\frac{\left(2 + 3\right) \times \left(\left(8 \times 9\right) - 1\right)}{\left(4 \times \left(5 \times 6\right)\right) - 7}$$ $$\frac{5 \times \left(\left(6 \times \left(3 + 9\right)\right) - 1\right)}{\left({\left(4 + 7\right)}^{2}\right) - 8}$$ $$\frac{\left(6 - 1\right) \times \left(8 + 7 \times 9\right)}{{2}^{5} + {3}^{4}}$$
He aquí algunos ejemplos obtenidos al activar la concatenación: $$ \frac{5 \times 71}{2 - \left(3 - \left(6 + 9 \times \left(4 + 8\right)\right)\right)}$$ $$ \frac{71 \times \left(2 + 3\right)}{4 + 5 + 6 + 98}$$ $$ \frac{5 \times \left(73 - 2\right)}{6 - \left(1 - \left(9 \times \left(4 + 8\right)\right)\right)}$$ $$ \frac{5 \times \left(9 + 62\right)}{1 + 8 \times \left(3 + 4 + 7\right)}$$ $$ \frac{5 \times \left(7 + {8}^{2}\right)}{1 + 3 \times 6 + 94}$$ $$ \frac{\left(7 \times 52\right) - 9}{1 - \left(8 \times \left(4 - \left(3 \times 6\right)\right)\right)}$$ $$ \frac{5 \times \left(7 + 64\right)}{1 - \left(9 - \left({\left(3 + 8\right)}^{2}\right)\right)}$$ $$ \frac{\left(51 \times \left(3 + 4\right)\right) - 2}{8 + 7 \times \left(6 + 9\right)}$$ $$ \frac{31 + 9 \times \left({6}^{2}\right)}{4 \times 7 + 85}$$ $$ \frac{\left(9 - 4\right) \times \left(72 - 1\right)}{83 + 5 \times 6}$$ $$ \frac{5 \times \left(8 + 64 - 1\right)}{92 + 3 \times 7}$$ $$ \frac{\left(9 \times 41\right) - \left(6 + 8\right)}{7 + 2 \times 53}$$ $$ \frac{4 + 8 + {7}^{\left(\frac{9}{3}\right)}}{51 + 62} $$ $$ \frac{5 + 7 \times \left(\left(6 \times 9\right) - 4\right)}{31 + 82}$$
Los siguientes ejemplos tienen una propiedad especial que se deja al lector que descubra. $$ \frac{71 \times \left(2 + 8\right)}{4 + 3 \times \left(9 + 65\right)}$$ $$ \frac{71 \times \left(4 + 6\right)}{2 \times \left(3 \times 5 + 98\right)}$$ $$ \frac{5 \times \left(61 + {3}^{4}\right)}{{2}^{7} + 98}$$ $$ \frac{\left(9 \times \left(84 - 5\right)\right) - 1}{\left(3 \times 76\right) - 2}$$ $$ \frac{6 - \left(8 \times \left(4 - 92\right)\right)}{1 + 3 \times 75}$$ $$ \frac{\left(4 + 6\right) \times \left(8 + 7 \times 9\right)}{1 + {\left(3 \times 5\right)}^{2}}$$
Por último, pero no menos importante, tenemos $$\frac{3 \times \left(5 \times 71\right)}{9 + \left(8 \times 42\right) - 6}$$ $$\frac{71 \times \left(6 + 9\right)}{2 + 5 + 4 \times 83}$$ $$\frac{41 + 8 \times \left({2}^{7}\right)}{{3}^{5} + 96}$$ $$\frac{\left(6 + 9\right) \times \left(72 - 1\right)}{\left(8 \times 43\right) - 5}$$ $$\frac{3 \times \left(5 \times \left(\left(8 \times 9\right) - 1\right)\right)}{\left({7}^{\left(\frac{6}{2}\right)}\right) - 4}$$ $$\frac{1 + \left(5 + 9\right) \times \left(82 - 6\right)}{\left({7}^{3}\right) - 4}.$$
Sería interesante saber si la siguiente mejor aproximación, que según Wikipedia es $$\frac{52163}{16604} \approx 3.141592387$$ puede representarse de esta manera, si existe otra fracción con un denominador menor que produzca más lugares correctos y si hay que añadir la concatenación al conjunto de operadores para que esto ocurra.
Este es el código del programa Maple. ¡Que lo disfrutes!
with(combinat,powerset);
maxval := 360;
repr :=
proc(s)
local d, f, dstr, fstr, dtstr, ftstr, res, aprob, bprob, x, y,
leftset, rightset, check, typeset;
option remember;
res := table();
if nops(s) = 1 then
d := op(1,s);
res\[d\] := \[d, sprintf("%d", d), sprintf("%d", d)\];
return op(res);
fi;
check :=
proc(val)
if type(res\[val\], list) then return false; fi;
if type(val, integer) and abs(val)<maxval then return true fi;
return false;
end proc;
typeset :=
proc(dtstr, what, ftstr)
local pard, parf;
if length(dtstr)=1 then
pard := dtstr;
else
pard := sprintf("\\\\left(%s\\\\right)", dtstr);
fi;
if length(ftstr)=1 then
parf := ftstr;
else
parf := sprintf("\\\\left(%s\\\\right)", ftstr);
fi;
if evalb(what = "+") then
return sprintf("%s + %s", dtstr, ftstr);
elif evalb(what = "-") then
return sprintf("%s - %s", pard, parf);
elif evalb(what = "\*") then
return sprintf("%s \\\\times %s", pard, parf);
elif evalb(what = "/") then
return
sprintf("\\\\frac{%s}{%s}", dtstr, ftstr);
fi;
return sprintf("{%s}^{%s}", pard, parf);
end proc;
for leftset in powerset(s) do
rightset := s minus leftset;
if nops(leftset)=0 or nops(rightset)=0 then next fi;
aprob := repr(leftset);
bprob := repr(rightset);
if nops(op(op(res))) = 2\*maxval-1 then next fi;
for x in op(aprob) do for y in op(bprob) do
d := x\[1\]; dstr:= x\[2\]; dtstr := x\[3\];
f := y\[1\]; fstr:= y\[2\]; ftstr := y\[3\];
if check(d+f) then
res\[d+f\] := \[d+f, sprintf("(%s) + (%s)", dstr, fstr),
typeset(dtstr, "+", ftstr)\];
fi;
if check(d-f) then
res\[d-f\] := \[d-f, sprintf("(%s) - (%s)", dstr, fstr),
typeset(dtstr, "-", ftstr)\];
fi;
if check(d\*f) then
res\[d\*f\] := \[d\*f, sprintf("(%s) \* (%s)", dstr, fstr),
typeset(dtstr, "\*", ftstr)\];
fi;
if f <> 0 and check(d/f) then
res\[d/f\] := \[d/f, sprintf("(%s) / (%s)", dstr, fstr),
typeset(dtstr, "/", ftstr)\];
fi;
if not(d=0 or f=0) and evalf(abs(f\*log(d))<10)
and check(d^f) then
res\[d^f\] := \[d^f, sprintf("(%s) ^ (%s)", dstr, fstr),
typeset(dtstr, "^", ftstr)\];
fi;
od od;
od;
return op(res);
end;
approx\_frac :=
proc(what)
local allset, numerset, denomset, x, y,
xt, yt, xpair, ypair;
allset := {seq(k, k=1..9)};
for numerset in powerset(allset) do
denomset := allset minus numerset;
if nops(numerset)>=1 and nops(denomset)>=1 then
xt := repr(numerset);
yt := repr(denomset);
xpair := xt\[numer(what)\];
ypair := yt\[denom(what)\];
if type(xpair, list) and type(ypair, list) then
printf("(%s) / (%s) %a %a\\n\\\\frac{%s}{%s}\\n\\n",
xpair\[2\], ypair\[2\],
xpair\[1\]/ypair\[1\], evalf(xpair\[1\]/ypair\[1\]),
xpair\[3\], ypair\[3\]);
fi;
fi;
od;
end;