Una función general es simplemente una asignación, y la sugerencia en tu dibujo puede hacer eso casi textualmente en cualquier lenguaje:
$$ \begin{eqnarray} R(1) &=& 2;\\ R(2) &=& 3;\\ R(3) &=& 4;\\ R(4) &=& 1;\\ R(5) &=& 2;\\ R(6) &=& 4;\\ \end{eqnarray} $$
Eso es (en estilo de C)
R(x) = (x==1) ? 2 : (x==2) ? 3 : (x==3) ? 4 : (x==4) ? 1 : (x==5) ? 2 : 4;
También podrías crear una función para L, U, D, también (y presumiblemente O para opuesto), y esto funcionaría para cualquier etiquetado. Aunque deberías tener una orientación preferida para cada cara/etiqueta (para que no puedas rotar el cubo manteniendo la misma cara hacia adelante). Esto ya lo sabías.
Lo que estás buscando es un etiquetado tal que puedas tener una función más simple y un etiquetado correspondiente que encaje, uno que no involucre listar laboriosamente los valores asignados para cada función y cara. Por alguna razón una versión caso por caso simplemente no es tan elegante como una función de pre-cálculo. Por ejemplo, para imitar la función anterior para $R$ y tu etiquetado, podrías usar:
$$ \begin{eqnarray} R(x) &=& (x \bmod 4) + 1\\ L(x) &=& (x-2 \bmod 4) + 1\\ U(x) &=& 5\\ D(x) &=& 6\\ \end{eqnarray} $$ (nótese que el rango del módulo va de 0 a 3).
Estas funciones funcionan muy bien para $x=1,2,3,4$ pero no en absoluto cuando $x=5,6$.
La dificultad como probablemente ya has notado es cómo asignar etiquetas y algunas otras funciones para que $U$ y $D$ sean igualmente fáciles de calcular de modo que funcione para $x=5$ y $x=6$ también.
De nuevo, uno podría usar un etiquetado arbitrario y para cada función idear un polinomio que se ajuste a todos los 6 valores. Supongamos que $R(5) = 2$ y $R(6) = 4$.
La Interpolación de Lagrange es una técnica posible que ya hace esto. Para $n$ puntos $x,y$ ajustas un polinomio de grado $n-1$ para obtener
$$ \begin{eqnarray} R(x) &=& 2\cdot\frac{(x-2)(x-3)(x-4)(x-5)(x-6)}{(1-2)(1-3)(1-4)(1-5)(1-6)}\\ &+& 3\cdot\frac{(x-1)(x-3)(x-4)(x-5)(x-6)}{(2-1)(2-3)(2-4)(2-5)(2-6)}\\ &+& 4\cdot\frac{(x-1)(x-2)(x-4)(x-5)(x-6)}{(3-1)(3-2)(3-4)(3-5)(3-6)}\\ &+& 1\cdot\frac{(x-1)(x-2)(x-3)(x-5)(x-6)}{(4-1)(4-2)(4-3)(4-5)(4-6)}\\ &+& 2\cdot\frac{(x-1)(x-2)(x-3)(x-4)(x-6)}{(5-1)(5-2)(5-3)(5-4)(5-6)}\\ &+& 4\cdot\frac{(x-1)(x-2)(x-3)(x-4)(x-5)}{(6-1)(6-2)(6-3)(6-4)(6-5)}\\ \end{eqnarray} $$
(observa la cancelación de todos los términos a 0 o 1) y después de mucho cálculo y simplificación tediosa (o más bien después de que Mathematica lo haga), obtienes:
$$R(x) = \frac{1}{120} (4800 - 10062 x - 7755 x^2 - 2635 x^3 - 405 x^4 - 23 x^5)$$
Usando la sugerencia de Zhen Lin en el comentario, uno puede tomar esto mod 7 para obtener coeficientes más manejables:
$$R(x) = (5 + 4 x + 6 x^2 + 4 x^3 + 6 x^4 + 5 x^5) \bmod 7$$
Entonces dos cosas a tener en cuenta...no solo fue ese cálculo tedioso (simplemente comprobarlo es inmanejable a mano (más de lo que vale la pena)), sino que la función resultante no es particularmente bonita, y parece incluso más compleja que simplemente la vieja lista.
En este punto, tal vez podríamos encontrar una función más simple para un etiquetado particular idiosincrático como el de Qiaochu, usando módulo u otras funciones simples, y hasta podría ser más simple encontrarla, pero hasta ahora no tengo un destello de genio que permitiría que funcionara para todas las caras.
Así que pienso que la moraleja de la historia es que, realmente, lo más fácil de codificar (y también el más rápido de ejecutar, y el más fácil de entender posteriormente) será la función 'lista de valores'.
El deseo de una función no basada en casos es natural, como capturar una relación de recurrencia con una función generadora, o ajustar una función a un conjunto de puntos. Pero en este caso el resultado es tan o más complejo que la simple lista.