Programas compactos para calcular pi con la fórmula de Leibniz

En artículos anteriores hemos comparado la eficiencia de programas en distintos lenguajes. En este vamos a comparar la simplicidad de los programas para resolver un problema.

Como ejemplo he elegido el problema del cálculo compacto del número \pi mediante la fórmula de Leibniz


<br />    \pi = 4 \times \left(1 - \dfrac{1}{3} + \dfrac{1}{5} - \dfrac{1}{7} + \dots\right)<br />

El enunciado de problema es el siguiente

Escribir un programa, con el menor número posible de caracteres, para calcular el número \pi usando la fórmula de Leibniz con un error menor que 0.00001.

El problema se ha planteado en Code Golf: Leibniz formula for Pi y se han escrito distintas respuestas que resumo al final del artículo. Antes voy a presentar programas compactos en nuestros lenguajes habituales (Haskell, Maxima y Common Lisp).

Programa en Haskell (con 34 caracteres)

Una sesión es

Programa en Haskell (con 27 caracteres)

Una sesión es

Programa en Maxima (con 38 caracteres)

Una sesión es

Programa en Common Lisp (con 55 caracteres)

Una sesión es

Resumen de la compacidad de los programas

La compacidad de los programas publicados en Code Golf: Leibniz formula for Pi se resume en la siguiente tabla
<br /> \begin{array}{|l|r|}  \hline<br /> \mathrm{Lenguaje}    & \mathrm{Caracteres} \\ \hline<br /> \mathrm{AWK}          & 64   \\ \hline<br /> \mathrm{Brainfuck}    & 51   \\ \hline<br /> \mathrm{C}            & 67   \\ \hline<br /> \mathrm{C\#}          & 60   \\ \hline<br /> \mathrm{Common\ Lisp} & 55   \\ \hline<br /> \mathrm{dc}           & 35   \\ \hline<br /> \mathrm{F\#}          & 59   \\ \hline<br /> \mathrm{Fortran77}    & 248  \\ \hline<br /> \mathrm{Haskell}       & 27   \\ \hline<br /> \mathrm{J}            & 14   \\ \hline<br /> \mathrm{Java}         & 117  \\ \hline<br /> \mathrm{JavaScript}   & 43   \\ \hline<br /> \mathrm{Lua}          & 46   \\ \hline<br /> \mathrm{Matlab}       & 23   \\ \hline<br /> \mathrm{Mathematica}  & 27   \\ \hline<br /> \mathrm{Octave}       & 36   \\ \hline<br /> \mathrm{Oracle\ SQL}  & 73   \\ \hline<br /> \mathrm{Perl}         & 42   \\ \hline<br /> \mathrm{Phyton}       & 51   \\ \hline<br /> \mathrm{Ruby}         & 33   \\ \hline<br /> \mathrm{Scheme}       & 95   \\ \hline<br /> \end{array}<br />

Conclusiones

De nuestros lenguajes habituales el programa más compacto es el de Haskell de 27 caracteres.

De todos los programas, el más corto es el siguiente programa en el lenguaje J con sólo 14 caracteres

Si conoces programas más compactos para resolver el problema puedes escribirlo en los comentarios. Evidentemente, al no basarse en la fórmula de Leibniz, no se admiten la siguiente respuesta (con 6 caracteres)

ni esta otra (con dos caracteres)