Tulis fungsi (seperti placeAt
) yang mengambil larik integer non-negatif dan indeks yang merupakan integer non-negatif. Itu harus menempatkan 1 pada indeks yang diberikan, mungkin menggeser entri lain dengan satu tempat untuk mengosongkan tempat itu, dengan 0 berdiri untuk tempat kosong.
- Jika entri pada indeks yang diinginkan adalah 0, isilah dengan 1.
- Jika tidak, cari 0 terdekat di sebelah kiri indeks. Geser entri satu tempat tersisa ke 0 untuk memberi ruang, lalu isi indeks dengan 1.
- Jika tidak ada 0 ke kiri, lakukan hal yang sama ke kanan.
- Jika tidak ada yang mungkin (yaitu jika tidak ada 0), kembalikan array tidak berubah.
Item ini diindeks 0. Nama fungsi bisa apa saja yang Anda inginkan.
Contoh:
(Surat mewakili nilai integer positif.)
[a, b, 0, c, d, 0] placeAt 2 // output [a, b, 1, c, d, 0] place 2 is 0, just fill
[a, b, 0, c, d, 0] placeAt 3 // output [a, b, c, 1, d, 0] place 3 is filled, shift items left
[a, b, 0, c, d, 0] placeAt 0 // output [1, a, b, c, d, 0] place 0 is filled, can't shift left, shift items right
[a, b, 0, c, d, 0] placeAt 1 // output [a, 1, b, c, d, 0] place 1 is filled, can't shift left, shift items right
[0, a, b, 0, c, d, 0] placeAt 2 // output [a, b, 1, 0, c, d, 0] place 2 is filled, shift items left
[0, a, b, 0, c, d, 0] placeAt 4 // output [0, a, b, c, 1, d, 0] place 4 is filled, shift items left (notice you keep shifting up until a 0)
[0, 2, 0, 2] placeAt 3 // output [0, 2, 2, 1] place 3 is filled, shift items left
Ini adalah tantangan kode golf. Entri terpendek pada akhir 9 hari menang.
0
?[0, 2, 0, 2] placeAt 3
, apakah itu legal untuk diproduksi[2, 0, 2, 1]
? Apakah kode yang diperlukan untuk benar-benar menjadi fungsi yang disebutplaceAt
? Perhatikan bahwa beberapa bahasa tidak memiliki fungsi. "Melempar pengecualian" mungkin juga tidak berlaku untuk beberapa bahasa; Saya sarankan mengizinkan output yang menunjukkan kesalahan.[2, 0, 2, 1]
ini bukan keluaran legal, karena Anda harus selalu menggeser elemen sesedikit mungkin, dan Anda dapat memberi nama fungsi apa pun yang Anda inginkan.Jawaban:
JavaScript (ES6), 85
Tes menjalankan cuplikan pada peramban apa pun yang mendukung EcmaScript 6 (terutama bukan Chrome, bukan MSIE. Saya menguji pada Firefox, Safari 9 dapat berjalan)
(Saya menemukan ini tanpa melihat jawaban lain, sekarang saya melihat ini sangat mirip dengan rink. Namun cukup pendek. Mungkin saya tidak akan mendapatkan banyak upvotes untuk yang satu ini)
sumber
splice
lebih baik daripada koma sayaJulia, 122 byte
Hanya implementasi spesifikasi yang naif untuk memulai sesuatu.
Tidak Disatukan:
sumber
JavaScript (ES6), 98 byte
Cukup banyak pendekatan yang sama dengan jawaban CoffeeScript saya, tetapi saya melakukan hubungan arus pendek ke ekstrim untuk menyimpan
return
pernyataan:Penjelasan
Untuk lebih mudah dijelaskan, saya telah mengatur ulang kode saya sedikit:
Berikut ini beberapa informasi tentang evaluasi hubung singkat JS.
Demo
Saat ini demo ini hanya berfungsi di Firefox dan Edge karena penggunaan ES6:
sumber
f(['a', 'b', 0, 'c', 'd', 0], 2)
[a..b]
.f(['a', 'b', 0, 'c', 'd', 0], 1)
Ruby, 208 byte
sumber
.rindex 0
, menghemat satu byte setiap kali. Anda dapat juga menyimpan beberapa byte dengan menggunakan proc bukannya metode, yang bahkan tidak harus bernama:->a,i{...}
. If / elsif / elsif mungkin dapat dipersingkat dengan operator ternary bersarang...?...:...?...:...
.Haskell, 119 byte
Contoh penggunaan:
Cara kerjanya: Membagi daftar input pada posisi yang diberikan ke bagian kiri
a
, elemen pada posisi itu sendirix
dan bagian kananb
. Jika ada di0
dalama++x
, buat ruang hingga pertama0
di kebalikan daria++x
. Jika ada di0
dalamx++b
, buatlah ruang di sana. Jika tidak ada0
sama sekali, gabungkan semua bagian tidak berubah untuk mendapatkan daftar asli lagi.sumber
CoffeeScript, 96 byte
sumber
Python 2, 102 byte
Hitung indeks nol yang akan dihapus dengan merangkai daftar terbalik hingga indeks penyisipan dengan bagian setelah indeks dalam urutan normal, kemudian temukan indeks nol pertama. Nol ditambahkan ke akhir untuk menghindari
ValueError
pengecualian ketika tidak ada nol yang ditemukan. Kemudian cukup hapus, masukkan dan kembali.sumber
R, 87 byte
Penjelasan
Tes
sumber
C #, 265 byte
Golf (265 Karakter)
Dengan spasi putih dan lekukan
Seluruh Program
Uji Kasus
sumber
([0, 'a', 'b', 0, 'c', 'd'], 2)
String[] Q, int P
untukString[]Q,int P
.C, 154 byte
Lulus kasus uji yang diberikan, a adalah pointer ke array, l adalah panjang array (saya harap ini tidak memecahkan brief), i adalah indeks untuk memasukkan dan c digunakan secara internal. Mungkin dapat ditingkatkan dengan menggabungkan pencarian loop kiri dan kanan.
Contoh
Tidak disatukan
Terus terang, dan bukan trik apa pun selain deklarasi gaya K&R.
sumber