Kita semua sering mendengar ungkapan "berjalan melalui array" berarti "memetakan fungsi di atas array berikut". Namun, saya perlu melakukannya (sekarang!), Jadi saya ingin Anda menjalankan array.
Bagaimana saya berlari?
Bayangkan ada paket liar serigala belakang Anda
Menjalankan melalui array seperti berjalan melalui satu, kecuali Anda dapat melewatkan elemen. Ya, kadang-kadang berantakan, tetapi (umumnya) berfungsi. "Elemen mana yang dilewati?", Anda mungkin bertanya. Nah, ini dilakukan secara acak. Mari kita berjalan melintasi array!
- Membiarkan
e
menjadi elemen saat ini. - Biarkan
random
menghasilkan float acak di[0,1)
. Jikarandom() < 0.5
, maka Anda pergi ke elemen berikutnya dan kemudian ke langkah 1. (Anda dapat menghasilkan angka dengan cara lain, selama mereka adalah (idealnya) kesempatan yang sama untuk melompat dan tetap. Misalnya, Anda dapat menggunakan memilih elemen dari dua anggota mengatur dan melakukan tindakan berdasarkan hasil.) - Jika tidak, Anda melakukan fungsi
f
padae
.
Objektif
Diberikan array / daftar / string seperti salah satu A
dan nomor K
, jalankan melalui array, menambah K
setiap anggota yang diakses. Keluarkan / kembalikan array ini. A
hanya akan berisi bilangan bulat non-negatif, dan K
hanya akan menjadi bilangan bulat non-negatif. Ini adalah kode-golf , sehingga program terpendek dalam byte menang.
Uji kasus (contoh)
K, A => possible K'
[1, 2, 3, 4], 0 => [1, 2, 3, 4]
[1, 2, 3, 4], 1 => [1, 3, 3, 5]
[0, 0, 0, 0], 2 => [2, 0, 0, 2]
sumber
[0,1)
salah ketik? 2 lagi ...x
sedemikian rupa0 ≤ x < 1
.Jawaban:
Pyth, 7
Coba di sini
Menggunakan pilihan acak alih-alih perbandingan floating point, tetapi harus bisa dibedakan.
Ekspansi:
Menggunakan floating point:
Coba di sini
sumber
Clojure,
4137 byteMenghilangkan beberapa byte dengan mengalikannya dengan 0 atau 1 dan menjatuhkan "jika". Kredit untuk sebagian besar semua submitter lainnya!
sumber
for
lebih pendek daripadamap
, lihat jawaban saya untuk referensi :) Juga menghindari fungsi anonim batin sehingga alih-alih memulai kode dengan(fn[a k]
Anda dapat menggunakan#(
.Jelly,
987 byteDari
8
ke7
berkat @FryAmTheEggman .Cobalah online!
Penjelasan
sumber
MATL , 11 byte
Menggunakan angka acak floating point.
Cobalah online!
Penjelasan
sumber
Japt, 6 byte
Menguji
Penjelasan
Input implisit dari array
U
dan integerV
. Map (®
) di atas array dan, untuk setiap elemen, tambahkanV
dikalikan denganMq
, yang secara acak menghasilkan salah satu0
atau1
. Output implisit dari array yang dihasilkan.sumber
Ruby, 28 byte
sumber
Julia,
332927 byteIni adalah fungsi anonim yang menerima array dengan fungsi anonim dalam yang menerima integer dan mengembalikan array. Untuk memanggilnya, tetapkan ke variabel dan panggil seperti
f(x)(k)
.Kami menghasilkan array dengan panjang yang sama dengan array input yang terdiri dari nol dan yang dipilih secara acak dengan probabilitas yang sama. Kami mengalikannya dengan integer input dan menambahkannya ke array input.
Cobalah online!
Disimpan 2 byte berkat Dennis!
sumber
Python 2,
6058 byteProgram ini ternyata sangat sederhana. Tidak ada banyak trik golf di sana, selain dari yang "
from module import*
" jelas , menggunakan lambda alih-alih fungsi reguler dan kurangnya ruang putih. Selain itu sebenarnya sangat idiomatis. Jika saya benar-benar menulis ini, saya mungkin akan melakukannya dengan cara yang sangat mirip:Atau mungkin sesuatu yang lebih mewah:
Tapi itu cukup pamer :)
Ini adalah versi lama, 60 byte dari saat menggunakan float untuk keacakan diperlukan:
Untuk setiap elemen daftar, tambahkan
k*(random()<.5)
. Boolean Python mengevaluasi ke 0 dan 1, jadi ini menambahkan 0 ke elemen apa pun yang kondisinya tidak benar.Pengembalian Python
random.random()
mengapung[0, 1)
, jadi saya tidak perlu khawatir tentang itu.sumber
e+choice([0,k])
JavaScript (ES6), 38 byte
sumber
PowerShell v2 +, 34 byte
Mengambil input
$a
dan$k
array masing-masing dan int. Kami kemudian loop melalui array dan setiap iterasi loop menghasilkan elemen saat ini ditambah$k
waktu(random 2)
yang akan mengeksekusiGet-Random -Maximum 2
(yaitu, baik a0
atau a1
). Ini semua dibiarkan di pipeline dan output sebagai array implisit.sumber
CJam, 10 byte
Mengharapkan array dan nomor di atas tumpukan dalam urutan itu dan menggantinya dengan array baru.
Uji di sini.
sumber
php 71 byte
sumber
k (12 byte)
misalnya
Lebih umum, di mana
f
dapat dilewatkan sebagai argumen untuk 16 karaktermisalnya
sumber
Python 3
15211098 byteIni adalah solusi golf kode pertama saya jadi saya tidak tahu trik apa pun. Saya menguji ini menggunakan fungsi utama dengan kasus uji. Ukuran file hanya fungsi ini.
Terima kasih kepada @Cᴏɴᴏʀ O'Bʀɪᴇɴ untuk saran tentang menghapus spasi putih. Pujian tambahan untuk @undergroundmonorail untuk saran yang menyelamatkan 12 byte.
sumber
import *
,a(x, y)
,x[ptr]=z+y
, dll Anda juga dapat mengganti 4 ruang dengan spasi tunggalx[ptr]=z+y
baris yang samaif random()>0.5
untuk menghemat 3 byte spasi. Dalam python 20.5
dapat ditulis.5
untuk menyimpan byte, saya tidak tahu apakah itu benar dalam python 3. Jika Anda mengganti namaptr
menjadip
Anda akan menyimpan 6 byte di semua. Juga, apakah Anda menggunakan Windows? Windows menyimpan baris baru sebagai dua byte, tetapi karena python tidak peduli jika baris baru satu atau dua byte Anda dapat menghitungnya sebagai 1, membuat solusi Anda saat ini hanya 103 byte. Ngomong-ngomong, selamat datang di PPCG :)Clojure, 32 byte
Terima kasih David untuk
rand-int
gagasannya, pasti lebih pendek dariif(>(rand)0.5)
pendekatannya. Di sinifor
berdetakmap
.sumber
Oktaf, 28 byte
Sampel dijalankan pada ideone .
sumber
05AB1E , 10 byte
Kode:
Cobalah online! .
sumber
Java, 84 byte
Tidak disatukan
Catatan
return A;
. Jenis kembali harus diubah dariint[]
menjadivoid
. Namun ini tidak menyimpan byte tambahan karena ruang tambahan diperlukan antaravoid
danr
.Versi lebih pendek (Seperti disebutkan dalam catatan), 75 byte
Keluaran
sumber
Mathcad, byte
Belum ada byte formal yang dihitung sebagai protokol penghitungan Mathcad yang belum diputuskan.
sumber
Java
1081078582 byte14 byte disimpan berkat @TimmyD
sumber
main
,String[]
,int[]
, dan menyimpan beberapa byte lain dengan mengubahnextFloat()>0.5
kenext(1)==0
.new java.util.Random().nextFloat()
keMath.random()
, karena jauh lebih pendek.s
, hanya sajai
, metode ini memiliki tipe pengembalianvoid
tetapi Anda mencoba untuk mengembalikanint[]
. Juga ada titik koma yang hilang setelahreturn s
.Perl 5 , 30 + 1 (-a) = 31 byte
Cobalah online!
sumber