Brain-flak berusia satu tahun besok! Untuk menghormati hari ulang tahunnya, kami mengadakan pesta ulang tahun gaya PPCG, di mana beberapa pengguna mengirim pertanyaan yang berhubungan dengan otak! Bantu kami merayakan! :)
Brain-flak adalah bahasa esoteris yang saya tulis di mana semua perintah adalah tanda kurung dan semua tanda kurung harus sepenuhnya cocok. Untuk meminjam definisi saya sendiri :
Untuk tujuan tantangan ini, "braket" adalah salah satu karakter:
()[]{}<>
.Sepasang tanda kurung dianggap "cocok" jika tanda kurung buka dan tutup berada dalam urutan yang benar dan tidak memiliki karakter di dalamnya, seperti
() []{}
Atau jika setiap subelemen di dalamnya juga cocok.
[()()()()] {<[]>} (()())
Subelemen juga dapat disarungkan beberapa lapisan.
[(){<><>[()]}<>()] <[{((()))}]>
Sebuah string dianggap "Sepenuhnya cocok" jika dan hanya jika:
Setiap karakter adalah braket,
Setiap pasangan braket memiliki braket pembuka dan penutup yang benar dan dalam urutan yang benar
Dalam perayaan ulang tahun pertama brain-flak, tantangan hari ini adalah tentang mengambil satu set kurung yang tidak seimbang, dan menentukan jenis operasi apa yang diperlukan untuk menjadikannya brain-flak yang valid.
Sebagai contoh,
((
ini bukan kode brain-flak yang valid, tetapi jika kita menambahkannya))
, ia menjadi(())
, yang sepenuhnya seimbang, dan karenanya valid-brain flak. Itu membuat input ini dapat ditambahkan .Demikian pula,
>}
ini tidak valid, tetapi kita bisa{<
membuatnya{<>}
, yang valid. Itu membuat input ini dapat diandalkan .Beberapa input sedikit lebih rumit. Misalnya,
)][({
tidak dapat dibuat valid murni dengan menambahkan atau menambahkan. Tapi itu bisa dibuat valid dengan menambahkan[(
dan menambahkan})]
. Oleh karena itu, input ini bersifat prependable dan appendable .Terakhir, beberapa input tidak pernah dapat dibuat kode brain-flak yang valid dengan kombinasi penambahan atau penambahan. Misalnya,
(>
tidak pernah dapat dibuat valid. (Menciptakan<
menciptakan<(>
, dan menambahkan)
membuat(>)
, tidak ada yang valid) Oleh karena itu, input ini tidak dapat ditambahkan atau tidak dapat ditambahkan.
Untuk tantangan hari ini, Anda harus menulis sebuah program atau fungsi yang mengambil string tanda kurung dan menentukan apakah string tersebut
appendable
prependable
both
neither
Anda dapat memilih nilai apa yang Anda gunakan untuk mewakili untuk setiap kasus. Sebagai contoh, keluaran 1, 2, 3, 4
, atau 'a', 'p', 'b', 'n'
, atau 1, 'foo', 3.1415, -17
, atau apa pun baik-baik saja. Selama setiap output berbeda dan konsisten , itu bagus. Namun Anda harus secara jelas menentukan output mana yang sesuai dengan kasus mana.
Anda dapat mengembalikan nilai ini dalam format apa pun yang paling nyaman (misalnya, kembali dari suatu fungsi, mencetak ke STDOUT, mengubah argumen, menulis ke file, dll.).
Anda dapat mengasumsikan bahwa input tidak akan pernah valid atau kosong.
Contohnya
Input berikut semuanya dapat dipertanggungjawabkan :
))
(((()()())))}
)>}]
()[]{}<>)
Ini semua bisa ditambahkan :
(({}{})
((((
([]()())(
{<<{
Ini semua adalah keduanya :
))((
>()[(()){
>{
Dan ini bukan keduanya :
)(}
{(((()()()))>
[}
((((((((((>
((((((((((<>()]
Seperti biasa, ini adalah kode-golf , jadi celah standar berlaku, dan jawaban terpendek dalam byte menang!
Tantangan ini terutama sulit di otak-serpihan, sehingga brownies maksimum menunjuk ke setiap dan setiap jawaban yang ditulis dalam otak-serpihan. :)
sumber
maximum brownie points
Saya pikir bahwa menawarkan poin brownies dan cookie maksimum sebagai gantinya akan mendorong Brain-Flaking tantangan ini lebih dari sekedar poin brownies, karena saya tidak berpikir itu sepele sama sekali dalam bahasa apa pun , apalagi Brain-Flak. : P][
ini tidak appendable, karena tidak ada Anda dapat menambahkan dapat membuatnya berlaku. Demikian pula, itu tidak dapat dipertanggungjawabkan. Ini ... 'dapat dimasukkan'! Anda dapat memasukkannya ke dalam string untuk membuat seluruh Brainflak valid.You can assume that the input will never be valid brain-flak or empty.
Jawaban:
Jelly ,
33 32 37 3534 bytebug ditemukan, memperbaiki +5 byte, memperbaiki lebih baik - 2 byte, menggunakan trik dari Adnan yang saya lihat di sini untuk -1 lebih.
Nilai pengembalian:
(Input tidak valid mengembalikan hasil palsu, meskipun Brain-flack valid, kembali
[]
.)Cobalah online! - test suite (mencetak representasi bubur, jadi
20
untuk[2,0]
, dan mengabaikan garis yang mengandung-
).sumber
Retina ,
414041 byte1 byte disimpan berkat @MartinEnder
Cobalah online!
1
0
10
01
Suntingan
sumber
[]})>]
menghemat satu byte.(][)
. Saya pikir itu bisa diperbaiki dengan biaya satu byte dengan mengubah101
ke...+
.Both
seperti itu juga10
hanya kombinasi yang valid untukBoth
.Batch, 337 byte
Output
]
untuk prepend,[
untuk append,][
untuk keduanya,[]
untuk keduanya.sumber
Haskell ,
115108 byteEDIT:
Cobalah online!
Gunakan like
(""#) "))"
. Hasil diberikan sebagai:Bagaimana itu bekerja
s#d
mem-parsing string yang tersisad
, diberi string / tumpukans
tanda kurung penutup yang diharapkan.s#""
cek baris jika semua tanda kurung penutup telah ditemukan pada akhir string, jika tidak menambahkan diperlukan.s#(c:d)
memeriksa apakah karakter berikutnyac
adalah braket pembuka, dan jika demikian meninggalkan braket penutup yang sesuai pada tumpukan untuk rekursi.sumber
Japt , 44 byte
Output
1
untuk prependable,3
untuk appendable,13
untuk keduanya, dan31
untuk keduanya.Uji secara online! atau Verifikasi semua kasus uji sekaligus.
Bagaimana itu bekerja
sumber
PHP, 137 Bytes
1 => dapat ditambahkan,
2 => dapat dipertanggungjawabkan,
12 => keduanya,
0 => keduanya
Testcases
sumber