Funzioni di ordine superiore

Una funzione si chiama funzione di ordine superiore se accetta altre funzioni come parametri o restituisce una funzione come output. Possiamo passare funzioni come argomenti e possiamo anche restituire funzioni. Tutto ciò rende molto conveniente scrivere codice generico che può essere riutilizzato in più punti.
La funzione sort() o sorted(), ad esempio, è una funzione di ordine superiore. Possiamo passarle un argomento chiamato key, che verrà utilizzato per determinare come eseguire l'ordinamento. Possiamo avere una lista di tuple e voler ordinare la lista basandoci sulla somma degli elementi delle tuple:
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)]
Qui, abbiamo passato una funzione lambda che prende un singolo elemento come argomento e restituisce il valore in base al quale deve essere ordinato.
Possiamo anche definire la nostra propria funzione di ordine superiore:
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 funzione do() ha 3 argomenti: il primo numero num1, il secondo numero num2 e l'operazione che deve essere eseguita su questi numeri. Nella prima chiamata, diciamo alla funzione di usare l'addizione, nella seconda di usare la sottrazione e nell'ultima la moltiplicazione.

Sfida

Data una lista di n terne di numeri, ti viene chiesto di ordinare queste terne in base alla loro somma. Quindi, nella lista finale, se guardiamo la somma delle terne, il risultato è una sequenza non decrescente.
La prima riga dell'input contiene un singolo intero n - il numero di terne. Le successive n righe contengono 3 interi separati da spazi.
Il programma dovrebbe stampare n righe - la lista risultante delle terne. Ogni riga dovrebbe contenere 3 numeri separati da spazi. Se ci sono due terne con la stessa somma, la prima che appare nell'input dovrebbe apparire per prima nell'output (le funzioni sort e sorted mantengono quell'ordine - questo si chiama ordinamento stabile).
Input
Output
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