Uma função é chamada de Função de Alta Ordem se ela recebe outras funções como parâmetro ou retorna uma função como resultado. Podemos passar funções como argumentos e também podemos retornar funções. Tudo isso torna muito conveniente escrever código genérico que pode ser reutilizado em diversos lugares.
A função sort() ou sorted(), por exemplo, é uma função de alta ordem. Podemos passar um argumento chamado key para ela, que será usado para determinar como a ordenação é feita. Podemos ter uma lista de tuplas e gostaríamos de ordenar a lista com base na soma dos elementos das tuplas:
A função do() tem 3 argumentos: o primeiro número num1, o segundo número num2 e a operação que precisa ser realizada nesses números. Na primeira chamada, dizemos à função para usar a adição, na segunda para usar a subtração e na última a multiplicação.
Desafio
Dada uma lista de n trios de números, você deve ordenar esses trios pela soma de seus elementos. Assim, na lista final, se olharmos para a soma dos trios, o resultado é uma sequência não decrescente.
A primeira linha da entrada contém um único inteiro n — o número de trios. As próximas n linhas contêm 3 inteiros separados por espaço.
O programa deve imprimir n linhas — a lista resultante de trios. Cada linha deve conter 3 números separados por espaço. Se houver dois trios com a mesma soma, o primeiro que aparece na entrada deve aparecer primeiro na saída (as funções sort e sorted mantêm essa ordem — isso é chamado de ordenação estável).