pengantar
Untuk contoh ini, mari kita ambil string Hello, World!
dan array [3, 2, 3]
. Untuk menemukan rantai substring, kami melalui proses berikut:
Angka pertama array adalah 3
, jadi kami mendapatkan substring [0 - 3]
, yaitu Hel
. Setelah itu, kami menghapus 3
karakter pertama dari string awal, yang menyisakan kami lo, World!
.
Angka kedua dari array adalah 2
, jadi kita mendapatkan substring [0 - 2]
dari string baru kita, yang memberi kita lo
. String sisa menjadi , World!
.
Angka terakhir adalah a 3
, yang memberi kita , W
. The chain substring adalah semua substring gabungan, yang memberi kami:
['Hel', 'lo', ', W']
Untuk contoh yang lebih visual:
[3, 2, 3], 'Hello, World!'
3 -> Hel
2 -> lo
3 -> , W
Tugas
Mengingat sebuah non-kosong string yang dan sebuah non-kosong array yang hanya terdiri dari bilangan bulat positif ( > 0
), output rantai substring . Anda dapat mengasumsikan bahwa jumlah semua bilangan bulat dalam array tidak melebihi panjang string.
Anda juga dapat mengasumsikan bahwa string tidak akan pernah mengandung baris baru.
Uji kasus
Input: abcdefghijk, [2, 1, 3]
Output: ['ab', 'c', 'def']
Input: Code Golf, [4, 1]
Output: ['Code', ' ']
Input: Ayyy, [3]
Output: ['Ayy']
Input: lexicographically, [2, 2, 2, 7, 4]
Output: ['le', 'xi', 'co', 'graphic', 'ally']
Ini adalah kode-golf , jadi pengiriman dengan jumlah byte terkecil menang!
Python 2, 42 byte
Terkadang Anda melakukannya dengan cara yang membosankan.
sumber
Brachylog ,
2013 byteCobalah online!
Ini sangat tidak efisien dan waktu habis pada TIO untuk test case terakhir.
Penjelasan
Versi yang sedikit lebih efisien, 15 byte
sumber
Python 3, 45 byte
Ini mencetak satu substring per baris dan berakhir dengan kesalahan ketika a habis.
Mengujinya pada repl.it .
sumber
Python,
52, 46 byteFungsi lambda rekursif.
Terima kasih kepada Dennis karena telah memangkas 6 byte!
sumber
Jelly , 6 byte
Cobalah online!
sumber
Haskell, 34 byte
Contoh penggunaan:
"lexicographically" # [2,2,2,7,4]
->["le","xi","co","graphic","ally"]
Rekursi sederhana.
Atau solusi 29 byte yang membosankan melalui built-in:
sumber
Ruby, 26 byte
String direpresentasikan sebagai array karakter.
sumber
PowerShell v2 +, 46 byte
Mengambil input string
$a
dan array$b
, lilitkan$b
. Setiap iterasi, melakukan irisan array$a
berdasarkan$i
(default ke$null
, atau0
) dan nomor saat ini. Perlu melakukan-1
dan$i++
karena string di PowerShell diindeks nol.Contohnya
(Output di sini dipisahkan oleh ruang, karena itulah metode stringifikasi default untuk array)
sumber
Perl, 28 byte
Termasuk +1 untuk
-n
Jalankan dengan string input pada STDIN diikuti oleh setiap nomor pada baris yang terpisah:
Hanya kode:
Versi 23 byte tanpa
||"^"
juga semacam karya, tetapi mencetak baris trailing palsu palsu"^"
dapat diganti dengan$_
jika string tidak mengandung karakter meta regexsumber
MATL , 8 byte
Cobalah online!
Penjelasan
sumber
JavaScript (ES6),
393835 byteDisimpan 3 byte berkat produk ETH:
Contoh:
Solusi sebelumnya:
38 byte berkat Huntro:
39 byte:
sumber
.slice
menghemat beberapa byte:s=>a=>a.map(v=>s.slice(t,t+=v),t=0)
Batch, 74 byte
Saya mengalahkan C? Ini tidak mungkin benar! Mengambil string pada STDIN dan array sebagai argumen baris perintah.
sumber
Java, 119 Bytes
Golf:
Saya mengubah jawaban Roman Gräf ( /codegolf//a/93992/59935 ), tetapi saya tidak punya cukup perwakilan untuk berkomentar.
Saya mengubah implementasi loop dan bukannya mengatur string sumber ke substring lain di setiap iterasi, saya hanya mengubah indeks yang saya dapatkan substring.
sumber
Pyke, 10 byte
Coba di sini!
sumber
sed (82 + 2 untuk -rn) 84
Baris input pertama adalah string. Kemudian setiap baris setelah itu adalah ukuran substring di unary .
Contoh:
sumber
CJam , 11 byte
Cobalah online!
Penjelasan
sumber
C, 81 byte
Karena
write()
output tidak buffered, kompiler online mana pun akan kesulitan mengeluarkan ini.test.c :
Output tanpa perpipaan:
sumber
PHP, 98 Bytes
Pemakaian:
Keluaran:
Mungkin ada solusi yang lebih baik dengan PHP.
sumber
PHP, 82 Bytes
Mengambil input sebagai string dan kemudian daftar angka, output dipisahkan oleh baris baru. misalnya
Jika Anda salah satu dari orang-orang yang dapat menggunakan $ argv dengan -r Anda dapat menyimpan 6 byte yang digunakan untuk tag pembuka.
sumber
$argv[++$i]
. Kenapa tidak$argv[1]
dan$argv[2]
?$argv[2]
karena kita perlu mengulangi argumen yang sudah ada dan ini adalah$argv[++$i]
pertama kalinya untuk menghindari kebutuhan untuk,$i=1
dan karenanya menghemat 2 byte.PHP, 63 Bytes
Output sebagai Array 85 Bytes
sumber
Pyth, 7 byte
Mengambil input yang dipisahkan oleh baris baru, dengan string tidak terhapus dan datang setelah array. Cobalah secara Online!
Penjelasan:
sumber
Oktaf / MATLAB, 31 byte
Ini adalah fungsi anonim dengan input
s
: string;a
: array numerik.Cobalah di Ideone .
Penjelasan
Ini adalah port dari jawaban MATL saya.
sumber
Java 142 byte
Golf:
sumber
Awk, 36 karakter
Contoh dijalankan:
Dalam kehidupan nyata saya akan menggunakannya seperti ini, hanya tidak tahu bagaimana menghitung nilainya:
sumber
Dyalog APL 16.0, 15 karakter (tidak bersaing); 15.0, 17 byte
Solusi 16.0
Dyalog APL 16.0 menambahkan primitif partisi APL2
⊂
,, dengan mesin terbang⊆
.Solusi 15.0:
TryAPL online!
sumber
GNU sed, 55 + 2 (rn flags) = 57 byte
Cobalah online! (terima kasih kepada @Dennis karena menambahkan sed)
Penjelasan: String input harus berada pada baris pertama dan angka-angka, secara unary , pada baris yang terpisah setelah itu. Baris baru dibaca secara implisit pada awal siklus, menjalankan skrip setiap kali.
Uji coba: menggunakan dokumen di sini dengan EOF sebagai penanda akhir
Keluaran:
sumber
Vimscript,
7978 bytetidak terlalu cantik, saya yakin itu bisa diperbaiki ...
Mengambil buffer vim, lalu menelepon
echom string(A([2,3]))
untuk melihat hasilnyaSaya benar-benar berpikir untuk menipu dan menghasilkan string
["abc", "def"]
... Tapi saya menolak: PPenjelasan: Hapus (masukkan dalam daftar default) setiap array item jumlah karakter dan menambahkannya ke array
r
... Jawaban yang memang membosankan.sumber
Common Lisp,
7876 byteDengan asumsi fungsi anonim diperbolehkan:
Pemakaian
Keluaran
-2 byte dengan menggunakan
as
alih-alihand
dan mengubah definisi y agar sesuai dengan tanda kurung antara dua variabel dalam(subseq ...)
sumber
Rebol, 38 byte
sumber