pengantar
Mari kita amati array ini: [3, 2, 4, 1, 1, 5, 1, 2]
.
Setiap elemen menampilkan panjang substring yang harus disimpulkan. Mari kita lihat elemen pertama dari array di atas:
[3, 2, 4, 1, 1, 5, 1, 2]
^
Elemen pada indeks pertama adalah 3 , jadi kami sekarang mengambil substring dengan panjang tiga dengan indeks yang sama dengan posisi awal:
[3, 2, 4]
Ketika diringkas, ini menghasilkan 9 , jadi elemen pertama dari set jumlah substring adalah 9
.
Kami melakukan ini untuk semua elemen dalam array:
3 -> [3, 2, 4]
2 -> [2, 4]
4 -> [4, 1, 1, 5]
1 -> [1]
1 -> [1]
5 -> [5, 1, 2]
1 -> [1]
2 -> [2]
Anda dapat melihat bahwa angka 5 adalah kasus yang aneh. Angka itu melebihi panjang array:
[3, 2, 4, 1, 1, 5, 1, 2]
^ ^ ^ ^ ^
Kami akan mengabaikan semua yang melebihi array, jadi kami gunakan saja [5, 1, 2]
.
Langkah terakhir adalah merangkum semuanya:
[3, 2, 4] -> 9
[2, 4] -> 6
[4, 1, 1, 5] -> 11
[1] -> 1
[1] -> 1
[5, 1, 2] -> 8
[1] -> 1
[2] -> 2
Dan itu adalah array yang perlu di-output:
[9, 6, 11, 1, 1, 8, 1, 2]
Tugas
Diberikan array yang tidak kosong dengan bilangan bulat positif (bukan nol), mengeluarkan himpunan jumlah substring . Ini adalah kode-golf , jadi pengiriman dengan jumlah byte terkecil menang!
Uji kasus
[1, 2, 3, 4, 5] -> [1, 5, 12, 9, 5]
[3, 3, 3, 3, 3, 3, 3, 3] -> [9, 9, 9, 9, 9, 9, 6, 3]
[5, 1, 2, 4, 1] -> [13, 1, 6, 5, 1]
[1] -> [1]
Jawaban:
Jelly , 6 byte
Cobalah online! atau verifikasi semua kasus uji .
Bagaimana itu bekerja
sumber
Python, 40 byte
Uji di Ideone .
sumber
Excel, 21 byte
=SUM(OFFSET(A1,,,A1))
Buka spreadsheet baru, masukkan nilai tes di kolom A. Masukkan rumus di B1 dan klik dua kali gagang sel untuk naik rentang.
sumber
Python 3, 47 byte
Implementasi yang cukup mudah. Perilaku default Python untuk irisan yang melewati akhir daftar sangat nyaman di sini.
sumber
Haskell,
34, 33 byteSatu byte disimpan oleh nimi.
sumber
JavaScript ES6, 50 byte
Cukup jelas. Itu
map
atas setiap elemen dalam array, mendapatkanslice
darii
ndex melalui indeks ditambahe
nilai lement, danreduce
dengan menambahkan.sumber
J, 11 byte
Pemakaian
Penjelasan
sumber
JavaScript (ES6), 45
reduce
dipukuli lagi!sumber
f=
, sama seperti dalam jawaban ini .f=
sudah tidak dihitung dalam 45 byteRetina , 38 byte
Hitungan byte mengasumsikan penyandian ISO 8859-1.
Input dan output adalah daftar yang dipisahkan koma.
Cobalah online! (Baris pertama memungkinkan suite tes yang dipisahkan dengan linefeed.)
sumber
Mathematica
6055 bytemisalnya
Terima kasih @MartinEnder untuk mencukur 5 byte :)
sumber
#+Tr@Take[x=Rest@x,UpTo[#-1]]&/@(x=#)&
Masih tidak yakin itu optimal tetapi menghemat 17 byte.05AB1E,
118 bytePenjelasan
Cobalah online
sumber
Pyth , 8 byte
Suite uji.
Terjemahan jawaban El dengan Python .
sumber
Erlang, 69 byte
Fungsi tingkat tinggi Erlang untuk daftar tidak menerima indeks elemen saat ini. Ini menggunakan kamus proses untuk mengatur indeks elemen saat ini.
sumber
Pyke,
127 byteCoba di sini!
sumber
VBA, 160 byte
sumber
Pyth, 6 byte
Suite uji
Ini adalah solusi yang berbeda dari yang lain sejauh ini. Itu loop atas input, mengiris menjumlahkan nilai awal, kemudian menghapus elemen pertama dari input yang disimpan, dan ulangi.
Penjelasan:
sumber
Julia, 39 byte
Cobalah online!
sumber
F #,
8482 bytesumber
JavaScript (ES6) - 79 Bytes
Solusi rekursif yang tidak menggunakan metode Array:
Pengujian:
sumber
C #, 89 byte
cukup lurus ke depan
ide perbaikan dihargai
sumber
Brachylog , 27 byte
Cobalah online! atau verifikasi semua kasus uji .
Penjelasan
sumber
Dyalog APL, 15 byte
atau
sumber
Program PHP, 72 Bytes
telepon dengan
php-cgi -f <filename> 'a[]=3&a[]=2&a[]=4...
+11 sebagai fungsi:
+9 tanpa bawaan:
($ c menyimpan nilai asli, $ a menghitung mundur untuk setiap indeks, $ r mendapatkan jumlah)
-3 sebagai program:
sumber
q (37 byte)
Contoh:
sumber
Matricks , 25 byte
Yay, akhirnya tantangan aku tidak butuh fitur baru!
Jalankan dengan:
python matricks.py substring.txt [[<input>]] 0
Penjelasan:
sumber
Javascript (menggunakan Perpustakaan Eksternal) (66 byte)
Tautan ke lib: https://github.com/mvegh1/Enumerable
Penjelasan kode: _.Dari memuat array input ke perpustakaan, yang pada dasarnya adalah LINQ untuk js. Kemudian setiap item dalam array dipetakan sesuai dengan predikat berikut: Ambil input, dan potong dari indeks item saat ini dan ambil indeks itu ditambah nilai item saat ini. Kemudian jumlahkan urutan berikutnya. Konversi hasilnya ke array JS asli dan kembalikan
sumber
var
dari variabel, Anda tidak perlu itu dalam golf. Anda juga dapat mengubah.forEach
ke.map
mana biaya lebih sedikit byte.Clojure, 63 byte
Menggunakan pencocokan pola untuk menguraikan argumen input menjadi argumen pertama dan selanjutnya.
sumber
MATL ,
171413 bytePenjelasan
Cobalah online! Atau verifikasi semua kasus uji (kode dimodifikasi untuk menangani beberapa input).
sumber
C #, 94 byte
Di mana a adalah int [] yang mewakili input yang harus dipecahkan.
sumber