Fonctions d'ordre supérieur

Une fonction est appelée fonction d'ordre supérieur si elle prend d'autres fonctions en paramètre ou renvoie une fonction en sortie. Nous pouvons passer des fonctions en tant qu'arguments et nous pouvons également retourner des fonctions. Tout cela rend très pratique l'écriture de code générique qui peut être réutilisé à plusieurs endroits.
Par exemple, la fonction sort() ou sorted() est une fonction d'ordre supérieur. Nous pouvons lui passer un argument appelé key, qui sera utilisé pour déterminer comment le tri est effectué. Supposons que nous ayons une liste de tuples et que nous souhaitions trier la liste en fonction de la somme des éléments des tuples :
items = [(3, 6), (1, 8), (4, 4), (6, 1)]
items.sort(key=lambda x: x[0] + x[1])
print(items)
# [(6, 1), (4, 4), (3, 6), (1, 8)]
Ici, nous avons passé une fonction lambda qui prend un seul élément en argument et renvoie la valeur selon laquelle il doit être trié.
Nous pouvons également définir notre propre fonction d'ordre supérieur :
def do(num1, num2, operation):
    res = operation(num1, num2)
    print(num1, num2, res)

do(2, 3, lambda x, y: x + y)    # 2 3 5
do(2, 3, lambda x, y: x - y)    # 2 3 -1
do(2, 3, lambda x, y: x * y)    # 2 3 6
La fonction do() a 3 arguments : le premier nombre num1, le second nombre num2, et l'opération à effectuer sur ces nombres. Dans le premier appel, nous indiquons à la fonction d'utiliser l'addition, dans le second la soustraction, et dans le dernier la multiplication.

Défi

Étant donné une liste de n triplets de nombres, vous devez trier ces triplets par leur somme. Ainsi, dans la liste finale, si nous regardons la somme des triplets, le résultat est une séquence non décroissante.
La première ligne de l'entrée contient un entier n — le nombre de triplets. Les n lignes suivantes contiennent 3 entiers séparés par des espaces.
Le programme doit imprimer n lignes — la liste résultante des triplets. Chaque ligne doit contenir 3 nombres séparés par des espaces. S'il y a deux triplets avec la même somme, celui apparaissant en premier dans l'entrée doit apparaître en premier dans la sortie (les fonctions sort et sorted conservent cet ordre — cela s'appelle un tri stable).
Entrée
Sortie
3 10 4 0 12 1 1 6 7 8
10 4 0 12 1 1 6 7 8
 

Constraints

Time limit: 2 seconds

Memory limit: 512 MB

Output limit: 1 MB

To check your solution you need to sign in
Sign in to continue