Introducción
¡El velocímetro de mi auto fue pirateado! En lugar de mostrarme qué tan rápido estoy conduciendo, simplemente muestra: "¡Vroooom!" Por favor, ayúdame a saber qué tan rápido voy.
Desafío
Tome una cadena como entrada y verifique si coincide con la expresión regular /^[Vv]ro*m!$/m
. En inglés, eso significa que cualquier línea de la cadena debe comenzar con mayúscula o minúscula v
, luego minúscula r
, luego cualquier cantidad (incluido cero) de la letra minúscula o
, luego la cadena exacta m!
. Puede haber otras líneas, pero la cadena de Vroom debe estar en su propia línea.
Si encuentra una coincidencia, debe contar la cantidad de o
's en la cadena de Vroom y generarla. Sin embargo, si no encuentra una coincidencia, debe generar cualquier valor predeterminado que no se pueda generar de otra manera (como -1
una cadena vacía)
Recordatorios
- I / O está en cualquier formato razonable
- Las lagunas estándar están prohibidas
- La presentación puede ser un programa o función completa
- Se garantiza que la entrada solo tenga 1 cadena Vroom
Puntuación
Este es el código golf , por lo que gana el código más corto en bytes. Sin embargo , no marcaré ninguna respuesta como aceptada.
Casos de prueba
Entrada
Vrom!
Salida 1
Entrada
vrooooooom!
Salida 7
Entrada
Hello, Vroom!
Salida (none)
Entrada
Foo bar boo baz
Vrooom!
hi
Salida 3
Entrada
Vrm!ooo
Salida (none)
Entrada
PPCG puzzlers pie
Salida (none)
Entrada
hallo
vROOOm!
Salida (none)
fuente
Vrm!
deVram!
Python 2 ,
5653 bytesPruébalo en línea!
La expresión regular y la agrupación básicas utilizan el indicador re.MULTILINE (que tiene un valor de 8) y re.search para garantizar que funcione para entradas de varias líneas. Provoca una excepción cuando no se encuentra ninguna coincidencia. Gracias a @ovs por los -3 bytes de
(re.M == 8)
tip.fuente
re.M
tiene el valor8
, por lo que puede usarlore.search(regex,x,8)
R ,
62 60 5844 bytesPruébalo en línea!
@Giuseppe con 14 bytes de golf.
Enfoque original con explicación:
Pruébalo en línea!
R tiene siete funciones de coincidencia de patrones. Los más comúnmente utilizados son
grep
,grepl
ysub
, pero aquí hay un uso agradable pararegexec
.regexec
le ofrece un montón de cosas, una de las cuales es la longitud de cualquier subcadena capturada, en este caso la(o*)
parte de la expresión regular multilínea.El
attr(el .... "m")[2]
material es una forma de golf para obtener el número deseado.Devuelve
NA
si no hay coincidencia.fuente
JavaScript (Node.js) , 41 bytes
Pruébalo en línea!
fuente
vroooooooooooom!x\nvrom!
[1]. length
?length
estaba rompiendo a una nueva línea de todos modos.Powershell,
62585348 bytes bytesdevuelve números de
o
en un primeroVroom!
, o -4 siVroom!
no se encuentra.Notas:
sls
es alias para Select-String ;(?m-i)
regexp interior significa:^
y hacer$
coincidir el principio y el final de una línea, en lugar del principio y el final de una cadena.|% M*
es un acceso directo para la propiedadMatches
, que da una primera coincidencia porque no usamos-AllMatches
parámetro.Script de prueba:
Salida:
fuente
PowerShell , 83 bytes
Pruébalo en línea!
-split
s la entrada$args
en`n
ewlines, los canaliza en un bucle for. Cada iteración, verificamos si nuestro[regex]::Match
es un.success
o no. Si es así, dejamos$x
(el objeto de resultados regex) en la tubería. Fuera del ciclo, tomamos la.length
propiedad: si es el objeto de resultados de expresiones regulares, esta es la duración de la coincidencia (por ejemplo, "¡Vroom!" Sería 6); Si no es un objeto de resultados de expresiones regulares, la longitud es cero. Luego restamos4
para eliminar los recuentos para elVrm!
y dejarlo en la tubería. La salida es implícita. Da como resultado-4
si no se encuentra ninguna coincidencia.fuente
sls "^[Vv]ro*m!$"
?sls
lo que devolverá,('','Vroom!','')
por ejemplo.sls
lugar[regex]::Match
Retina , 21 bytes
Pruébalo en línea! Explicación:
L
enumera las coincidencias, por lo que si la expresión regular no coincide, la salida está vacía.$
hace que el resultado sea la sustitución en lugar del partido.m
lo convierte en una coincidencia multilínea (el equivalente al finalm
de la pregunta). El.
en la sustitución hace que produzca la longitud de la captura en decimal.fuente
SNOBOL4 (CSNOBOL4) ,
9982 bytesPruébalo en línea!
La traducción SNOBOL bastante directa de la especificación, lee cada línea hasta que encuentra una que coincida
^[Vv]ro*m!$
, luego emite la longitud de la líneao*
bit.Entra en un bucle infinito si no
Vroom!
se puede encontrar.fuente
Perl 6 , 26 bytes
Pruébalo en línea!
fuente
C (gcc) ,
188183 bytes¿Por qué usar expresiones regulares cuando puedes usar una máquina de estado? :-)
Pruébalo en línea!
fuente
Stax , 16 bytes
Ejecutar y depurarlo
fuente
Haskell ,
757169 bytesPruébalo en línea!
Sin expresiones regulares. En su lugar, construye todas las
Vrooom!
cadenas válidas hasta una longitud suficiente y compara las líneas de la entrada con ellas, recogiendo el número deo
s en una lista. Por lo tanto, para entradas no válidas se devuelve una lista vacía.fuente
C (gcc) ,
104100bytesPruébalo en línea!
Salida
n
para cada línea válida, exactamente en el requisito (nada si no hay una línea válida,n
si es exactamente una)fuente
Japt , 18 bytes
Pruébalo en línea!
Guardado un byte tomando la entrada como una matriz de líneas.
Incluye un carácter no imprimible entre
]
y*
.Explicación:
fuente
C (gcc) ,
138124bytesAquí está la forma aburrida de expresiones regulares.
Pruébalo en línea!
fuente
Pyth , 28 bytes
Pruébalo en línea!
fuente
Pyth, 20 bytes
Se muestra como una lista que contiene solo el número de 'o' o una lista vacía si no hay Vroom.
Pruébalo aquí
Explicación
fuente
Pipa , 21 bytes
Pruébalo en línea!
Match regex
^[Vv]r(o*)m!$
en modo multilínea; longitud de salida del grupo de captura.fuente
sfk , 94 bytes
Pruébalo en línea!
Da
-1
cuando no estás vrooming.fuente
Rojo , 104 bytes
Pruébalo en línea!
Una solución sencilla. El rojo
parse
es genial y legible, pero demasiado largo en comparación con la expresión regular.fuente
J, 35 bytes
Devuelve 1 negativo si el patrón no coincide.
fuente
JavaScript,
907361 bytesPruébalo en línea!
Reemplace los caracteres que no se capturan
(o*)
con una cadena vacía, el retornolength
de la cadena que contiene solo"o"
o-1
si la cadena resultante está vacía.fuente
Ruby, 32 bytes
Hace coincidir la cadena con la expresión regular, luego usa las variables de grupo de expresión mágica de Ruby para obtener el tamaño del primer grupo.
Llámalo así:
fuente
Ruby ,
2829 bytesPruébalo en línea!
Las cadenas de varias líneas requieren tres bytes más. No estoy seguro si ese es un requisito difícil. Si es así, actualizaré esto.
fuente
VROM!
Clojure , 90 bytes
Pruébalo en línea!
Esta función anónima devuelve el número de "o" s en la cadena vroom, o -1 si no hay una cadena vroom válida.
Versión legible
Explicación
fuente
perl -nE, 35 bytes
Utiliza el saludo esquimal (
}{
) que abusa de un rápido sobre cómo-n
Perl maneja la opción.fuente
Java 8, 109 bytes
Pruébalo en línea.
Explicación:
fuente
C # (.NET Core) ,
134122 bytesPruébalo en línea!
-12 bytes: movió el
null
cheque alfor
bucle y eliminó los corchetesSin golf:
fuente
{}
cuando se utiliza sólo una declaración en elfor
bucle: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;
, no estoy seguro si esto es importante jajaja-1
para cada línea en la que no funciona, sino que generará-1
s para siempre, ya que no hay ninguna verificaciónnull
.a = Console.ReadLine()
realiza el bucle, por lo que cada vez que solicita una entrada para que el bucle continúe, si no hay entrada, el bucle solo espera, no se imprime-1
para siempre05AB1E ,
3937 bytesAunque 05AB1E es un lenguaje de golf, los desafíos basados en expresiones regulares definitivamente no son su paquete fuerte, ya que no tiene incorporados expresiones regulares.
Salidas
[]
si no se encontró coincidencia.Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente
C ++, MSVC,
164159 bytes-5 bytes gracias a Zacharý
Se compila incluso solo con el
regex
encabezadoPruebas:
fuente
using namespace std;
que ahorraría unos pocos bytes