텍스트 블록을 처리하고 새 텍스트를 반환하는 함수 또는 프로그램을 작성하십시오. 가장 작은 유효한 프로그램이 이깁니다.
텍스트 블록의 각 줄은 다음과 같은 형식을 갖습니다.
12:34,56
첫 번째 숫자는 행 ID이고 다른 두 개의 쉼표로 구분 된 숫자는 다른 행에 대한 참조입니다.
입력 텍스트에서 숫자는 0 이상의 정수일 수 있습니다. 모든 숫자는 선행 0없이 ASCII로 인코딩 된 10 진수입니다. 중복 라인 ID는 없습니다. 존재하지 않는 라인 ID에 대한 참조는 없지만 참조되지 않은 라인 ID가있을 수 있습니다.
출력 텍스트에서 가장 낮은 번호의 줄은 텍스트 블록의 시작 부분으로 이동하고 0으로 다시 번호가 매겨집니다.이 줄에 대한 참조도 업데이트해야합니다. 해당 행의 첫 번째 참조는 0 또는 1이어야합니다. 두 번째 참조는 첫 번째 참조가 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