Saya punya tantangan sederhana untuk Anda saat ini. Mengingat sebuah array bilangan bulat positif A (atau setara dalam bahasa Anda), ganti setiap entri A i dengan jumlah berikutnya A i unsur A , bersepeda kembali dari awal jika tidak ada cukup item.
Seperti biasa, Anda dapat bersaing dalam bahasa pemrograman apa pun dan dapat mengambil input dan memberikan output melalui metode standar apa pun dan dalam format apa pun yang wajar, sambil memperhatikan bahwa celah ini dilarang secara default. Anda juga dapat mengambil ukuran A sebagai input. Ini adalah kode-golf , jadi pengiriman terpendek (dalam byte) untuk setiap bahasa menang.
Contoh / Kasus Uji
Diberikan [1,3,4,5]
, kode Anda harus di-output [3,10,13,14]
, karena 1
digantikan oleh 3
, 3
digantikan oleh 4+5+1=10
(perhatikan bagaimana kode itu dibungkus kembali dari awal), 4
oleh 5+1+3+4=13
dan 5
oleh 1+3+4+5+1=14
.
Mengingat [3,2,1,9]
, program Anda harus menghasilkan [12,10,9,33]
, karena kami mengganti 3
dengan 2+1+9=12
, 2
dengan 1+9=10
, 1
dengan 9
dan 9
dengan 3+2+1+9+3+2+1+9+3=33
(perhatikan bagaimana kami kembali dari awal lebih dari sekali).
Beberapa kasus uji lagi untuk Anda pilih:
[4,3,2,1] -> [10,7,5,4]
[3,2,1,9] -> [12,10,9,33]
[1,3,4,5] -> [3,10,13,14]
[4,4,3,2,2] -> [11,11,8,6,8]
[3,5,3,2,1] -> [10,14,6,4,3]
[3,2,4,3,2,1,1] -> [9,7,7,4,2,1,3]
[7,8,6,5,4,3,2,1,5] -> [29,33,20,15,11,8,6,5,30]
[28,2,4,2,3,2,3,4,5,3] -> [137,6,10,5,9,7,12,38,39,34]
[1,2,3,4,5,4,3,2,1,2,3,4,3,2,1] -> [2,7,13,14,12,8,5,3,2,7,9,7,4,2,1]
sumber
+
di akhir). Juga, eh, mungkin Anda akan ninja saya waktu berikutnya. :)Python , 55 byte
Cobalah online!
sumber
~
operatornya bukan bitwise, itu singkatan yang efektif-1-v
, begitu-~v
juga singkatan-(-1-v)
yang adil1+v
(tetapi menghindari tanda kurung seperti(1+v)*a
). Kedua dalam Python, seseorang dapat mengalikan daftar dengan integer untuk mengulanginya (mis.['a','b']*3
Adalah['a','b','a','b','a','b']
). Itu-~v*a
bisa diganti oleha+v*a
untuk jumlah byte yang sama. Terakhir[i:i+v]
adalah pengindeksan slice, menjaga elemeni
untuki+v-1
(0-diindeks) saja.J, 33 byte
ungolfed
penjelasan
Cobalah online!
sumber
C (gcc) ,
8685 byteCobalah online!
sumber
for(k=i=0;i++<y[l];)k+=y[(l+i)%c];
C(y,c,l,i,k)
.Haskell,
504744 byteCobalah online!
sumber
05AB1E ,
87 byteCobalah online!
Penjelasan
sumber
K4 / K (oK) ,
2019 byteLarutan:
Cobalah online!
Contoh:
Penjelasan:
Membentuk kembali input, drop pertama, ambil masing-masing x panjang, jumlahkan.
sumber
Jelly , 7 byte
Cobalah online!
sumber
Attache , 26 byte
Cobalah online!
Penjelasan
Ini adalah fork dari dua fungsi:
{Sum=>_[(_2+1:_)%#_]}
Iota
Artinya, tine kanan
Iota
diterapkan pada argumenx
dan diteruskan sebagai argumen kedua ke tine tengah (fungsi pertama). Jadi ini menjadi, untuk masukanx
:Mengganti yang dalam untuk
_
dan_2
:Iota[x]
mengembalikan array indeksx
. Ini setara dengan0...#x
.#x
adalah cara singkat untuk mengatakan ukuranx
, atauSize[x]
. Intinya, fungsi ini memetakanSum
fungsi pada ekspresi kedua:x[...]
Bit luar berarti yang...
akan menghasilkan serangkaian indeks untuk dipilihx
. Bagian terpenting dari menghasilkan indeks adalah ini:Ungkapan ini menggunakan sedikit vektorisasi. Untuk memvisualisasikan ini, anggaplah inputnya
x := [1, 3, 4, 5]
. Kemudian, ungkapan ini setara dengan:Ini adalah daftar indeks yang mewakili
N
elemen-elemen indeks berikutnya dalamx
mod#x
. Untuk membuatnya aman untuk pengambilan, kami menggunakan mod array ini#x
:Ini memberi kita indeks yang tepat, yang kemudian diperoleh dari
x
dan setiap array dijumlahkan, memberikan hasil yang tepat.Upaya lain
36 byte:
{Sum@_&Get=>((_2+1.._2+_)%#_)}#Iota
- Saya lupax[...]
sepenuhnya vektorisasi, sehingga menjadi:30 byte:
{Sum=>_[(_2+1.._2+_)%#_]}#Iota
- tapi kemudian saya menyadari bahwa_2+
di bagian dalam dapat difaktorkan keluar, yang berarti kita bisa menyelamatkan tanda kurung dengan menggunakan:
alih-alih..
, memberi kita versi saat ini.sumber
R ,
8964 byteCobalah online!
Gagasan utama untuk menghasilkan vektor indeks bersepeda yang cukup lama dapat Anda gunakan untuk mendapatkan elemen yang diperlukan dari vektor input.
Versi asli:
Cobalah online!
sumber
R ,
6258 byteCobalah online!
Alternatif untuk solusi R. lainnya . Dalam komentar, JayCe menyebutkan
cumsum
yang memicu sesuatu di otak saya untuk menggunakandiffinv
dan mendaur ulang matriksrep
.Penjelasan:
Input array yang diberikan
a
, biarkanM=max(a)
danl=length(a)
.Perhatikan bahwa
M+l
indeks maksimum yang mungkin perlu kita akses, dan ituM+l<=M*l+1
, karena jikaM,l>1
,M+l<=M*l
(dengan kesetaraan hanya ketikaM=l=2
) dan jikal==1
atauM==1
, makaM+l==M*l+1
.Sebagai contoh, mari
a=c(4,3,2,1)
. LaluM=l=4
.Kami membangun
M*l+1 x l
matriks dalam R olehmatrix(a,max(a)*l+1,l)
. Karena R mendaur ulanga
dalam urutan kolom-utama, kita berakhir dengan matriks yang mengulang elemen-elemena
seperti:Setiap kolom adalah penerus siklik dari setiap elemen
a
, dengana
melintasi baris pertama; ini karena cara R mendaur ulang argumennya dalam sebuah matriks.Selanjutnya, kita mengambil "turunan" terbalik dengan
diffinv
, pada dasarnya jumlah kumulatif setiap kolom dengan tambahan0
sebagai baris pertama, menghasilkan matriksDi kolom pertama, entri
6=4+2
sama dengan14=4 + (3+2+1+4)
, yang merupakan jumlah penerus siklik (CSS) ditambah terkemuka4
. Demikian pula, di kolom kedua, entri5=3+2
sama dengan10=3 + (4+1+2)
, dan sebagainya.Jadi di kolom
i
,a[i]+2
entri nd sama denganCSS(i)+a[i]
. Oleh karena itu, kami mengambil baris yang diindeks dengana+2
, menghasilkan matriks persegi:Entri di sepanjang diagonal sama dengan jumlah penggantinya siklik plus
a
, jadi kami mengekstrak diagonal dan mengurangia
, mengembalikan hasilnya sebagai jumlah penggantinya siklik.sumber
Map
, dan awalnya ini seperti 68 byte sebelum saya tahu saya bisa mengambill
input!Pyth,
1311 byteDisimpan 2 byte berkat Tn. Xcoder.
Coba di sini
Penjelasan
sumber
Arang , 12 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
sumber
JavaScript ES6, 65 byte
Solusi mudah. Tidak Disatukan:
map()
Fungsi JavaScript sangat cocok untuk pekerjaan itu, ia menjalankan panggilan balik yang diberikan terhadap setiap elemen dan menggantinya dengan hasil panggilan balik tersebut. Callback menerima dua parameter, yang pertamax
adalah nilai dan yang keduay
adalah indeks. Dengan mengambil modulusi % a.length
kita dapat dengan mudah mengulang array, berkali-kali jika diperlukan.Cuplikan tes
(Masukkan input sebagai notasi JSON)
Tampilkan cuplikan kode
sumber
Java 8, 87 byte
Lambda batal kari mengambil
int[]
daftar danint
panjang.Cobalah secara Online . Perhatikan bahwa saya telah dibayangi
System.out
dalam program ini untuk mendapatkan hasil untuk pencetakan yang lebih cantik.sumber
Julia 0,6 ,
635553 byteCobalah online!
Solusi yang lebih lama:
Julia 0,6 , 65 byte
Cobalah online!
Solusi lain. Tidak hebat dengan bytecount, tapi saya suka, dan mungkin lebih efisien daripada dua lainnya, terutama jika inputnya memiliki angka besar.
Julia 0,6 , 69 byte
Cobalah online!
sumber
Kanvas , 10 byte
Coba di sini!
Penjelasan:
sumber
QBasic 1.1 , 115 byte
Input pertama adalah panjang L , kemudian input selanjutnya L adalah elemen dalam urutan. Output L mewakili array yang dihasilkan, dengan elemen-elemen dalam urutan yang disajikan.
sumber
Japt, 7 byte
Coba di sini
sumber
APL + WIN, 37 byte
Anjuran untuk input:
Cobalah online! Atas perkenan Dyalog Classic
Penjelasan:
sumber
Ruby , 38 byte
Cobalah online!
sumber
JavaScript, 65 byte 3̶0̶0̶ ̶b̶y̶t̶e̶s̶
bermain golf
ungolfed
Cobalah online!
(versi ungolfed di atas) Saya baru dengan hal codegolf ini!
* diperbarui! berkat tautan bermanfaat yang disediakan dalam komentar, saya berhasil mengurangi ukurannya menjadi 65 byte!
sumber
n
), yang tidak kami izinkan. Selamat datang di PPCG, meskipun :)Perl 5 dengan
-M5.010
, 42 byteCobalah online!
sumber
JavaScript, 46 byte
Cobalah online
sumber
Cjam, 23 byte
Cobalah online!
sumber
Pip
-rn
, 14 byteMengambil nomor input pada garis stdin berturut-turut; memberikan nomor output pada garis stdout berturut-turut. Cobalah online!
Penjelasan
Atau, menggunakan contoh yang dikerjakan:
sumber
APL (Dyalog Classic) , 12 byte
Cobalah online!
menggunakan
⎕io←1
sumber
Perl 6 ,
5032 byteCobalah online!
Saya baru bermain golf di Perl 6, jadi saya yakin ini bisa lebih pendek.Tidak baru lagi, dan kembali ke golf ini!sumber