高階関数

他の関数をパラメータとして受け取ったり、関数を出力として返す関数を高階関数と呼びます。関数を引数として渡すことも、関数を返すこともできます。これにより、汎用的なコードを書き、さまざまな場所で再利用することが非常に便利になります。
例えば、sort()sorted() 関数は高階関数です。これらには key という引数を渡すことができ、ソートの方法を決定するために使用されます。タプルのリストがあり、そのタプルの要素の合計に基づいてリストをソートしたいとします。
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)]
ここでは、単一の要素を引数として取り、その要素に基づいてソートする値を返すラムダ関数を渡しています。
自分自身で高階関数を定義することもできます:
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
関数 do() は3つの引数を持っています:最初の数 num1、2つ目の数 num2、そしてこれらの数に対して実行される operation です。最初の呼び出しでは加算、2番目では減算、最後では乗算を関数に指示しています。

チャレンジ

n 個の数の三つ組のリストが与えられます。これらの三つ組を、その合計でソートしてください。つまり、最終的なリストでは、三つ組の合計が非減少の順序になっている必要があります。
入力の最初の行には、単一の整数 n が含まれます(これは三つ組の数です)。次の n 行には、スペースで区切られた3つの整数が含まれています。
プログラムは n 行を出力します—結果として得られる三つ組のリストです。各行には、スペースで区切られた3つの数が含まれます。同じ合計の三つ組が複数ある場合、入力で先に現れたものが出力でも先に現れる必要があります(sortsorted 関数はこの順序を保持します—これは安定ソートと呼ばれます)。
入力
出力
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