Latar Belakang
Saya memiliki deretan magnet yang kuat dan banyak benda logam di antara mereka. Di mana magnet akan menarik mereka?
Memasukkan
Input Anda adalah array bilangan bulat non-negatif, yang akan berisi setidaknya satu 1
. Anda dapat menggunakan format apa pun yang masuk akal.
The 0
s array mewakili ruang kosong, dan 1
s mewakili magnet tetap. Semua angka lainnya adalah benda logam, yang ditarik oleh magnet. Setiap objek akan ditarik ke arah magnet terdekat (jika ada dasi, objek tersebut ditarik ke kanan), dan ia bergerak ke arah itu hingga menyentuh magnet atau objek lain. Pada akhirnya, semua benda berkerumun di sekitar magnet. Urutan objek dipertahankan.
Keluaran
Output Anda adalah larik di mana setiap objek telah ditarik sedekat mungkin dengan magnet terdekat. Seharusnya memiliki format yang sama dengan input.
Contoh
Pertimbangkan array
[0,0,2,0,1,1,0,2,0,3,0,5,0,1,0]
Yang paling kiri 2
akan ditarik ke arah pasangan magnet pertama, seperti halnya yang kedua 2
. The 3
memiliki magnet empat langkah di kedua arah, sehingga akan ditarik ke kanan. Yang 5
juga akan ditarik ke kanan, dan itu bergerak di antara 3
magnet. Output yang benar adalah
[0,0,0,2,1,1,2,0,0,0,0,3,5,1,0]
Aturan dan penilaian
Anda dapat menulis program atau fungsi lengkap. Hitungan byte terendah menang, dan celah standar tidak diizinkan.
Uji kasus
[0,1,0] -> [0,1,0]
[1,0,2,0,0,1,0] -> [1,2,0,0,0,1,0]
[7,0,5,0,0,1,0] -> [0,0,0,7,5,1,0]
[1,0,3,0,1,0,3,0,1] -> [1,0,0,3,1,0,0,3,1]
[1,0,0,0,0,0,0,7,3] -> [1,7,3,0,0,0,0,0,0]
[1,2,3,4,5,6,7,8,9,10,11,0,0,0,1] -> [1,2,3,4,5,6,7,0,0,0,8,9,10,11,1]
[12,3,0,0,1,0,1,3,0,0,6,12,0,0,0,1] -> [0,0,12,3,1,0,1,3,6,0,0,0,0,0,12,1]
1
adalah ide bagus!Retina ,
9772 byteInput diharapkan menjadi daftar yang dipisahkan koma dari bilangan bulat unary (pembatas terkemuka dan tambahan seperti
[...]
berfungsi dengan baik).Jalankan semua test case di sini. (Untuk kenyamanan, ini menangani konversi dari dan ke desimal secara otomatis.)
Ini adalah ide yang sangat berbeda yang menghindari kelompok penyeimbang yang mahal dengan menggunakan beberapa tahap. Saat ini 6 byte lebih panjang, tetapi mungkin lebih golf:
sumber
JavaScript (ES6), 108 byte
Penjelasan
Iterasi setiap sel dan jika mengandung logam, periksa apakah sel berikutnya dalam arah magnet terdekat kosong, dan jika ya, gerakkan ke sana. Proses ini diulang berkali-kali sampai semua logam bergerak sejauh mungkin.
sumber
PHP, 337 karakter
Ya ini sangat panjang, karena PHP sebenarnya bukan bahasa untuk bermain golf, tetapi ia berfungsi dan saya MENYENANGKAN, jadi tidak masalah bagi saya. Tentu saja saya terbuka untuk kemungkinan kekurangan.
Juga ada fitur
bugkecil yang berpikir, jadi misalnya di sini:kelihatannya 12 ajaib itu ada di depan 3, tapi itu tidak benar!
3 menghormati jumlah yang lebih besar dan membiarkannya mendekati maget!
sumber