テキストのブロックを処理して新しいテキストを返す関数またはプログラムを作成します。最小の有効なプログラムが勝ちます。
テキストブロックの各行の形式は次のとおりです。
12:34,56
最初の番号は回線IDで、他の2つのコンマ区切り番号は他の回線への参照です。
入力テキストでは、数字は0以上の任意の整数にすることができます。すべての数字はASCIIエンコードされた10進数で、先頭にゼロは付きません。重複する行IDはありません。存在しない回線IDへの参照はありませんが、参照されていない回線IDがある場合があります。
出力テキストでは、最も小さい番号の行がテキストブロックの先頭に移動し、0に再番号付けされます。この行への参照も更新する必要があります。その行の最初の参照は0または1でなければなりません。2番目の参照は、最初の参照が1の場合のみ2になります。それ以外の場合は0または1でなければなりません。
すべての行は昇順で、昇順である必要があります(スキップされた番号はありません)。行n-1への以前の参照があった場合、または現在の行IDがnである場合にのみ、行nへの参照を持つことができます。行0を除き、下位の行IDによって参照されない行があってはなりません。そのような行は、最終出力の前に削除する必要があります。
入力テキストは常に正しい形式であると想定できます。
テスト入力#1:
45:73,24
78:24,78
89:24,73
73:45,3
72:3,24
3:24,24
24:3,89
再注文:
3:24,24
24:3,89
89:24,73
73:45,3
45:73,24
78:24,78
72:3,24
番号が変更されました:
0:1,1
1:0,2
2:1,3
3:4,0
4:3,1
78:1,78
72:0,1
最終出力のために参照されていない行が削除されました:
0:1,1
1:0,2
2:1,3
3:4,0
4:3,1
もちろん、プログラムはこの順序に従う必要はなく、正しい出力を生成するだけです。出力は、テキストの単一ブロックまたは言語で最も近いものである必要があります。つまり、文字ごとの直接出力はありません。返すか(優先)、ブロック全体を直接出力することができます。出力が別の関数またはプログラムに渡されると仮定します。
テスト入力#2
5:2,3
7:3,2
2:4,2
4:2,3
3:4,3
出力:
0:1,0
1:0,2
2:1,2
テスト入力#3
7:6,3
3:9,7
9:7,3
2:9,6
6:6,7
出力:
0:1,2
1:3,4
2:2,3
3:2,4
4:1,3