pengantar
Beberapa dari Anda mungkin pernah mendengar tentang Hilbert's Grand Hotel . Manajer di sana telah kehilangan daftar di mana para tamu menginap tetapi dia masih memiliki urutan di mana mereka check in. Setiap tamu tidak dapat tinggal di kamar dengan nomor kamar kurang dari nilai mereka dan jika tamu ditambahkan ke yang lebih rendah kamar, semua tamu di kamar yang lebih tinggi tanpa ruang kosong antara mereka dan tamu baru digeser ke atas satu kamar. Bisakah Anda membantunya menemukan di mana masing-masing tamu menginap?
Persyaratan
Tulis program yang menerima daftar nomor alami sebagai input dan letakkan di indeks mereka. Jika sudah ada nilai dalam indeks itu, itu bergeser ke entri berikutnya dalam daftar. Proses ini berulang sampai ruang kosong pertama (0 atau tidak ditentukan) ditemukan. Setiap ruang yang tidak terdefinisi antara indeks tertinggi saat ini dan setiap input baru akan diisi dengan menambahkan 0s. Karena ini adalah Grand Hotel Hilbert, kamar yang lebih tinggi dari indeks tertinggi saat ini tidak ada.
Masukan dan keluaran
Input akan menjadi daftar nomor alami yang diurutkan (diizinkan untuk dibaca melalui setiap bentuk input yang diterima).
Setiap nomor dalam input dianggap sebagai satu tamu yang tiba di hotel dan dalam urutan kedatangan
Output akan menjadi pengaturan terakhir tamu (angka)
Contohnya
Input: 1 3 1
Output: 1 1 3
Langkah demi langkah:
1
Buat kamar di indeks 1 dan tempat 1 di dalamnya
1 0 3
Buat kamar hingga indeks 3 dan tempat 3 di kamar 3
1 1 3
Geser isi kamar 1 ke atas satu kamar dan tempat 1 di kamar 1Input: 1 4 3 1 2 1
Output : 1 1 2 1 3 4
Langkah demi langkah:
1
Buat kamar di indeks 1 dan tempat 1 di dalamnya
1 0 0 4
Buat kamar hingga indeks 4 dan tempat 4 di kamar 4
1 0 3 4
Tempat 3 di kamar 3
1 1 3 4
Menggeser isi kamar 1 ke atas satu kamar dan tempat 1 di kamar 1
1 2 1 3 4
Menggeser isi kamar 2 ke 4 ke atas satu kamar dan menempatkan 2 di kamar 2
1 1 2 1 3 4
Geser isi kamar 1 ke 5 ke atas satu kamar dan letakkan 1 di kamar 1Input: 10
Output: 0 0 0 0 0 0 0 0 0 0 10
Langkah demi langkah:
0 0 0 0 0 0 0 0 0 10
Buat kamar hingga kamar 10 dan tempat 10 di kamar 10Catatan:
Bekerja dengan 0 diindeks baik-baik saja dan Anda dapat memasukkan 0 di depan output dalam kasus itu
Celah standar dilarang, kode terpendek dalam byte menang
sumber
PHP 93 byte
0 diindeks. Menggunakan loop 2 in 1 yang mencari tamu berikutnya setelah mendapat 0 (atau bentuk nol melampaui ruang akhir saat ini). Gunakan seperti:
Tidak Disatukan:
sumber
Haskell , 107 byte
Cobalah online!
sumber
JavaScript (ES6),
144120 byteMenyelamatkan 20B berkat Arnauld dan 11B berkat Neil
Pemakaian
Anda dapat menetapkan fungsi ke variabel
f
dan daftar harus diberikan sebagai array. Contoh:Keluaran
Outputnya juga ada dalam array. Karena Javascript berfungsi tanpa indeks, ada 0 tambahan di bagian depan.
sumber
(c+'').split`,`.map(Number)
melakukan pekerjaan itu?c.map(n=>n|0)
daripada(c+'').split`,`.map(Number)
.map()
tidak mengulangi sama sekali pada nilai yang tidak ditentukan dalam array. (Yang mengatakan, aku cukup yakin ada jalan yang lebih pendek daripada yang aku sarankan.)JavaScript (ES6), 86 byte
Memimpin nol dalam hasil karena JavaScript diindeks 0.
sumber
Mathematica, 98 byte
Fungsi yang tidak disebutkan namanya mengambil daftar bilangan bulat positif dan mengembalikan daftar bilangan bulat 0-diindeks. Seluruh
If
fungsi mengambil daftar yang diselesaikan sebagian dan bilangan bulat berikutnya untuk dimasukkan sebagai argumen. Jika bilangan bulat berikutnya melebihi panjang daftar parsial,PadRight@##~Append~#2
tambahkan daftar parsial yang sesuai; jika tidak,Join[Take@##,{#2},Drop@##/.{a___,0,b__}->{a,b}]]
masukkan bilangan bulat berikutnya ke posisinya, lalu buang yang pertama0
ditemukan setelah itu.Fold[...,{0},#]
menerapkan fungsi ini berulang kali ke daftar asli, dimulai dengan hotel kosong{0}
, dan menampilkan daftar hotel akhir.sumber
JavaScript (ES6), 81
Menggunakan 0 pengindeksan
Kurang golf
Uji
sumber
R, 133 byte
Untuk menghindari masalah dengan pengindeksan yang buruk, saya pad dengan beberapa nol, dan kemudian menghapusnya di akhir. Ini mungkin bukan solusi terbaik, tetapi berhasil.
sumber
Python,
134125116 byteBerlaku untuk Python 2.7.13 dan 3.6.0. Kode ini berfungsi dengan cara menukar nilai ditahan dengan nilai yang terkandung di setiap indeks hingga nilai ditahan adalah 0. Jika mencapai indeks yang belum ada dalam array, kode ini menambahkan angka nol di akhir array hingga array berisi itu indeks. Terima kasih kepada Wheat Wizard dan xnor untuk bermain golf masing-masing 9 byte
sumber
while
danif
tidak perlu orangtua. Anda bisa meletakkan banyak pernyataan pada satu baris yang dipisahkan oleh;
likeif(i<d):r.extend([0]*(d-i));i=d
kecuali jika ada kontrol flow di pernyataan selanjutnya.