Tantangan
Diberikan regex yang valid, hasilkan regex yang cocok dengan rangkaian string yang sama, tetapi dibalik.
Tugas
Tantangan ini menggunakan sebagian besar operasi regex dasar: ^
, $
, ?
, +
, *
, []
, {}
, |
. Tidak ada yang namanya kelompok tangkap atau hal rumit lainnya. Karakter khusus dapat lolos.
Contoh Input / Output
Catatan: Input yang tidak valid tidak akan pernah diberikan, dan umumnya ada beberapa kemungkinan jawaban untuk input yang diberikan!
Input | Sample Output
-----------|-------------
abc | cba
tuv? | v?ut
a(b|c) | (c|b)a
1[23] | [23]1
a([bc]|cd) | (dc|[bc])a
^a[^bc]d$ | ^d[^bc]a$
x[yz]{1,2} | [yz]{1,2}x
p{2} | p{2}
q{7,} | q{7,}
\[c[de] | [de]c\[
ab[c | <output undefined>
a(?bc) | <output undefined>
a[]]bc | <output undefined>
Demo
Demo kerja yang menunjukkan input / output yang benar. Ini memiliki beberapa logika tambahan untuk memvalidasi input yang tidak perlu dalam jawaban nyata. Pertimbangkan input yang tidak valid sebagai perilaku yang tidak terdefinisi.
Spesifik
Untuk kesederhanaan, semua karakter khusus memiliki arti khusus atau melarikan diri; yaitu, [[]
bukan rentang karakter untuk [
. Rentang panjang berasal dari ERE POSIX standar; yaitu, {n}
, {n,}
, dan {n,m}
didukung. Rentang karakter []
dan [^]
didukung. Karena aturan ini, dan karena tidak ada input yang tidak valid diberikan, Anda benar-benar hanya perlu menyalin konten ini langsung ke output. Terakhir, keserakahan tidak masalah, artinya tidak masalah jika regex yang terbalik menemukan kecocokan yang berbeda terlebih dahulu, hanya perlu menemukan kecocokan untuk rangkaian string yang sama.
Mencetak gol
Program terkecil dalam byte (kecuali kecurangan seperti permintaan jaringan) menang. Program dapat menggunakan IO nyata atau hanya mendefinisikan suatu fungsi.
?
bisa dilampirkan. Coba ketikkan/a(?bc)/
konsol konsol browser.(^a|b)(c$|d)
sebagai test case.(a)?(b)+
↦(b)+(a)?
?()
, yang digunakan dalam contoh Anda.Jawaban:
Retina ,
136114110 byteYo dawg, saya mendengar Anda suka regex ...
Dimana
<empty>
mewakili garis trailing kosong. Jalankan kode dari satu file dengan-s
bendera.... ketika Anda ingin membalikkan regex Anda harus menggunakan regex. Saat Anda ingin menggunakan regex, Anda harus menggunakan bahasa pemrograman berbasis regex.
Kode ini mengasumsikan bahwa input tidak berisi
;
atau!
atau ruang. Meskipun saya setuju bahwa itu adalah asumsi yang cukup kuat dan berpotensi tidak valid, Anda dapat mengganti ketiganya dalam kode dengan tiga karakter yang tidak diinginkan (seperti null byte, karakter lonceng, beri<DEL>
nama), dan itu tidak akan memengaruhi ukuran kode atau fungsionalitas sama sekali.Saya akan menambahkan penjelasan ketika saya selesai bermain golf.
sumber
]]]
, jadi bagaimanapun, jawaban ini tidak perlu banyak modifikasi.)JavaScript ES6, 574 byte
Saya mungkin dapat menghapus beberapa
var
pernyataan.JS ES6, belum teruji, 559 byte
Akan tes di rumah.
JavaScript ES5, ungolfed, 961 byte
sumber
JavaScript ES6, 343 byte
Kode asli (fungsinya, tetapi tanpa
prompt
):Kode ini diimplementasikan sebagai parser top-down rekursif, sehingga dapat menyebabkan stack overflow pada input yang sangat bersarang.
Kode dapat menyebabkan loop tak terbatas dalam kasus yang tidak valid, karena saya tidak mengujinya, mengambil keuntungan dari klausa "perilaku tidak terdefinisi".
sumber
Python 3, 144 byte
(Yang ini tidak mendukung kualifikasi pada grup seperti
(a)+(b)*(cde)?
.)Kasus uji:
Hasil:
sumber