Tujuan
Mengurutkan daftar item memastikan bahwa setiap item terdaftar setelah dependensi yang ditentukan.
Memasukkan
Array array bilangan bulat, di mana setiap bilangan bulat menentukan indeks berbasis 0 atau 1 dari item lain yang harus dicari setelah item ini. Input dapat berupa array atau string atau apa pun yang dapat dibaca manusia.
Misalnya, input berbasis 0:
[
[ 2 ], // item 0 comes after item 2
[ 0, 3 ], // item 1 comes after item 0 and 3
[ ], // item 2 comes anywhere
[ 2 ] // item 3 comes after item 2
]
Asumsikan tidak ada dependensi melingkar, selalu ada setidaknya satu pesanan yang valid.
Keluaran
Angka-angka dalam urutan ketergantungan. Perintah ambigu tidak harus bersifat deterministik. Outputnya bisa berupa array atau teks atau apa pun yang bisa dibaca manusia.
Hanya satu pesanan yang harus diberikan dalam output, bahkan di mana ada beberapa pesanan yang valid.
Output yang mungkin untuk input di atas termasuk:
[ 2, 3, 0, 1 ]
[ 2, 0, 3, 1 ]
Mencetak gol
Fungsi atau program yang menyelesaikan ini dalam jumlah byte paling sedikit memenangkan kemuliaan penerimaan. Batas waktu dalam 6 hari.
Jawaban:
Jelly, 8 byte
Ini didasarkan pada pendekatan kedalaman (tidak diterapkan) dari jawaban Python @ xnor .
Cobalah online!
Bagaimana itu bekerja
sumber
Pyth, 21 byte
Uji:
sumber
Python 2, 73 byte
Urutkan simpul dengan hitungan turunannya, yang
f
menghitung secara rekursif. Jika titik menunjuk ke titik lain, turunannya termasuk titik runcing dan semua turunan titik itu, sehingga memiliki lebih banyak keturunan. Jadi, itu ditempatkan lebih lambat dari simpul runcing dalam pemesanan, seperti yang diinginkan.Hitungan turunan dari verteks adalah satu untuk dirinya sendiri, ditambah jumlah turunan dari masing-masing anak-anaknya. Perhatikan bahwa turunan dapat dihitung beberapa kali jika ada beberapa jalur menuju ke sana.
Itu juga akan bekerja menggunakan kedalaman daripada menghitung keturunan
kecuali
max
harus memberi0
pada daftar kosong.sumber
Pyth, 19 byte
Cobalah online: Peragaan
Penjelasan:
sumber
Bash, 35 byte
Contoh dijalankan
I / O adalah 1-diindeks. Setiap array berjalan pada baris terpisah, dengan whitespace sebagai pemisah item.
Bagaimana itu bekerja
tsort
- yang saya pelajari dalam jawaban @ DigitalTrauma - membaca pasangan token, dipisahkan oleh spasi putih, yang menunjukkan pemesanan parsial, dan mencetak pemesanan total (dalam bentuk daftar diurutkan dari semua token unik) yang memperpanjang pemesanan sebagian yang disebutkan sebelumnya.Semua angka pada garis tertentu diikuti oleh spasi atau umpan baris. Bagian
s/\s/ $. /g
dari perintah Perl menggantikan karakter spasi putih tersebut dengan spasi, nomor baris, dan spasi lain, sehingga memastikan bahwa setiap n pada baris k mendahului k .Akhirnya, jika baris kosong (yaitu, hanya terdiri dari umpan baris),
s/^$/ /
tambahkan spasi untuknya. Dengan cara ini, substitusi kedua mengubah baris kosong k menjadik k
, memastikan bahwa setiap bilangan bulat muncul setidaknya sekali dalam string yang disalurkan ketsort
.sumber
tsort
lebih baik / lebih cepat daripada yang saya lakukan :) Terima kasih atas penjelasan ekstra.Bash + coreutils,
2080Input sebagai garis yang dipisahkan oleh spasi, mis:
nl
menambahkan indeks berbasis nol ke semua barissed
membagi daftar depedensi menjadi pasangan ketergantungan yang sederhana, dan membuat ketergantungan yang tidak lengkap bergantung pada diri mereka sendiri.tsort
apakah jenis topologi yang diperlukantac
menempatkan urutan terbalik outputIdeone. Ideone dengan testcase @Dennis
sumber
Python 2,
143118116 bytePendekatan yang sedikit lebih acak .
Suntingan:
sumber