Berkat komunitas PPCG, Santa sekarang telah menyeimbangkan gerobak penyimpanannya. Sekarang, dia perlu memindahkan mereka ke dermaga transportasi sehingga mereka dapat dikirim ke teluk pemuatan. Sayangnya, trek untuk menggerakkan gerobak berantakan, dan dia perlu mencari cara untuk mendapatkan semuanya tanpa menabrak bersama!
Tantangan
Anda akan diberi trek untuk masing-masing kereta sebagai daftar "label" (atau stasiun). Gerobak harus dipindahkan sedemikian rupa sehingga pada jangka waktu berapa pun, tidak ada dua gerobak yang berada pada label / stasiun yang sama. Pada dasarnya, gerobak bergerak di antara posisi yang masing-masing memiliki label unik.
Tugas
Diberi jejak untuk masing-masing gerobak sebagai daftar daftar label (yang semuanya bilangan bulat positif), tentukan kapan setiap gerobak harus dilepaskan untuk mengirim semua gerobak ke tujuan mereka dengan aman dalam waktu sesingkat mungkin.
Berikut ini penjelasan tentang cara kerja seluruh sistem trek. Katakanlah kereta i
dilepas tepat waktu t_i
ke trek dengan label T_i_1, T_i_2, ..., T_i_n
. Kemudian, selama t_1
ke t_i-1
, gerobak i
tidak di grid dan dapat diabaikan.
Pada kerangka waktu t_i
, gerobak ada pada label T_i_1
, dan untuk setiap kerangka waktu t_k
dari t_i
hingga t_i+n
(setengah inklusif), gerobak ada pada label T_i_k+1
.
Untuk semua kerangka waktu setelah dan termasuk t_i+n
, keranjang berada di tujuannya dan tidak lagi berada di grid.
Jumlah waktu total t_T
diambil adalah kerangka waktu terakhir dengan kereta masih di jalur dalam sistem.
Spesifikasi
Dengan sistem lacak, kembalikan daftar kerangka waktu [t_1, t_2, ..., t_n]
tempat i
kereta mulai saat itu t_i
, sehingga tidak ada pengaturan lain yang memungkinkan kereta dengan aman mencapai tujuan mereka dengan jumlah waktu yang lebih sedikit.
Dalam hal "aman", jika sewaktu-waktu kerangka dari t_1
ke t_T
sana ada lebih dari satu kereta pada label apa pun, maka mereka bertabrakan dan pengaturannya tidak "aman". Perhatikan bahwa dua kereta dapat bergerak dari a, b
ke b, a
dan masih "aman" karena jalurnya 2 arah.
Spesifikasi Format
Input akan diberikan sebagai matriks bilangan bulat positif dalam format apa pun yang masuk akal. Keluaran harus diberikan sebagai daftar bilangan bulat positif dalam format apa pun yang masuk akal. Anda dapat memberikan output dalam kerangka waktu tanpa indeks, sehingga outputnya adalah daftar bilangan bulat non-negatif dalam format apa pun yang masuk akal.
Aturan
- Celah Standar Berlaku
- Ini adalah kode-golf sehingga jawaban tersingkat dalam byte menang
- Tidak ada jawaban yang akan diterima
Uji Kasus
Input -> Output
[[1, 2, 3], [4, 5, 6], [7, 8, 9]] -> [1, 1, 1]
[[1, 2, 3], [1, 2, 3]] -> [1, 2]
[[1, 2, 3], [3, 2, 1]] -> [1, 2]
[[1, 2, 3, 4], [4, 3, 2, 1]] -> [1, 1]
[[1, 1, 1], [1, 1, 1]] -> [1, 4]
[[1, 2, 3, 4], [2, 4, 3, 1]] -> [2, 1]
[[1, 2, 3, 4, 5, 6, 7], [2, 3, 3, 4], [5, 4, 3]] -> [1, 3, 4]
[[1, 2, 3, 4, 4], [1, 2, 3, 5, 4], [1, 2, 3, 4, 5]] -> [2, 3, 1]
Catatan: Saya mendapat inspirasi untuk seri tantangan ini dari Advent Of Code . Saya tidak memiliki afiliasi dengan situs ini
Anda dapat melihat daftar semua tantangan dalam seri ini dengan melihat bagian 'Tertaut' dari tantangan pertama di sini .
Selamat Golf!
sumber
Jawaban:
JavaScript (ES7), 172 byte
Mengembalikan array kerangka waktu 0-diindeks.
NB : Ini hanya dapat bekerja dengan label pada [0-31]. Ini adalah batas JS, bukan batas algoritma.
Uji kasus
Tampilkan cuplikan kode
Berkomentar
sumber
<<
dan|
) Itu dapat diperbaiki dengan menggunakan array bool sebagai gantinya ...o[]
. (Memang bisa dilakukan dengan cara yang berbeda, tetapi saya memilih metode ini untuk hasil golf di tempat pertama.)