Escreva uma função ou programa que processe um bloco de texto e retorne o novo texto. O menor programa válido vence.
Cada linha no bloco de texto terá o seguinte formato:
12:34,56
O primeiro número é o ID da linha, os outros dois números separados por vírgula são referências a outras linhas.
No texto de entrada, os números podem ser qualquer número inteiro maior ou igual a 0. Todos os números serão decimais codificados em ASCII, sem zeros à esquerda. Não haverá IDs de linha duplicados. Não haverá referências a IDs de linha inexistentes, embora possa haver IDs de linha que não são referenciados.
No texto de saída, a linha numerada mais baixa será movida para o início do bloco de texto e renumerada para 0. Quaisquer referências a essa linha também deverão ser atualizadas. A primeira referência nessa linha deve ser 0 ou 1. A segunda referência só pode ser 2 se a primeira referência for 1. Caso contrário, deve ser 0 ou 1.
Todas as linhas devem estar em ordem crescente e crescente (sem números ignorados). Você só pode ter uma referência à linha n se houver uma referência anterior à linha n-1 ou se o ID da linha atual for n. Não deve haver linhas que não sejam referenciadas por IDs de linha inferiores, exceto pela linha 0. Qualquer uma dessas linhas deve ser removida antes da saída final.
Você pode supor que o texto de entrada esteja sempre no formato correto.
Entrada de teste nº 1:
45:73,24
78:24,78
89:24,73
73:45,3
72:3,24
3:24,24
24:3,89
Reordenado:
3:24,24
24:3,89
89:24,73
73:45,3
45:73,24
78:24,78
72:3,24
Renumerado:
0:1,1
1:0,2
2:1,3
3:4,0
4:3,1
78:1,78
72:0,1
Linhas não referenciadas removidas para saída final:
0:1,1
1:0,2
2:1,3
3:4,0
4:3,1
Obviamente, seu programa não precisa seguir essa ordem, apenas produza a saída correta. A saída deve ser um único bloco de texto ou o equivalente mais próximo no seu idioma, ou seja, nenhum resultado direto de caractere por caractere. Você pode devolvê-lo (de preferência) ou enviar o bloco inteiro diretamente. Suponha que sua saída será passada para outra função ou programa.
Entrada de teste nº 2
5:2,3
7:3,2
2:4,2
4:2,3
3:4,3
Resultado:
0:1,0
1:0,2
2:1,2
Entrada de teste nº 3
7:6,3
3:9,7
9:7,3
2:9,6
6:6,7
Resultado:
0:1,2
1:3,4
2:2,3
3:2,4
4:1,3