Seseorang memberi kami string, tetapi semua karakter seperti braket telah diubah menjadi yang normal, dan kami tidak tahu yang mana, atau bahkan berapa banyak. Yang kita tahu adalah bahwa jika L1,L2,L3,...,LN
ada berbagai jenis kurung kiri dan R1,R2,R3,...,RN
berbagai jenis kurung kanan yang berbeda, semuanya berbeda (2N karakter kurung berbeda), sebuah string akan valid jika itu salah satu (+ adalah penggabungan string normal):
L1+X+R1
,,L2+X+R2
...LN+X+RN
,, di manaX
string yang valid,X+Y
, di manaX
danY
adalah string yang valid,Setiap karakter tunggal yang bukan karakter braket.
String kosong
Kami tahu mereka mulai dengan string yang valid sebelum mereka mengubah tanda kurung, dan mereka tidak mengubahnya menjadi karakter apa pun yang sudah ada di string. Setidaknya ada satu pasangan untuk masing-masing braket. Bisakah Anda merekonstruksi karakter mana yang awalnya kiri dan kanan pasang braket (temukan Li
dan Ri
ikuti syarat yang diberikan)?
Keluarkan pasangan karakter yang merupakan tanda kurung. Misalnya, jika (){}[]
benar-benar braket karakter, Anda mungkin keluaran (){}[]
atau {}[]()
atau [](){}
, dll Mungkin ada beberapa cara untuk melakukan ini untuk string, Anda hanya perlu untuk kembali satu sehingga tidak ada braket tugas dengan lebih pasang (lihat contoh). Perhatikan bahwa string keluaran harus selalu memiliki panjang genap.
Contoh:
abcc
- c
tidak bisa menjadi braket, karena tidak ada karakter lain dengan dua kejadian, tetapi ab
bisa menjadi pasangan braket, sehingga Anda akan menampilkan dengan tepat ab
.
fffff
- string apa pun dengan paling banyak satu karakter tidak dapat memiliki tanda kurung, jadi Anda akan mengembalikan string kosong atau tidak menghasilkan apa-apa.
aedbedebdcecdec
- string ini tidak dapat memiliki tanda kurung karena ada 1 a, 2 bs, 3 cs, 4 ds, dan 5 es, jadi tidak ada dua karakter yang muncul dalam jumlah yang sama, yang merupakan persyaratan untuk memiliki tanda kurung.
abcd
- mungkin tugas yang ab
, cd
, abcd
, cdab
, adbc
, bcad
, ac
, ad
, bc
dan bd
, (serta tugas kosong, yang semua dari mereka memiliki), tetapi Anda harus kembali salah satu tugas terpanjang, sehingga Anda harus kembali abcd
, cdab
, adbc
, atau bcad
.
aabbcc
, abc
- tersebut keduanya memiliki ab
, ac
, dan bc
sebagai pasangan yang sah. Anda harus mengembalikan salah satu dari pasangan ini, tidak masalah yang mana.
abbac
- a dan b memiliki jumlah karakter yang sama, tetapi mereka tidak dapat benar-benar bekerja, karena salah satunya terjadi di kiri dan kanan semua kejadian yang lain. Kembalikan apa-apa.
aabcdb
- cd
dan ab
merupakan dua pasangan braket yang tepat, sehingga menghasilkan salah satu cdab
atau abcd
.
abcdacbd
- hanya satu pasangan dapat dicapai sekaligus, tapi ab
, ac
, bd
, cd
, dan ad
semua dari pasangan yang mungkin Anda dapat kembali. Tidak peduli pasangan mana yang Anda pilih, itu memiliki contoh di mana satu karakter lain di dalamnya, yang melarang pasangan lain, kecuali dalam kasus ad
, di mana pasangan lain bc
dan cb
tidak mungkin sendiri, jadi tidak mungkin dengan ad
.
Ini adalah kode golf, jadi kode terpendek dalam byte menang. Masukan dari STDIN jika memungkinkan untuk bahasa Anda. Jika tidak memungkinkan, tunjukkan metode input dalam jawaban Anda.
sumber
abcd
, outputadbc
juga dapat diterima, bukan?Jawaban:
Ruby, 373 byte
Ini menggunakan versi parser stack yang di-golf di sini .
Ini mungkin dapat disederhanakan lebih lanjut, tetapi saya tidak berpikir otak saya dapat menangani lagi.
Semua kasus uji: http://ideone.com/gcqDkK
Dengan spasi putih: http://ideone.com/pLrsHg
Tidak berkelompok (kebanyakan): http://ideone.com/oM5gKX
sumber