Pemanasan: Regex, Kertas, Gunting
Ini adalah tantangan yang awalnya ingin saya posting, sebelum menyadari bahwa ada solusi yang sangat singkat. Namun demikian, ini bisa menjadi masalah yang menarik untuk dipikirkan dalam persiapan untuk tantangan aktual di bawah ini.
Tulis tiga regex R , P dan S sedemikian rupa sehingga mereka cocok satu sama lain dalam Rock cyclic, Paper, Scissors. Secara khusus, R pertandingan S , S cocok P dan P pertandingan R , tapi R tidak cocok P , S tidak sesuai R dan P tidak cocok S . Ini tabel praktis:
Regex Matches Doesn't match
R S P
P R S
S P R
Tidak masalah apa yang dilakukan R , P dan S pada input lain, termasuk diri mereka sendiri.
Di sini, kecocokan hanya berarti bahwa beberapa (mungkin kosong) dari input tersebut cocok. Pertandingan tidak perlu mencakup seluruh input.
Tantangannya: Regex, Kertas, Gunting, Kadal, Spock
Untuk tantangan ini, Anda akan menyelesaikan versi yang lebih sulit dari masalah di atas, berdasarkan varian RPS Rock, Paper, Scissors, Lizard, Spock (seperti yang dipopulerkan oleh The Big Bang Theory ). Dalam RPSLV, ada lima simbol yang berbeda, yang saling mengalahkan dalam dua siklus:
- Rock → Gunting → Kadal → Kertas → Spock → Rock
- Rock → Kadal → Spock → Gunting → Kertas → Rock
Anda harus menulis lima regex R , P , S , L dan V yang meniru struktur ini ketika diberikan satu sama lain sebagai input. Berikut adalah tabel terkait:
Regex Matches Doesn't match
R L, S V, P
L V, P S, R
V S, R P, L
S P, L R, V
P R, V L, S
Hanya untuk menjadi jelas, Anda harus tidak cocok string R
, P
, dll, tetapi regexes lainnya. Misalnya jika regex Anda R adalah ^\w$
misalnya, maka P dan V harus sesuai string ^\w$
, sedangkan S dan L tidak seharusnya.
Sekali lagi, kecocokan hanya berarti bahwa setidaknya satu substring (mungkin kosong) dari input cocok. Pertandingan tidak perlu mencakup seluruh input. Misalnya \b
(batas kata) cocok hello
(di awal dan di akhir), tetapi tidak cocok (^,^)
.
Anda dapat menggunakan rasa regex, tetapi sebutkan pilihan dalam jawaban Anda dan, jika mungkin, berikan tautan ke penguji online untuk rasa yang dipilih. Anda tidak boleh menggunakan fitur regex apa pun yang memungkinkan Anda menjalankan kode dalam bahasa host flavour (seperti e
pengubah Perl flavour ).
Pembatas (seperti /regex/
) tidak termasuk dalam regex ketika diberikan sebagai input ke yang lain, dan Anda tidak dapat menggunakan pengubah yang berada di luar regex. Beberapa rasa masih memungkinkan Anda menggunakan pengubah dengan sintaks sebaris seperti (?s)
.
Skor Anda adalah jumlah dari panjang lima regex dalam byte. Lebih rendah lebih baik.
Ternyata menjadi jauh lebih sederhana untuk menemukan sebuah solusi kerja untuk masalah ini daripada mungkin tampak pada awalnya, tapi saya berharap bahwa menemukan solusi optimal cukup rumit.
\b
(batas kata) cocok dengan hello
(di awal dan di akhir), tetapi itu tidak cocok (^,^)
. "