Tanda kurung pada keyboard saya sudah usang, dan saya ingin menghindari menggunakannya sebanyak mungkin. Tantangan Anda adalah menyeimbangkan garis yang mengandung tanda kurung dengan menambahkannya sebelum dan sesudah setiap baris.
Ini mirip dengan kurung otomatis TI-Basic dan penutupan string (yaitu Output(1, 1, "Hello, World!
). Ini juga menghemat byte berharga dari suatu program!
Input contoh:
This line has no parentheses
alert(Math.max(1, 2
1+1)*2).toString()
function() { alert('Hello, World!'); })(
Contoh (mungkin) keluaran:
This line has no parentheses
alert(Math.max(1, 2))
((1+1)*2).toString()
(function() { alert('Hello, World!'); })()
Spesifikasi:
Untuk setiap jalur input,
Tambahkan sebanyak mungkin tanda kurung ke awal dan tutup tanda kurung ke akhir baris sesuai kebutuhan untuk menyeimbangkan tanda kurung di baris
Definisi "keseimbangan" adalah:
Jumlah yang sama
(
dan)
sesuaiUntuk setiap substring mulai dari awal string, substring ini tidak boleh memiliki lebih banyak kurung tutup daripada membuka tanda kurung
- Misalnya,
(foo))(bar
tidak seimbang karena(foo))
memiliki lebih banyak kurung tutup daripada membuka kurung
- Misalnya,
Anda dapat menambahkan tanda kurung tambahan yang tidak perlu jika Anda mau, jika itu membuat kode Anda lebih pendek
Anda tidak perlu khawatir tentang string literal atau semacamnya, asumsikan bahwa semua tanda kurung perlu diseimbangkan
Keluarkan setiap baris dengan tanda kurung seimbang
Ini adalah kode-golf , jadi kode terpendek dalam byte akan menang!
sumber
()
parens, atau melakukan kurung lainnya{}
,[]
,<>
, dll perlu dipertimbangkan juga?(
dan)
.Jawaban:
GolfScript, 23 byte
Celah yang saya eksploitasi adalah aturan bahwa:
Pada dasarnya, untuk setiap baris, kode ini menghitung jumlah karakter pada baris yang tidak membuka tanda kurung, dan menambahkan banyak tanda kurung pembuka tambahan ke baris, dan kemudian melakukan hal yang sama untuk menutup tanda kurung. Ini sangat tidak efisien, tetapi memastikan bahwa semua tanda kurung pada garis keluaran seimbang.
Misalnya, diberi input:
program ini akan menampilkan:
Ps. Anda juga bisa menguji kode ini secara online .
sumber
Perl, 32 = 31 + 1 atau 73 = 72 + 1 (kurung diminimalkan)
32 = 31 + 1: dengan kurung tambahan yang tidak perlu
Suntingan:
y///
.$a
dihapus.Ini digunakan dengan saklar run-time
-p
(+1 byte).File uji
input.txt
:Garis komando:
atau
Hasil:
Tidak Disatukan:
Algoritma ini sederhana, cukup tambahkan rekanan untuk setiap kurung yang ditemukan.
73 = 72 +1: menambah jumlah kurung minimum
Skrip ini hanya menambahkan jumlah tanda kurung minimum untuk mendapatkan hasil yang seimbang.
Ini digunakan dengan sakelar run-time
-p
(+1 byte).Hasil:
Tidak Disatukan:
81 = 80 + 1: menambahkan jumlah kurung minimum
Ini adalah metode yang lebih lama untuk menambahkan jumlah kurung minimum untuk hasil yang seimbang.
Ini menggunakan Perl 5.14 (karena pengubah substitusi non-destruktif) dan saklar run-time
-p
(+1 byte).Hasil:
Tidak Disatukan:
sumber
'('x/\)/g
selalu sama dengan '(' ...y///
alih-alihm//g
untuk menghitung tanda kurung.Python
2.73:626058 byteBukan super golf, tapi Anda tahu. Saya mungkin dapat memeras beberapa byte lagi jika saya benar-benar mencoba.
Untuk setiap baris, output
(
* jumlah)
dalam baris, lalu baris, kemudian)
* jumlah(
di baris. Jika saya memahami aturan dengan benar, ini akan selalu memberikan hasil yang valid.Keluar dengan melemparkan pengecualian, sebagai hasil dari cara saya melakukan input. (Input selalu merupakan bagian yang sulit dari masalah ini.) Jika ini tidak dapat diterima, saya akan perlu beberapa byte untuk memperbaikinya, meskipun saya belum yakin berapa banyak.
Contoh output:
sumber
python2 balanced_parenthesis.py < input.txt 2>/dev/null
mendapatkan output yang saya tulis tetapi jika Anda ingin input multiline saat melakukannya secara interaktif akan dikenakan biaya beberapa byte. Beri aku waktu sebentar, aku akan memikirkan sesuatu ...while 1:s=raw_input();c=s.count;print'('*c(')')+s+')'*c('(')
c=s.count
. Saya pikir Anda harus melakukanc=s
,s.c()
. Terima kasih!Bash Murni, 72 byte
Menggunakan algoritme yang sama dengan jawaban @ undergroundmonorail:
Keluaran:
sumber