Una función se llama Función de Orden Superior si contiene otras funciones como parámetro o devuelve una función como resultado. Podemos pasar funciones como argumentos y también podemos devolver funciones. Todo esto hace que sea muy conveniente escribir código genérico que puede reutilizarse en múltiples lugares.
La función sort() o sorted(), por ejemplo, es una función de orden superior. Podemos pasarle un argumento llamado key, que se utilizará para determinar cómo se realiza la ordenación. Podemos tener una lista de tuplas y queremos ordenar la lista basándonos en la suma de los elementos de las tuplas:
La función do() tiene 3 argumentos: el primer número num1, el segundo número num2 y la operación que se necesita realizar en esos números. En la primera llamada, le decimos a la función que use la suma; en la segunda, que use la resta; y en la última, la multiplicación.
Reto
Dada una lista de n tríos de números, se te pide ordenar esos tríos por su suma. Así, en la lista final, si observamos la suma de los tríos, el resultado es una secuencia no decreciente.
La primera línea de la entrada contiene un solo entero n - el número de tríos. Las siguientes n líneas contienen 3 enteros separados por espacios.
El programa debe imprimir n líneas - la lista resultante de tríos. Cada línea debe contener 3 números separados por espacios. Si hay dos tríos con la misma suma, el primero que aparece en la entrada debe aparecer primero en la salida (las funciones sort y sorted mantienen ese orden - esto se llama ordenación estable).