Nota: Para la diversión y la curiosidad de evitar un lenguaje de programación y se adhieren a las expresiones algebraicas con la intención de alimentar a este a través de Gnuplot:
El funcionamiento básico es
$$
F(n) = F_+(n) - F_-(n)
$$
donde $F_+$ mapas para el máximo número de dígitos y $F_-$ mapas para el mínimo número de dígitos.
Sólo consideraremos el caso de la base $10$ no negativo $4$ números de dos dígitos
$$
(d_3 d_2 d_1 d_0)_{10} = \sum_{k=0}^3 d_k \, 10^k
$$
Para proporcionar $F_+$ y $F_-$ necesitamos una manera de ordenar un conjunto de cuatro dígitos.
Esto se puede hacer mediante la aplicación $\min$ y $\max$ funciones
$$
\begin{align}
\min(a, b) &:= \frac{a + b - |a - b|}{2} \\
\max(a, b) &:= \frac{a + b + |a - b|}{2}
\end{align}
$$
como este: Podemos empezar con el cálculo de los valores intermedios $s_k$, $t_k$
$$
\begin{matriz}
s_0 = \min(d_0, d_1) \\
s_1 = \max(d_0, d_1) \\
s_2 = \min(d_2, d_3) \\
s_3 = \max(d_2, d_3)
\end{matriz}
\quad\quad
\begin{matriz}
t_0 = \min(s_0, s_2) \\
t_1 = \max(s_0, s_2) \\
t_2 = \min(s_1, s_3) \\
t_3 = \max(s_1, s_3)
\end{matriz}
$$
y a continuación, obtener
$$
d^+_0 = t_0 \quad\quad
d^-_0 = t_3 \\
d^+_1 = \min(t_1, t_2) \quad\quad
d^-_1 = \max(t_1, t_2) \\
d^+_2 = \max(t_1, t_2) \quad\quad
d^-_2 = \min(t_1, t_2) \\
d^+_3 = t_3 \quad\quad
d^-_3 = t_0
$$
donde $d^+_k$ son los dígitos ordenados para maximizar y $d^-_k$ son los dígitos ordenados para minimizar. Uno puede visualizar esto como una ordenación de la red
d0
\
\ min: s0 --> min: t0 ----> dp0 dm3
/ max: s1 ^ max: t1
/ \ / \
d1 \/ \ min: dp1 dm2
d2 /\ / max: dp2 dm1
\ / \ /
\ min: s2 v min: t2
/ max: s3 --> max: t3 ----> dp3 dm0
/
d3
Por ejemplo
$$
\begin{align}
d^-_2
&= \min(t_1, t_2) \\
&= \min(\max(s_0, s_2), \min(s_1, s_3)) \\
&= \min(\max(\min(d_0, d_1), \min(d_2, d_3)), \min(\max(d_0, d_1), \max(d_2, d_3)))
\end{align}
$$
que es un complicado plazo, pero de lo contrario todavía una función de la $d_k$.
A continuación, necesitamos una manera de extraer los $k$-ésimo dígito:
$$
\pi^{(k)}\left( (d_3 d_2 d_1 d_0)_{10} \right) = d_k
$$
esto se puede hacer por la costumbre
$$
\pi^{(3)}(n) = \left\lfloor \frac{n}{1000} \right\rfloor \\
\pi^{(2)}(n) = \left\lfloor \frac{n - 1000\, \pi^{(3)}(n)}{100} \right\rfloor \\
\pi^{(1)}(n) = \left\lfloor \frac{n - 1000\, \pi^{(3)}(n) - 100\, \pi^{(2)}(n)}{10} \right\rfloor \\
\pi^{(0)}(n) = n - 1000\, \pi^{(3)}(n) - 100\, \pi^{(2)}(n) - 10\, \pi^{(1)}(n)
$$
La reescritura de este para Gnuplot da:
min(a,b) = (a + b - abs(a - b))/2.0
max(a,b) = (a + b + abs(a - b))/2.0
dp0(d0,d1,d2,d3) = min(min(d0,d1),min(d2, d3))
dp1(d0,d1,d2,d3) = min(max(min(d0,d1),min(d2,d3)),
min(max(d0,d1),max(d2,d3)))
dp2(d0,d1,d2,d3) = max(max(min(d0,d1),min(d2,d3)),
min(max(d0,d1),max(d2,d3)))
dp3(d0,d1,d2,d3) = max(max(d0,d1),max(d2, d3))
pi3(n) = floor(n / 1000.0)
pi2(n) = floor((n-1000*pi3(n))/ 100.0)
pi1(n) = floor((n-1000*pi3(n)-100*pi2(n))/ 10.0)
pi0(n) = n-1000*pi3(n)-100*pi2(n)-10*pi1(n)
fp(n) = dp0(pi0(n),pi1(n),pi2(n),pi3(n)) +
10*dp1(pi0(n),pi1(n),pi2(n),pi3(n)) +
100*dp2(pi0(n),pi1(n),pi2(n),pi3(n)) +
1000*dp3(pi0(n),pi1(n),pi2(n),pi3(n))
dm0(d0, d1, d2, d3) = dp3(d0,d1,d2,d3)
dm1(d0, d1, d2, d3) = dp2(d0,d1,d2,d3)
dm2(d0, d1, d2, d3) = dp1(d0,d1,d2,d3)
dm3(d0, d1, d2, d3) = dp0(d0,d1,d2,d3)
fm(n) = dm0(pi0(n),pi1(n),pi2(n),pi3(n)) +
10*dm1(pi0(n),pi1(n),pi2(n),pi3(n)) +
100*dm2(pi0(n),pi1(n),pi2(n),pi3(n)) +
1000*dm3(pi0(n),pi1(n),pi2(n),pi3(n))
f(x) = fp(x) - fm(x)
Esto funciona bastante bien:
gnuplot> print fp(3284), fm(3284)
8432.0 2348.0
Pero resulta que el uso de los gráficos no es lo suficientemente precisa para identificar los puntos fijos.
En la final se necesita un ordenador programa para comprobar todos los números $n \in \{ 0, \ldots, 9999 \}$, para un adecuado punto fijo de $\mathbb{N}^2$.
Nota: Los $\mbox{equ}$ función se utiliza para establecer los argumentos con los dígitos iguales a cero.
eq(d0,d1,d2,d3) = (d0 == d1) ? 0 : (d0 == d2) ? 0 : (d0 == d3) ? 0 :
(d1 == d2) ? 0 : (d1 == d3) ? 0 : (d2 == d3) ? 0 : 1
equ(n) = eq(pi0(n),pi1(n),pi2(n),pi3(n))
Actualización: tal vez uno lo puede hacer mejor, el cálculo de la precisión es bastante buena:
gnuplot> print fp(6174), fm(6174), f(6174)
7641.0 1467.0 6174.0 # <- fixed point!
gnuplot> print fp(6173), fm(6173), f(6173)
7631.0 1367.0 6264.0
gnuplot> print fp(6175), fm(6175), f(6175)
7651.0 1567.0 6084.0
Actualización: parece que funciona:
gnuplot> set samples 10000
gnuplot> plot [0:9999] [0:1] abs(f(x)*equ(x) - x) < 0.1
Nota: Las expresiones algebraicas he utilizado análisis realizados no más fácil, los términos son demasiado difíciles de manejar para dar la visión para determinar los puntos fijos. Esto se redujo a probar todos los argumentos y comprobar el valor de la función a través de un ordenador.