Tulis ekspresi reguler yang cocok dengan string yang diberikan yang terdiri dari tiga bilangan bulat tidak-negatif, jika dan hanya jika bilangan bulat terakhir adalah jumlah dari dua bilangan sebelumnya. Jawaban mungkin untuk bilangan bulat dari sistem angka apa pun dengan radix antara 2 dan 10.
Uji kasus
Ini harus gagal:
0 1 2
10 20 1000
Ini harus cocok:
10 20 30
28657 46368 75025
0 0 0
Aturan
Jawaban Anda harus terdiri dari satu regex, tanpa kode tambahan (kecuali, secara opsional, daftar pengubah regex yang diperlukan untuk membuat solusi Anda berfungsi). Anda tidak boleh menggunakan fitur-fitur dari rasa regex bahasa Anda yang memungkinkan Anda untuk memanggil kode dalam bahasa hosting (mis. Pengubah e Perl).
Silakan tentukan rasa regex Anda dalam jawaban Anda.
Ini adalah golf regex, jadi regex terpendek yang menang. Jika bahasa Anda membutuhkan pembatas (biasanya / .../) untuk menunjukkan ekspresi reguler, jangan hitung pembatas itu sendiri. Jika solusi Anda memerlukan pengubah, tambahkan satu byte per pengubah.
Penghargaan untuk Martin Ender dan jaytea untuk peraturan golf regex.
Saya punya alasan untuk percaya itu mungkin berdasarkan solusi dari Martin Ender untuk menemukan dan menambah bilangan bulat dengan regex .
sumber
/e
Pengubah Perl 5 hanya berlaku untuk substitusi, dan bukan satu-satunya cara untuk menjalankan kode eksternal. Juga ini mendiskualifikasi Perl 6 sepenuhnya sebagai sebuah regex hanya sebuah metode dengan sintaks tambahan. (Alasannya adalah itu membuat regex lebih mudah untuk membaca dan menulis) Akibatnya semua fitur yang diperlukan dalam regex kuno tidak diperlukan (atau termasuk) karena Anda baru saja memasukkan kode Perl 6. (artinya mungkin tidak mungkin untuk melakukan tantangan ini jika Anda hanya membatasi untuk regex kode tertentu)/^(\d+)**3%' '$ <?{$0[2]==[+] $0[0,1]}>/
atau/^(\d+)' '(\d+)' '(\d+)$ <?{$2==$0+$1}>/
atau/^(\d+)' '(\d+){}" {$0+$1}"$/
Jawaban:
Perl / PCRE: 2,685 byte
Cobalah online!
Saya telah mencari mangsa untuk tantangan sulit setelah absen dari regex, dan kebetulan tersandung di doozy ini. Memverifikasi penambahan (dengan Perl / PCRE) adalah sesuatu yang telah saya pikirkan sebelumnya, tetapi segera dianggap sebagai tidak mungkin atau di luar kemampuan saya. Namun, saya mengambil celah lagi sekarang dan saya sangat senang mengatakan bahwa saya benar-benar melakukannya!
Saya tidak benar-benar bermain golf ini selain mempertimbangkan algoritma pendek dan teknik pencocokan keseluruhan ketika saya menulisnya. Saya sangat senang telah menyelesaikannya: D
Jika orang tertarik, saya bisa menambahkan komentar dan menjelaskan cara kerjanya.
Sunting: Saya membuat posting rinci di blog saya tentang ini, dengan penjelasan dan komentar :) selamat menikmati: http://www.drregex.com/2018/09/a-regex-i-submitted-to-reddit-climbed.html
sumber
.NET flavor,
139111106 + 1 = 107 byteMembutuhkan
RightToLeft
pengubahr
. Masukan dalam biner.Cobalah online! (Menggunakan Retina .)
Yay untuk menyeimbangkan grup. Saya akan jelaskan ini nanti ...
Versi desimal,
340243 + 1 = 244 byteCobalah online!
sumber
.NET, 96 byte
Bendera:
r
Cobalah online!
Versi desimal, 238 byte
Bendera:
r
Cobalah online!
Mirip dengan jawaban Martin.
sumber