pengantar
Speedometer mobil saya diretas! Alih-alih menunjukkan kepada saya seberapa cepat saya mengemudi, itu hanya menunjukkan: "Vroooom!" Tolong bantu saya tahu seberapa cepat saya pergi.
Tantangan
Ambil string sebagai input, dan periksa apakah cocok dengan regex /^[Vv]ro*m!$/m
. Dalam bahasa Inggris itu berarti setiap baris string harus dimulai dengan huruf kapital atau huruf kecil v
, kemudian huruf kecil r
, lalu jumlah apa pun (termasuk nol) dari huruf kecil o
, kemudian string yang tepat m!
. Mungkin ada baris lain, tetapi string Vroom harus pada baris itu sendiri.
Jika Anda menemukan kecocokan, maka Anda harus menghitung jumlah o
dalam string Vroom dan mengeluarkannya. Namun, jika Anda tidak menemukan kecocokan, Anda harus menampilkan nilai default apa pun yang tidak dapat ditampilkan sebaliknya (seperti -1
atau string kosong)
Pengingat
- I / O dalam format yang masuk akal
- Celah standar dilarang
- Pengiriman mungkin merupakan program atau fungsi lengkap
- Input dijamin hanya memiliki 1 string Vroom
Mencetak gol
Ini adalah kode-golf , jadi kode terpendek dalam byte menang. Namun , saya tidak akan menandai jawaban apa pun yang diterima.
Uji kasus
Memasukkan
Vrom!
Keluaran 1
Memasukkan
vrooooooom!
Keluaran 7
Memasukkan
Hello, Vroom!
Keluaran (none)
Memasukkan
Foo bar boo baz
Vrooom!
hi
Keluaran 3
Memasukkan
Vrm!ooo
Keluaran (none)
Memasukkan
PPCG puzzlers pie
Keluaran (none)
Memasukkan
hallo
vROOOm!
Keluaran (none)
sumber
Vrm!
dariVram!
Python 2 ,
5653 byteCobalah online!
Regex dan pengelompokan dasar, menggunakan bendera re.MULTILINE (yang memiliki nilai 8) dan penelitian ulang untuk memastikan itu berfungsi untuk input multiline. Menimbulkan pengecualian saat tidak ada kecocokan yang ditemukan. Terima kasih kepada @ovs untuk -3 byte dari
(re.M == 8)
tip.sumber
re.M
memiliki nilai8
, jadi bisa saja menggunakanre.search(regex,x,8)
R ,
62 60 5844 byteCobalah online!
@Giuseppe dengan 14 byte golf.
Pendekatan asli dengan penjelasan:
Cobalah online!
R memiliki tujuh fungsi pencocokan pola. Yang lebih umum digunakan adalah
grep
,grepl
, dansub
, tapi di sini adalah penggunaan yang bagus untukregexec
.regexec
memberi Anda banyak hal, salah satunya adalah panjang dari setiap substring yang ditangkap, dalam hal ini(o*)
bagian dari regex multiline.attr(el .... "m")[2]
Barang - barang adalah cara golf untuk mendapatkan nomor yang diinginkan.Kembali
NA
jika tidak ada yang cocok.sumber
JavaScript (Node.js) , 41 byte
Cobalah online!
sumber
vroooooooooooom!x\nvrom!
[1]. length
?length
itu melanggar ke baris baru.Powershell,
62585348 byte bytemengembalikan angka
o
dalam yang pertamaVroom!
, atau -4 jikaVroom!
tidak ditemukan.Catatan:
sls
alias untuk Select-String ;(?m-i)
inside regexp berarti:^
dan$
cocokkan awal dan akhir suatu garis, bukannya awal dan akhir suatu string.|% M*
adalah pintasan untuk propertiMatches
, yang memberikan kecocokan pertama karena kami tidak menggunakan-AllMatches
parameter.Skrip uji:
Keluaran:
sumber
PowerShell , 83 byte
Cobalah online!
-split
s input$args
pada`n
baris baru, pipa mereka menjadi for for loop. Setiap iterasi, kami memeriksa apakah kami[regex]::Match
adalah.success
atau tidak. Jika demikian, kita meninggalkan$x
(objek hasil regex) di pipeline. Di luar loop, kita mengambil.length
properti - jika objek hasil regex, ini adalah panjang pertandingan (misalnya, "Vroom!" Akan menjadi 6); jika bukan objek hasil regex, panjangnya nol. Kami kemudian mengurangi4
untuk menghapus jumlah untukVrm!
dan membiarkannya di dalam pipa. Output tersirat. Keluaran a-4
jika tidak ditemukan kecocokan.sumber
sls "^[Vv]ro*m!$"
?sls
akan memberikan kembali('','Vroom!','')
misalnya.sls
sebagai gantinya[regex]::Match
Retina , 21 byte
Cobalah online! Penjelasan:
L
daftar cocok, jadi jika regex gagal untuk mencocokkan maka output kosong.$
menyebabkan hasilnya menjadi substitusi alih-alih pertandingan.m
menjadikannya pencocokan multiline (setara dengan tertinggalm
dalam pertanyaan). The.
substitusi membuatnya output panjang penangkapan dalam desimal.sumber
SNOBOL4 (CSNOBOL4) ,
9982 byteCobalah online!
Terjemahan SNOBOL yang cukup langsung dari spec, membaca setiap baris sampai menemukan yang cocok
^[Vv]ro*m!$
, lalu menampilkan panjango*
bit.Memasuki loop tak terbatas jika tidak
Vroom!
dapat ditemukan.sumber
Perl 6 , 26 byte
Cobalah online!
sumber
C (gcc) ,
188183 byteMengapa menggunakan regex ketika Anda dapat menggunakan mesin negara sebagai gantinya? :-)
Cobalah online!
sumber
Stax , 16 byte
Jalankan dan debug itu
sumber
Haskell ,
757169 byteCobalah online!
Tidak ada regex. Alih-alih membangun semua
Vrooom!
string yang valid hingga cukup panjang dan membandingkan garis input terhadap mereka, mengumpulkan jumlaho
s dalam daftar. Jadi untuk input yang tidak valid daftar kosong dikembalikan.sumber
C (gcc) ,
104100 byteCobalah online!
Keluarkan
n
untuk setiap baris yang valid, tepat di persyaratan (tidak ada jika tidak ada garis yang valid,n
jika tepat satu)sumber
Japt , 18 byte
Cobalah online!
Menyimpan byte dengan mengambil input sebagai larik baris.
Termasuk karakter yang tidak diinginkan antara
]
dan*
.Penjelasan:
sumber
C (gcc) ,
138124 byteInilah cara regex yang membosankan.
Cobalah online!
sumber
Pyth , 28 byte
Cobalah online!
sumber
Pyth, 20 byte
Output sebagai daftar yang hanya berisi jumlah 'o's, atau daftar kosong jika tidak ada Vroom.
Coba di sini
Penjelasan
sumber
Pip , 21 byte
Cobalah online!
Cocokkan regex
^[Vv]r(o*)m!$
dalam mode multiline; panjang keluaran dari kelompok tangkap.sumber
sfk , 94 byte
Cobalah online!
Memberi
-1
ketika Anda tidak perawatan.sumber
Merah , 104 byte
Cobalah online!
Solusi mudah. Merah itu
parse
keren dan enak dibaca, tapi terlalu panjang dibandingkan dengan regexsumber
J, 35 byte
Mengembalikan negatif 1 jika polanya tidak cocok.
sumber
JavaScript,
907361 byteCobalah online!
Ganti karakter yang tidak ditangkap
(o*)
dengan string kosong, kembalikanlength
string yang hanya berisi"o"
atau-1
jika string yang dihasilkan kosong.sumber
Ruby, 32 byte
Cocokkan string dengan regex, lalu gunakan variabel grup regex magic Ruby untuk mendapatkan ukuran grup pertama.
Sebut seperti ini:
sumber
Ruby ,
2829 byteCobalah online!
String multi-line membutuhkan tiga byte lagi. Saya tidak yakin apakah itu persyaratan yang sulit. Jika demikian, saya akan memperbarui ini.
sumber
VROM!
Clojure , 90 byte
Cobalah online!
Fungsi anonim ini mengembalikan jumlah "o" dalam string vroom, atau -1 jika tidak ada string vroom yang valid.
Versi yang mudah dibaca
Penjelasan
sumber
perl -nE, 35 byte
Ini menggunakan sapaan Eskimo (
}{
) yang menyalahgunakan quick tentang bagaimana-n
opsi ditangani oleh perl.sumber
Java 8, 109 byte
Cobalah online.
Penjelasan:
sumber
C # (.NET Core) ,
134122 byteCobalah online!
-12 byte: memindahkan tanda
null
centang kefor
loop dan menghapus tanda kurungTidak Disatukan:
sumber
{}
bila menggunakan hanya satu pernyataan dalamfor
lingkaran:for(var a="";;a=Console.ReadLine())Console.WriteLine(new Regex(@"^[Vv]ro*m!$").Match(a??"").Success?a.Count(x =>x=='o'):-1);
using System.Linq; using System.Text.RegularExpressions;
, tidak yakin apakah ini penting lol-1
untuk setiap baris yang tidak berfungsi, tetapi juga akan menghasilkan-1
selamanya karena tidak ada pemeriksaannull
.a = Console.ReadLine()
membuat perulangan, jadi setiap kali Anda meminta masukan untuk perulangan, jika tidak ada masukan, perulangan hanya menunggu, tidak mencetak-1
selamanya05AB1E ,
3937 byteMeskipun 05AB1E adalah bahasa golf, tantangan berbasis regex jelas bukan suite yang kuat, karena tidak memiliki regex-builtin.
Output
[]
jika tidak ditemukan kecocokan.Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber
C ++, MSVC,
164159 byte-5 byte terima kasih kepada Zacharý
Itu mengkompilasi bahkan dengan
regex
header sajaTes:
sumber
using namespace std;
akan menghemat beberapa byte