Anda akan diberi string (mungkin kosong) yang berisi tanda kurung ( [{()}]
) dan karakter lainnya ( A
- Z
, a
- z
, 0
- 9
, tanda baca). Anda perlu memeriksa apakah mematuhi aturan berikut:
- Karakter non-braket diabaikan.
- Setiap braket terbuka
[{(
memiliki braket penutup)}]
. Jadi[](
tidak diijinkan. - Kurung bersarang dengan benar.
[(])
tidak diizinkan. - Kurung keriting tidak dapat berisi kurung kotak di dalamnya. Kurung sederhana tidak bisa mengandung kurung keriting atau bujur sangkar di dalamnya. Jadi
[({})]
,[{[]}]
dan({})
tidak diijinkan. Kurung dapat disarangkan dengan kurung serupa, jadi[[{((()))}{{(())}}]()]{()}
diizinkan.
Output adalah nilai kebenaran / falsey tunggal sesuai pilihan Anda.
Kode terpendek menang.
Uji kasus
b[[a{(/)}(())+={{}-}],]
-> Valid
([h][e][l][l][o])
-> Tidak Valid
[///[{(\/(arg()))}1{{((-)-2)}}]()]{()}
-> Valid
hi
-> Valid
code-golf
string
decision-problem
balanced-string
ghosts_in_the_code
sumber
sumber
Jawaban:
Retina , 84 byte
Cobalah online.
Ini adalah ekstensi yang cukup lurus ke depan (tetapi golf) dari .NET kurung dasar memeriksa .NET regex .
Meskipun ini sangat mungkin dengan kelompok penyeimbang, rekursi Perl pasti memiliki keunggulan di sini . Namun, kedua pendekatan tersebut dikalahkan dengan membuang keanggunan pertandingan regex tunggal demi mengurangi input secara bertahap melalui penggantian yang berulang, seperti yang dijawab Digital Trauma . Ini dapat diimplementasikan dalam 34 byte di Retina, tapi saya ragu untuk memposting kode sendiri, karena saya tidak datang dengan ide.
sumber
Retina, 34
Pertama, kredit yang harus dibayar:
Saya secara mandiri (nanti) datang dengan pendekatan yang sama di sed , jadi saya harap saya tidak menginjak-injak jari kaki ( besar atau sebaliknya) dengan memposting ini:
Jadi sekarang dengan
sudo apt-get install mono-complete
dangit clone https://github.com/mbuettner/retina.git
saya memiliki retina yang berfungsi pada VM Ubuntu saya. Inilah hasil tesnya:sumber
Sed, 53
Di sini saya mengklaim itu sejak itu
sed
tidak benar-benar memiliki konsep kebenaran / falsey, maka saya mendefinisikan string kosong untuk berarti kebenaran dan semua string lainnya berarti falsey.Jika itu tidak dapat diterima, maka kita dapat menambahkan beberapa baris, dengan demikian:
Sed, 66
Ini menghasilkan 0 untuk false dan 1 untuk true.
sumber
0
atau1
). Saya tidak bisa mengatakan siapa yang mempostingnya, tetapi mungkin Anda berdua.CJam,
2726 byteIni mencetak 1 (benar) atau 0 (salah). Cobalah online! atau verifikasi semua kasus uji.
Bagaimana itu bekerja
sumber
𝔼𝕊𝕄𝕚𝕟, 43 karakter / 62 byte
Try it here (Firefox only).
Nggak.
Namun, jika saya menggunakan fitur yang baru diimplementasikan, saya bisa turun ke 28 karakter / 47 byte:
sumber
Japt ,
4237 byteDisimpan 5 byte dengan fitur yang saya tidak sadari bahasa saya miliki ... Terima kasih telah menambahkannya, @Downgoat!
Japt benar-benar membutuhkan dukungan RegExp yang lebih baik ...
Cobalah online!
Bagaimana itu bekerja
sumber
C99,
226208207 BytesIni adalah pertama kalinya saya mencoba bermain golf
Dapat dibaca:
Ada buffer overflow tetapi tampaknya tidak mempengaruhi apa pun - saya percaya ini karena perataan.
sumber
char* s
Perl, 50 + 1 = 51 byte
Membutuhkan
-p
bendera dan cetakan1
untuk hasil yang benar dan tidak ada yang palsu. Saya menghitung-p
sebagai satu, karena dapat dikombinasikan dengan-e
:Kode ini pada dasarnya hanya pencocokan regex biasa terhadap input, menggunakan fitur regex rekursif bagus Perl.
Terima kasih untuk Dennis yang telah membantu saya menguji ini dan bermain golf di boiler boiler.
sumber
Python 3: 120 byte
Membangun pada jawaban @ Adnan , terbukti lebih pendek untuk digunakan:
sumber
Python 3,
196170160154 byteSangat canggung, terima kasih kepada Mego karena telah menghemat 6 byte:
sumber