Tugas Anda hari ini adalah menerapkan gelombang ke array angka. Gelombang terlihat seperti ini: [1, 0, -1, 0, 1, 0, -1, 0, 1...]
Menerapkannya ke array yang diberikan berarti menambahkan bersama elemen pertama, elemen kedua, dll.
Lebih tepatnya:
Program atau fungsi Anda akan menerima array bilangan bulat. Ini harus mencetak atau mengembalikan array berukuran sama dengan 1
ditambahkan ke elemen 1, 5, 9, dll. Dari array asli, -1
ditambahkan ke elemen ke-3, 7, 11, dll. Dari array asli, dan sisa elemen harus dibiarkan tidak tersentuh.
Array input dijamin memiliki setidaknya satu elemen.
Kasus uji:
Input | Output
[0] | [1]
[-1] | [0]
[-4, 3, 0, 1, 7, 9, 8, -2, 11, -88] | [-3, 3, -1, 1, 8, 9, 7, -2, 12, -88]
[0, 0, 0, 0, 0] | [1 ,0 ,-1 ,0 ,1]
[1, 1] | [2, 1]
Ini kode-golf , kode terpendek menang!
Jawaban:
Jelly , 5 byte
Cobalah online!
Bagaimana itu bekerja
sumber
1, 2, 3 ...
atau1, 0, -1, 0 ...
?LOGO , 18 byte
Tidak ada "Coba online!" tautan karena semua penerjemah LOGO online tidak mendukung daftar templat.
Itu adalah daftar template (setara dengan fungsi lambda dalam bahasa lain).
Pemakaian:
(
invoke
memanggil fungsi,pr
mencetak hasilnya)cetakan
[-3 3 -1 1 8 9 7 -2 12 -88]
.Penjelasan (sudah cukup dimengerti):
sumber
Haskell , 26 byte
Cobalah online! (menjalankan semua kasus uji)
Penjelasan:
sumber
JavaScript (ES6), 28 byte
Perhitungannya seperti ini:
Bit terakhir mengambil keuntungan dari fakta bahwa di JS, angka negatif ketika dimodulasi akan mempertahankan tanda negatifnya (yaitu
-5 % 3 -> -2
, alih-alih1
seperti dalam Python).sumber
Mathematica,
262322 byteCobalah online! (Matematika)
Catatan: TIO link untuk versi 23-byte, versi 22-byte tidak kompatibel dengan Matematika.
sumber
Python 2 , 40 byte
Cobalah online!
sumber
MATL ,
118 byteCobalah di MATL Online!
Penjelasan
sumber
+
penjelasannyaJelly , 16 byte
Cobalah online!
heh saya yakin ini terlalu panjang
Edit
Saya tahu solusi 5 byte mungkin tetapi wifi saya tampaknya mulai memotong saya jadi saya akan bermain golf besok. Jika seseorang memposting solusi Jelly singkat sebelum saya bisa bermain golf ini, itu tidak masalah bagi saya; Saya hanya akan menyimpan ini di sini untuk referensi
seberapa buruk saya di Jelly lolcara lain untuk melakukannya. Maksudku, aku bisa melihat tautan yang diposting Phoenix di komentar, tapi karena aku masih belajar, aku tidak ingin melihat solusinya sampai aku sendiri yang menemukannya. Ini mungkin membuat saya kehilangan reputasi, tetapi belajarlah untuk saya di sini :)))sumber
R ,
2924 byteCobalah online!
sumber
Python 2 ,
5042 byteDisimpan 8 byte berkat @Sisyphus!
Cobalah online!
53 byte
Cobalah online!
sumber
lambda l:map(sum,zip(l,[1,0,-1,0]*len(l)))
untuk Python 2Haskell , 26 byte
@Mego mengalahkan saya ke solusi ini
Cobalah online!
Inilah yang hebat dari Haskell. Ini menyatakan fungsi point-free yang mem-zip input dengan daftar yang tak terbatas.
Haskell , 56 byte
Inilah solusi yang menggunakan bilangan kompleks. Tidak terlalu kompetitif karena impor tetapi tidak pernah kurang keren.
Cobalah online!
sumber
Mathematica, 19 byte
Penjelasan
Catatan:
i=1
muncul di luar fungsi, yang tidak apa-apa per konsensus meta ini .sumber
i
memiliki nilai yang berbeda dari 1)J, 12 byte
Cobalah online!
Karena operator bentuk J
$
mengisi secara siklikal, ketika kita membentuknya sesuai panjang#
input, ia melakukan apa yang kita inginkan, dan kita bisa menambahkannya ke input]
sumber
C ++,
93858363 bytes-8 byte, berkat jawaban ini , saya menemukan bahwa parameter lambda dapat
auto
dan Anda dapat lulus dengan parameter yang benar, ini akan berfungsi-2 byte terima kasih kepada Nevay
-2 byte terima kasih kepada Zacharý
Saya menghapus
vector
termasuk. Anda harus memberikan argumen kepada wadah yang memenuhi ketentuan berikut:size
tanpa argumenKontainer STL yang menghormati kondisi berikut
array
,vector
,string
,map
,unordered_map
, dan mungkin orang lainJika mengeluarkan dengan memodifikasi argumen tidak diperbolehkan, maka:
C ++,
112110 bytesumber
j%4
untuk menyimpan 2 byte.j%4
.Pari / GP , 30 byte
Cobalah online!
sumber
Dyalog APL, 13 byte
Cobalah online!
Bagaimana?
1 0 ¯1 0
- array [1, 0, -1, 0]⍴⍨≢
- membentuk kembali panjang input, siklik⊢+
- penjumlahan vektor dengan inputsumber
Perl 6 , 28 byte
Cobalah online!
1+0i, * × i ... *
menghasilkan daftar angka tak terbatas yang1, i, -1, -i
diulang dalam satu siklus. Angka-angka tersebut dizip dengan penambahan (Z+
) dengan daftar input ($_
), dan kemudian komponen nyata dari bilangan kompleks yang dihasilkan diekstraksi (».re
).sumber
D, 56 byte
Cobalah online!
Ini adalah port jawaban C ++ HatsuPointerKun , jadi jangan lupakan itu!
sumber
Japt ,
11, 10 byteMengambil keuntungan dari pembungkus indeks Japt.
Menguji
Penjelasan
Input array secara implisit
U
.Peta di atas larik.
Untuk elemen saat ini tambahkan ...
Elemen pada indeks saat ini (
E
) ...Dalam array
[1,0,-1,0]
.sumber
Sebenarnya , 11 byte
Cobalah online! (menjalankan semua kasus uji)
Penjelasan:
sumber
Pyth , 11 byte
Cobalah online!
sumber
.e+b@[1Z_1Z
ss
dengane
untuk -1..e+be^.j)k
sepertinya tidak berfungsi ketika saya mencobanya.CJam , 15 byte
Cobalah online!
sumber
Math.JS , 34 byte
Dijelaskan
Cobalah secara Online!
sumber
8 ,
9663 byteKode
Kode ini meninggalkan array yang dihasilkan pada TOS
Penggunaan dan contoh
Penjelasan
Kami menggunakan cos (x) untuk mendapatkan urutan yang benar [1,0, -1,0]. Setiap indeks elemen array dikalikan 90 derajat dan kemudian diteruskan ke fungsi cos () untuk mendapatkan "faktor gelombang" yang diinginkan untuk ditambahkan ke item yang sesuai.
sumber
C # (.NET Core) , 50 byte
Cobalah online!
Menggunakan lambda sederhana. Memodifikasi array asli dan mengembalikan output melalui referensi.
sumber
05AB1E , 16 byte
Cobalah online!
3L2.SR0¸«
adalah hal terpendek yang dapat saya pikirkan untuksin(x % 4)
di 05AB1E.sumber
Ruby , 38 byte
Cobalah online!
sumber