Saya telah menelusuri situs ini untuk sementara waktu, tetapi baru-baru ini saya benar-benar tertarik untuk mencoba beberapa tantangan. Saya berniat untuk mencoba beberapa topik kode-golf yang ada, tetapi saya tidak memiliki akses Internet untuk sementara waktu kemarin, dan sementara itu, saya memikirkan tantangan saya sendiri.
Tugas Anda adalah membuat program atau fungsi yang mengambil array Mengapung a
dan integer n
, kemudian menetapkan setiap nilai a
ke rata-rata dari dua di sampingnya, n
kali. Ketika berulang kali digunakan dengan peningkatan nilai n
, ini menghasilkan gerakan seperti gelombang:
Spesifik:
- Jika hanya ada satu item
a
, atau jikan
0 atau kurang, program harus mengembalikan array asli. - Input dan output dapat dalam format apa pun yang Anda inginkan, selama mereka terlihat terpisah.
Untuk setiap langkah:
- Item pertama di
a
harus menjadi rata-rata dari dirinya sendiri dan item berikutnya. - Item terakhir di
a
harus menjadi rata-rata dari dirinya sendiri dan item sebelumnya. - Item lain dalam
a
harus menjadi rata-rata item sebelumnya dan item berikutnya. - Pastikan Anda menghitung larik langkah sebelumnya dan bukan yang sekarang!
Kasing uji: CATATAN: Input / output Anda tidak harus dalam format ini!
[0, 0, 1, 0, 0], 1 -> [0, 0.5, 0, 0.5, 0]
[0, 0, 1, 0, 0], 2 -> [0.25, 0, 0.5, 0, 0.25]
[0, 0, 1, 0, 0], 0 -> [0, 0, 1, 0, 0]
[0, 0, 1, 0, 0], -39 -> [0, 0, 1, 0, 0]
[0, 16, 32, 16, 0], 1 -> [8, 16, 16, 16, 8]
[0, 1, 2, 3, 4, 5], 1 -> [0.5, 1, 2, 3, 4, 4.5]
[0, 64], 1 -> [32, 32]
[0], 482 -> [0]
[32, 32, 32, 16, 64, 16, 32, 32, 32], 4 -> [33, 27, 40, 22, 44, 22, 40, 27, 33]
Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang. Pemenang akan dipilih dalam satu minggu (pada 1 Agustus). Semoga berhasil!
Sunting: Selamat kepada pemenang, @issacg , dengan total 18 byte!
sumber
n
tidak disediakan dana
tidak disediakan kasus - mereka tidak terlalu banyak menambahn
harus 4, bukan 5.Jawaban:
Pyth,
4618 byteKode ini mengharapkan input dalam bentuk
iterations, [wave1, wave2, wave3 ...]
, seperti yang terlihat pada tautan pertama di bawah ini.Demonstrasi. Uji Harness.
Program ini bekerja dengan menerapkan kode dalam fungsi reduce (
u
) ke daftar input, sebanyak jumlah iterasi.Saya akan mendemonstrasikan fungsi perambatan gelombang pada daftar
[0, 1, 2, 3, 4, 5]
, yaitu diG
:+hGG
prependsG
's elemen pertama yangG
, membentuk[0, 0, 1, 2, 3, 4, 5]
.t+GeG
menambahkanG
elemen terakhir keG
dan menghapus elemen pertama, membentuk[1, 2, 3, 4, 5, 5]
.sV
bentuk pertama pasangan dari daftar, memberi[[0, 1], [0, 2], [1, 3], [2, 4], [3, 5], [4, 5]]
dengan elemen terakhir dari daftar pertama terpotong. Kemudian, pasangan diringkas melaluis
fungsi, memberi[1, 2, 4, 6, 8, 9]
.cR2
menggunakan divisi floating point untuk membagi semua angka dengan 2, memberikan hasil yang diinginkan[0.5, 1.0, 2.0, 3.0, 4.0, 4.5]
,.sumber
Snowman 1.0.0 , 219 karakter
Dengan linebreak untuk "keterbacaan":
Versi tidak disatukan / tidak dijinakkan:
Contoh format I / O:
sumber
Pyth -
2524 byteMenggunakan enumerate, kurangi untuk melakukan iterasi.
Cobalah online di sini .
sumber
Raket,
164145 byteTidak disatukan
Catatan, Anda mungkin perlu
#lang racket
saluran untuk menjalankan ini.sumber
R, 109 byte
Ini menciptakan fungsi tanpa nama yang menerima vektor dan integer dan mengembalikan vektor. Pendekatan di sini adalah memperlakukan input sebagai rangkaian waktu univariat dan menerapkan filter konvolusi linier.
Penjelasan + tidak dikumpulkan:
Contoh:
sumber
Haskell, 76 karakter
Caranya adalah dengan menambahkan angka pertama ke awal daftar dan yang terakhir ke akhir daftar alih-alih berurusan dengan kondisi batas.
Tes:
sumber
if then else
, yaknic
menjadia#n|n<1=a|1<2=iterate f a!!n
dans
menjadix!y=(x+y)/2
(dan disebut...zipWith(!)(x:a)...
).c
operator infiks, mengatakan#
:a#n|n<1=a|1<2=iterate f a!!n
. Sebut saja seperti[0, 0, 1, 0, 0] # 2
.CJam,
2322 byteCobalah online
Masukan dalam format daftar CJam, misalnya untuk contoh terakhir:
Outputnya juga daftar CJam:
Pendekatan dasarnya adalah bahwa dalam setiap langkah, vektor digeser satu posisi ke kiri dan satu posisi ke kanan. Masing-masing dari dua vektor diisi dengan elemen pertama / terakhir, dan kemudian rata-rata dari kedua vektor dihitung.
Penjelasan:
sumber
Java, 181 byte
Ini versi golfnya:
Tidak Disatukan:
Saya mencoba mempersingkat tugas dan persyaratan sebanyak mungkin dengan Java. Perbaikan disambut, tentu saja.
sumber
JavaScript (ES6),
15313267 karakterSaya kembali ke jawaban pertama saya 6 bulan kemudian dan apa yang harus saya lakukan? Golf diskon 50%, itu saja. ;)
Versi ini menyebut dirinya berulang kali hingga
n
kurang dari 1, menurunn
1 setiap kali.Solusi non-rekursif (
15113078 karakter):Tidak dikelompokkan: (kedaluwarsa)
Rekursif:
Non-rekursif:
sumber
if(n<2)return b;return s(b,n-1)
dapat direduksi menjadireturn n<2?b:s(b,n-1)
Java, 203 byte
Mencoba put pertama saya dengan Java. Tips perbaikan dipersilahkan :)
Cukup dicetak:
sumber
for
loop luar ke dalam pernyataan kenaikan loop? Sukafor(i=0;i<n;b[0]=...,b[s-1]=...,a=...,++i)for(...)b[j]=...;
? Maka Anda harus bisa menyingkirkan kawat gigi.++i
dan satu sama lain dengan koma, bukan titik koma). Cobalah. :)f(a;b;c){d;e;}
harus sepenuhnya identik denganf{a;b;}{d;e;c;}
, dan karenanya jugaf(a;b;e,c)d;
. Namun, dengan kode ulang Anda yang tidak lagi berfungsi, karena Anda tidak dapat memindahkan bagianfor
dalamnyafor
, jadi saya kira semua ini tidak lagi penting. ;)Python 2, 98 Bytes
Mengambil pendekatan langsung, digunakan
exec
untuk keluar dari menggunakan loop sementara. Saya pikir ada cara yang lebih baik untuk melakukan logika untuk mengetahui posisi kasus khusus, tetapi ini berfungsi untuk saat ini. Input harus berformat seperti[list], times
.Tidak Disatukan:
sumber
Mathematica, 81 byte
Saya punya perasaan itu bisa bermain golf lebih banyak jika saya bisa mencari cara yang lebih baik untuk menangani kondisi positif.
Patut dicatat: Mathematica juga menawarkan banyak solusi bawaan dalam berbagai fungsi pemrosesan daftar dan filter, juga
CellularAutomaton
. Saya memilihNest[... ListConvolve ...]
karena itu adalah cara termudah untuk menyelesaikan kekusutan di akhir daftar, tetapi sudut lain mungkin terbukti lebih pendek.sumber
Matlab, 109
Contoh:
sumber
Scala,
195 karakter (186 dengan output malas, yaitu187 karakterStream
)mungkin tidak optimal, pemetaan
sliding(3)
sangat berguna dalam hal ini.tes:
sumber
q (27 karakter)
Contohnya
sumber
R, 93 Bytes
Sebagai fungsi yang tidak disebutkan namanya
Diperluas
Tes
sumber
Japt,
3937 byte (tidak bersaing)Jawaban ini tidak bersaing karena bahasa lebih baru daripada tantangan. Saya hanya ingin melihat seberapa baik bahasa golf saya dapat bertahan terhadap tantangan pertama saya.
Cobalah online!
sumber
C ++ 14, 158 byte
Membutuhkan input untuk menjadi wadah
value_type==double
, sepertivector<double>
.Tidak Disatukan:
sumber
Racket 223 byte
Tidak Disatukan:
Pengujian:
Keluaran:
sumber
Jelly , 14 byte
Cobalah online!
Program lengkap.
sumber
C # (Visual C # Interactive Compiler) ,
160144 byteMenggunakan rekursi yang baik.
Cobalah online!
sumber