Normalisasi peta keputusan saya

11

Tulis fungsi atau program yang memproses blok teks dan mengembalikan teks baru. Program terkecil yang valid menang.

Setiap baris dalam blok teks akan memiliki format berikut:

12:34,56

Nomor pertama adalah ID baris, dua nomor lainnya yang dipisahkan koma adalah referensi ke baris lain.

Dalam teks input angka-angka dapat berupa bilangan bulat yang lebih besar dari atau sama dengan 0. Semua angka akan berada dalam desimal berkode ASCII tanpa nol di depan. Tidak akan ada ID garis rangkap. Tidak akan ada referensi ke ID baris yang tidak ada, meskipun mungkin ada ID baris yang tidak dirujuk.

Dalam teks output, baris bernomor terendah akan dipindahkan ke awal blok teks dan dinomori ulang menjadi 0. Setiap referensi ke baris ini harus diperbarui juga. Referensi pertama pada baris itu harus 0 atau 1. Referensi kedua hanya bisa 2 jika referensi pertama adalah 1. Jika tidak maka harus 0 atau 1.

Semua baris harus dalam urutan naik, tidak ada nomor yang terlewati. Anda hanya dapat memiliki referensi ke baris n jika sebelumnya ada referensi ke baris n-1 atau ID baris saat ini adalah n. Tidak boleh ada baris yang tidak dirujuk oleh ID baris bawah kecuali untuk baris 0. Setiap baris tersebut harus dihapus sebelum hasil akhir.

Anda dapat berasumsi bahwa teks input selalu dalam format yang benar.

Masukan tes # 1:

45:73,24
78:24,78
89:24,73
73:45,3
72:3,24
3:24,24
24:3,89

Diatur ulang:

3:24,24
24:3,89
89:24,73
73:45,3
45:73,24
78:24,78
72:3,24

Dinomori ulang:

0:1,1
1:0,2
2:1,3
3:4,0
4:3,1
78:1,78
72:0,1

Jalur yang tidak direferensikan dihapus untuk hasil akhir:

0:1,1
1:0,2
2:1,3
3:4,0
4:3,1

Tentu saja, program Anda tidak harus mengikuti pesanan ini, cukup hasilkan output yang benar. Outputnya harus berupa satu blok teks atau setara terdekat dalam bahasa Anda, yaitu tidak ada karakter dengan output langsung karakter. Anda dapat mengembalikannya (lebih disukai) atau output seluruh blok secara langsung. Asumsikan output Anda akan diteruskan ke fungsi atau program lain.

Uji input # 2

5:2,3
7:3,2
2:4,2
4:2,3
3:4,3

Keluaran:

0:1,0
1:0,2
2:1,2

Uji input # 3

7:6,3
3:9,7
9:7,3
2:9,6
6:6,7

Keluaran:

0:1,2
1:3,4
2:2,3
3:2,4
4:1,3
CJ Dennis
sumber

Jawaban:

1

Python 3 , 226 215 211 209 179 byte

def f(s):
 S=dict(map(eval,i.split(":"))for i in s.split("\n"));r="";L=[min(S)];i=0
 while L[i:]:a=S[L[i]];L+=set(a)-set(L);r+="%%d:%d,%d\n"%tuple(map(L.index,a))%i;i+=1
 return r

Cobalah online!

Biarawati Bocor
sumber