高階関数

他の関数をパラメータとして受け取ったり、関数を出力として返す関数を高階関数と呼びます。関数を引数として渡すことも、関数を返すこともできます。これにより、汎用的なコードを書き、さまざまな場所で再利用することが非常に便利になります。

例えば、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