Anda akan diberikan string s
. Dijamin bahwa string memiliki sama dan setidaknya satu [
s dan ]
s. Juga dijamin bahwa tanda kurung seimbang. String juga dapat memiliki karakter lain.
Tujuannya adalah untuk menampilkan / mengembalikan daftar tupel atau daftar daftar yang berisi indeks masing-masing [
dan ]
pasangan.
Catatan: String diindeks nol.
Contoh:
!^45sdfd[hello world[[djfut]%%357]sr[jf]s][srtdg][]
harus kembali
[(8, 41), (20, 33), (21, 27), (36, 39), (42, 48), (49, 50)]
atau sesuatu yang setara dengan ini. Tuple tidak perlu. Daftar juga dapat digunakan.
Kasus uji:
input:[[asdf][][td([)ty54g% ]hg[[f]u][f[[jhg][gfd]sdf]sdfs]ghd]fr43f]
output:[(0, 62),(1, 6), (7, 8), (9, 56), (13, 22), (25, 30), (26, 28), (31, 52), (33, 47), (34, 38), (39, 43)]
input:[[][][][]][[][][][[[[(]]]]]))
output:[(0, 9), (1, 2), (3, 4), (5, 6), (7, 8), (10,26),(11, 12), (13, 14), (15, 16), (17, 25), (18, 24), (19, 23), (20, 22)]
input:[][][[]]
output:[(0, 1), (2, 3), (4, 7), (5, 6)]
input:[[[[[asd]as]sd]df]fgf][][]
output:[(0, 21), (1, 17), (2, 14), (3, 11), (4, 8), (22, 23), (24, 25)]
input:[]
output:[(0,1)]
input:[[(])]
output:[(0, 5), (1, 3)]
Ini adalah kode-golf , jadi kode terpendek dalam byte untuk setiap bahasa pemrograman menang.
code-golf
string
balanced-string
Cookie Kincir Angin
sumber
sumber
Jawaban:
Brain-Flak Classic , 108 byte
Cobalah online!
Menyimpan setiap pembukaan
[
di tumpukan yang tepat, dan menghasilkan setiap kali kita menekan a]
.sumber
Python 2 , 74 byte
Cobalah online!
sumber
JavaScript,
6962 byteSedikit golf cepat di kereta pulang. Mungkin bisa ditingkatkan.
Mengambil input sebagai array karakter dan menampilkan objek dengan tombol menjadi indeks
[
s dan nilainya menjadi indeks]
s yang sesuai .Cobalah online
sumber
Haskell ,
9279 byteCobalah online!
Penjelasan
Kami membuat fungsi
g
yang membutuhkan 3 argumen.a
, yang merupakan lokasi dari semua[
s yang tidak cocok.n
, yang merupakan jumlah karakter yang diprosesx
yang merupakan karakter yang belum diproses.Jika karakter pertama
]
kita adalah kita hapusu
dari depan kitaa
dan kembali(u,n)
ditambah apa pun yang tersisa.Jika karakter pertama kita tidak
]
, itu salah satu[
atau yang lain, kita menambahn
dan menambahkan[n|s=='[']
ke depana
.[n|s=='[']
akan[n]
jikas=='['
dan[]
sebaliknya.Jika kita kehabisan karakter, kita mengembalikan daftar kosong.
sumber
Java 10, 95 byte
Void lambda mengambil string input sebagai
int[]
titik kode Unicode.Cobalah secara Online
Tidak disatukan
Ucapan Terima Kasih
sumber
r
danw
sebagai bagian dari kode, bukan sebagai parameter:s->{int r=0,w=0;...}
.vim, 89 byte
Beranotasi
<C-V>
adalah 0x16.<C-M>
adalah 0x0d.<C-X>
adalah 0x18.Cobalah online!
sumber
QBasic (QB64),
137127112 byteKami membutuhkan
empatdua byte karena tantangannya memerlukan pengindeksan 0. Posting QBasic pertama saya, umpan balik dihargai.\r\n
->\n
)Sepertinya ini ketika dieksekusi:
sumber
?
alih-alihprint
(kompilator secara otomatis memperluas ini keprint
), Anda tidak perlu spasi di antara string yang dikutip danTHEN
diIF
s, dan Anda dapat menghapusi
setelahnyaNEXT
.0
danto
? Saya bingung ...if c$="["
bisa menjadiif"["=c$
,elseif c$="]"
bisa menjadielseif"]"=c$
,end if
bisa menjadiendif
, dan, dengan sedikit perubahan dalam output,?b(n),i
bisa menjadi?b(n)i
(QBasic 1.1 adalah apa yang saya gunakan, kasing Anda mungkin berbeda).?b(n)i
bekerjaPyth, 26 byte
Coba di sini
Penjelasan
sumber
C,x"[" MQ #.e*qb\[t+lhfSI/LT"[]"._>Q
,. Sunting: Saya berhasil bermain golf juga sedikit, saya sekarang di bawah 30.R ,
141 133 115 115 112108 byteCobalah online!
Tidak ada yang spesial. 1-diindeks, karena saya bilang begitu. R tidak benar-benar memiliki tumpukan, jadi saya awalnya digunakan
c
,head
dantail
untuk mendapatkan efek literal yang sama. Versi asli yang tidak dikelompokkan (pembaruan digunakanutf8ToInt
untuk menghapus beberapa byte, menggunakan awal vektor sebagai bagian atas tumpukan, dan menyalahgunakanT
danF
bawaan untuk menghindari menginisialisasi tumpukan.):sumber
T`` and
bawaan F`1:nchar(y)
lebih pendek dariseq_along(x)
. Solusi yang sangat bagus btw :)gregexpr
cara untuk pergi.22 28 22
bukan22 28 21
) mungkin (ab) penggunaan T / F tidak benar-benar aman: D. Ini lebih pendek dan sepertinya berfungsi -> Cobalah online!Keempat (gforth) , 75 byte
Cobalah online!
Menyalahgunakan tumpukan floating-point, tetapi memungkinkan menggunakan
do loop
karena kode tidak (secara manual) menyentuh tumpukan kembali.Penjelasan
[
, pasang stack floating point]
pop dari floating point stack dan output dengan posisi saat iniPenjelasan Kode
sumber
Retina , 36 byte
Cobalah online! Penjelasan:
Buat daftar dari hasil pertandingan.
Gunakan subtitusi berikut untuk menghasilkan daftar alih-alih yang cocok.
Izinkan kecocokan tumpang tindih.
Ini adalah aplikasi dari kelompok penyeimbang .NET. Ini
[
dicocokkan secara harfiah, maka karakter sebanyak mungkin dikonsumsi. Karena setiap[
pencocokan berikutnya , kecocokan ditambahkan ke$2
tumpukan. Jika tumpukan itu tidak kosong, kami dapat mencocokkan]
, menghapus kecocokan dari tumpukan. Kalau tidak, kami dapat mencocokkan apa pun yang bukan]
([
sudah cocok sebelumnya). Kecocokan berhenti ketika memenuhi pencocokan]
untuk[
, karena$2
tumpukan (sekarang) kosong pada saat itu.Substitusi terdiri dari dua variabel yang dipisahkan oleh koma. The
.
menunjukkan bahwa panjang variabel, daripada nilainya, digunakan. The>
menunjukkan bahwa variabel harus dievaluasi dalam hal pemisah kanan daripada pertandingan. The$`
variabel mengacu pada awalan pertandingan, yang berarti$.`
memberikan posisi[
; yang>
alter pengubah ini untuk awalan pemisah hak pertandingan, yang memberikan posisi yang cocok]
.sumber
Jelly ,
22 21 2019 byteTidak diragukan lagi dimungkinkan dalam Jelly dalam setengah jumlah byte ini: ...
Tautan monadik yang menerima daftar karakter yang mengembalikan daftar daftar bilangan bulat.
Sebagai program lengkap, ia menerima string dan mencetak representasi dari daftar tersebut.
Cobalah online!
Bagaimana?
sumber
œ¿
dan itu adalah kerabat tetapi tidak dapat menemukan solusi. Ini yang paling dekat yang saya dapatkan.SWI-Prolog 254 byte
Contoh:
sumber
C (gcc) , 87 byte
Cobalah online!
Penjelasan
Untuk melacak indeks string braket pembuka, string input ditimpa dan digunakan sebagai tumpukan.
Cobalah online!
sumber
Jelly , 20 byte
Cobalah online!
Ini memiliki efek samping pada register, berharap itu bisa berfungsi.
sumber
Japt v1.4.5, 23 byte
Cobalah online!
Dibongkar & Cara kerjanya
Outputnya adalah array yang diratakan dari
[closing index, opening index]
. Jika urutan terbalik tidak diinginkan, menambahkanw
pada akhirnya berhasil (+1 byte).sumber
Gangguan Umum, 95 byte
Versi panjang Tescetakan:
sumber
K (ngn / k) ,
3837 byteCobalah online!
{
}
berfungsi dengan argumenx
"[]"=\:x
dua daftar boolean untuk kejadian"["
dan"]"
a:
ditugaskan kepadaa
|/
boolean "atau" dari dua daftar&
di mana (di mana indeks) adalah tanda kurung?b:
ditugaskan kepadab
-/
daftar dengan 1 untuk"["
, -1 untuk"]"
, dan 0 di tempat lain+\
jumlah parsial|':
maxima berpasangan (masing-masing elemen max'ed dengan yang sebelumnya, elemen awal tetap sama)Ini mewakili kedalaman braket untuk setiap karakter. Kami mengindeksnya dengan
b
(penjajaran adalah pengindeksan) dan mendapatkan kedalaman braket hanya untuk kurung.=
"group by" - kamus pemetaan kedalaman ke indeks di mana mereka muncul,/
merangkai nilai-nilai dalam kamus, mengabaikan kunci0N 2#
membentuk kembali ke matriks 2-kolom (daftar daftar)b@
indeksb
dengan setiap elemen dari matrikssumber
Jelly ,
2018 byteDisimpan 1 byte berkat @ user202729 memberitahu saya bahwa
µ€
adalah)
Cobalah online!
Setelah bergulat dengan ini selama beberapa jam hanya untuk membuatnya bekerja ... Saya benar-benar terkejut bahwa ini singkat :-)
Penjelasan
sumber
CJam , 25 byte
Mengejutkan bersaing - hanya kalah dari Japt dan Jelly [ Sunting : dan Arang dan Stax :(]
Cobalah online!
Penjelasan
sumber
Python 2 , 109 byte
Cobalah online!
sumber
Pyth ,
2826 byteSuite uji.
Pada saat ini lebih panjang dari pendekatan Mnemonic, tapi saya merasa seperti saya bisa mengurangi ini sedikit dan ini untungnya juga tidak menggunakan struktur imperatif seperti Pythonically sepertiV
. Versi awal adalah 36 byte dan juga memiliki banyak bug.Bagaimana itu bekerja
sumber
{I#.e,t+lhfSI/LT`Y._>Q
aaalmost berfungsi untuk 22 byte ...Perl 5, 53 byte
Jalankan sebagai
perl -nE '<above code snippet>'
. Mengambil input melalui stdin.Seperti biasa, solusi Perl optimal untuk masalah ini adalah ekspresi reguler. Kami berusaha mencocokkan pasangan kurung yang tidak mengandung pasangan apa pun di dalamnya menggunakan kelas karakter yang tampak konyol (
s/\[[^][]*\]/.../
). Jika kecocokan berhasil, kami mengganti teks yang cocok dengan angka1
berulang-ulang sehingga kami tidak sengaja mencocokkan tanda kurung itu lagi, dan kami mencetak indeks kecocokan. Bilas dan ulangi.sumber
Stax , 13 byte
Jalankan dan debug itu
Ia menggunakan tumpukan input untuk melacak pasangan kurung terbuka. Inilah programnya membongkar, tidak berkhasiat, dan berkomentar.
Jalankan yang ini
sumber
Arang , 20 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Lingkarkan rentang implisit dari panjang string input.
Aktifkan karakter saat ini.
Jika a
[
maka dorong indeks saat ini ke variabel array yang telah ditetapkan.Jika a
]
maka pop indeks terbaru dari variabel array dan cetak dan indeks saat ini dipisahkan oleh koma dan mulai baris baru. Format output alternatif, jika dapat diterima, akan menghemat beberapa byte:]I⟦⊟υιω
menghemat 2 byte tetapi mencetak setiap indeks pada baris yang terpisah, dengan spasi ganda pada pasangan indeks;]I⟦⊟υι
cukup cetak indeks pada baris yang berbeda, sehingga sulit untuk membedakannya.sumber