introduction
Mon compteur de vitesse a été piraté! Au lieu de me montrer à quelle vitesse je conduis, cela montre simplement: "Vroooom!" S'il vous plaît, aidez-moi à savoir à quelle vitesse je vais.
Défi
Prenez une chaîne en entrée et vérifiez si elle correspond à l'expression régulière /^[Vv]ro*m!$/m
. En anglais, cela signifie que toute ligne de la chaîne doit commencer par une majuscule ou une minuscule v
, puis une minuscule r
, puis n'importe quel montant (y compris zéro) de la lettre minuscule o
, puis la chaîne exacte m!
. Il peut y avoir d'autres lignes, mais la chaîne Vroom doit être sur sa propre ligne.
Si vous trouvez une correspondance, vous devez compter la quantité de o
's dans la chaîne Vroom et la sortir. Si vous ne trouvez pas de correspondance cependant, vous devez sortir toute valeur par défaut qui ne peut pas être sortie autrement (comme -1
ou une chaîne vide)
Rappels
- Les E / S sont dans un format raisonnable
- Les failles standard sont interdites
- La soumission peut être un programme ou une fonction complète
- L'entrée est garantie d'avoir seulement 1 chaîne Vroom
Notation
C'est le code-golf , donc le code le plus court en octets l'emporte. Cependant , je ne marquerai aucune réponse comme acceptée.
Cas de test
Contribution
Vrom!
Production 1
Contribution
vrooooooom!
Production 7
Contribution
Hello, Vroom!
Production (none)
Contribution
Foo bar boo baz
Vrooom!
hi
Production 3
Contribution
Vrm!ooo
Production (none)
Contribution
PPCG puzzlers pie
Production (none)
Contribution
hallo
vROOOm!
Production (none)
la source
Vrm!
deVram!
Python 2 ,
5653 octetsEssayez-le en ligne!
Regex et regroupement de base, utilise l'indicateur re.MULTILINE (qui a une valeur de 8) et re.search pour s'assurer qu'il fonctionne pour les entrées multilignes. Lève une exception lorsqu'aucune correspondance n'est trouvée. Merci à @ovs pour les -3 octets de
(re.M == 8)
tip.la source
re.M
a la valeur8
, donc peut simplement utiliserre.search(regex,x,8)
R ,
62 60 5844 octetsEssayez-le en ligne!
@Giuseppe avec 14 octets de golf.
Approche originale avec explication:
Essayez-le en ligne!
R a sept fonctions d'appariement de motifs. Les plus couramment utilisés sont
grep
,grepl
etsub
, mais voici une bonne utilisation pourregexec
.regexec
vous donne un tas de choses, dont la longueur de toute sous-chaîne capturée, dans ce cas la(o*)
partie de l'expression régulière multiligne.Le
attr(el .... "m")[2]
truc est une façon golfique d'obtenir le nombre souhaité.Renvoie
NA
s'il n'y a pas de correspondance.la source
JavaScript (Node.js) , 41 octets
Essayez-le en ligne!
la source
vroooooooooooom!x\nvrom!
[1]. length
?length
de toute façon, je passais à une nouvelle ligne.Powershell,
62585348 octets octetsrenvoie les nombres de
o
dans un premierVroom!
, ou -4 s'ilVroom!
n'est pas trouvé.Remarques:
sls
est un alias pour Select-String ;(?m-i)
dans regexp signifie:^
et faire$
correspondre le début et la fin d'une ligne, au lieu du début et de la fin d'une chaîne.|% M*
est un raccourci pour la propriétéMatches
, qui donne une première correspondance car nous n'utilisons pas de-AllMatches
paramètre.Script de test:
Production:
la source
PowerShell , 83 octets
Essayez-le en ligne!
-split
s l'entrée$args
sur`n
ewlines, les conduit dans une boucle for. A chaque itération, nous vérifions si notre[regex]::Match
est.success
ou non. Si c'est le cas, nous laissons$x
(l'objet de résultats d'expression régulière) sur le pipeline. En dehors de la boucle, nous prenons la.length
propriété - si c'est l'objet de résultats d'expression régulière, c'est la longueur de la correspondance (par exemple, "Vroom!" Serait 6); s'il ne s'agit pas d'un objet de résultat d'expression régulière, la longueur est nulle. Nous soustrayons ensuite4
pour supprimer les décomptes pour leVrm!
et laisser cela sur le pipeline. La sortie est implicite. Génère un-4
si aucune correspondance n'est trouvée.la source
sls "^[Vv]ro*m!$"
?sls
rendra('','Vroom!','')
par exemple.sls
place[regex]::Match
Rétine , 21 octets
Essayez-le en ligne! Explication:
L
répertorie les correspondances. Par conséquent, si l'expression régulière ne correspond pas, la sortie est vide.$
fait que le résultat est la substitution plutôt que la correspondance.m
en fait une correspondance multiligne (l'équivalent de la finm
de la question). Le.
dans la substitution lui fait sortir la longueur de la capture en décimal.la source
SNOBOL4 (CSNOBOL4) ,
9982 octetsEssayez-le en ligne!
Traduction SNOBOL assez directe de la spécification, lit chaque ligne jusqu'à ce qu'elle trouve celle qui correspond
^[Vv]ro*m!$
, puis sort la longueur duo*
bit.Entre dans une boucle infinie si aucune ne
Vroom!
peut être trouvée.la source
Perl 6 , 26 octets
Essayez-le en ligne!
la source
C (gcc) ,
188183 bytesPourquoi utiliser des expressions régulières alors que vous pouvez utiliser une machine d'état à la place? :-)
Essayez-le en ligne!
la source
Stax , 16 octets
Exécuter et déboguer
la source
Haskell ,
757169 octetsEssayez-le en ligne!
Aucun regex. À la place, construit toutes les
Vrooom!
chaînes valides jusqu'à une longueur suffisante et compare les lignes de l'entrée avec elles, en collectant le nombre deo
s dans une liste. Ainsi, pour les entrées non valides, une liste vide est renvoyée.la source
C (gcc) ,
104100octetsEssayez-le en ligne!
Afficher le
n
pour chaque ligne valide, exactement dans l'exigence (rien si aucune ligne valide, len
si exactement une)la source
Japt , 18 octets
Essayez-le en ligne!
Enregistré un octet en prenant l'entrée comme un tableau de lignes.
Comprend un caractère non imprimable entre
]
et*
.Explication:
la source
C (gcc) ,
138124 octetsVoici le moyen de regex ennuyeux.
Essayez-le en ligne!
la source
Pyth , 28 octets
Essayez-le en ligne!
la source
Pyth, 20 octets
Affiche une liste contenant uniquement le nombre de «o» ou une liste vide s'il n'y a pas de Vroom.
Essayez-le ici
Explication
la source
Pip , 21 octets
Essayez-le en ligne!
Correspond à l'expression régulière
^[Vv]r(o*)m!$
en mode multiligne; longueur de sortie du groupe de capture.la source
sfk , 94 octets
Essayez-le en ligne!
Donne
-1
quand vous n'êtes pas en train de nettoyer.la source
Rouge , 104 octets
Essayez-le en ligne!
Une solution simple. Le rouge
parse
est cool et lisible, mais trop long par rapport à l'expression régulièrela source
J, 35 octets
Renvoie 1 négatif si le motif ne correspond pas.
la source
JavaScript,
907361 octetsEssayez-le en ligne!
Remplacez les caractères qui ne sont pas capturés
(o*)
par une chaîne vide, retourlength
de chaîne contenant uniquement"o"
ou-1
si la chaîne résultante est vide.la source
Rubis, 32 octets
Correspond à la chaîne avec l'expression régulière, puis utilise les variables de groupe d'expression magique magique de Ruby pour obtenir la taille du premier groupe.
Appelez-le ainsi:
la source
Rubis ,
2829 octetsEssayez-le en ligne!
Les chaînes multilignes nécessitent trois octets supplémentaires. Je ne sais pas si c'est une exigence difficile. Si oui, je mettrai à jour cela.
la source
VROM!
Clojure , 90 octets
Essayez-le en ligne!
Cette fonction anonyme renvoie le nombre de "o" dans la chaîne vroom, ou -1 s'il n'y a pas de chaîne vroom valide.
Version lisible
Explication
la source
perl -nE, 35 octets
Cela utilise le message d'accueil esquimau (
}{
) qui abuse rapidement de la façon dont l'-n
option est traitée par perl.la source
Java 8, 109 octets
Essayez-le en ligne.
Explication:
la source
C # (.NET Core) ,
134122 octetsEssayez-le en ligne!
-12 octets: déplacement du
null
chèque dans lafor
boucle et suppression des crochetsNon golfé:
la source
{}
lors de l'utilisation d'une seule instruction dans lafor
boucle: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;
, je ne sais pas si c'est important lol-1
pour chaque ligne sur laquelle il ne fonctionne pas, mais il affichera-1
s pour toujours car il n'y a pas de vérificationnull
.a = Console.ReadLine()
crée la boucle, donc chaque fois que vous demandez une entrée pour que la boucle continue, s'il n'y a pas d'entrée, la boucle attend juste, pas-1
pour toujours05AB1E ,
3937 octetsBien que 05AB1E soit un langage de golf, les défis basés sur les regex ne sont certainement pas sa suite forte, car il n'a pas de regex-builtins.
Affiche
[]
si aucune correspondance n'a été trouvée.Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source
C ++, MSVC,
164159 octets-5 octets grâce à Zacharý
Il compile même avec l'en-
regex
tête uniquementTests:
la source
using namespace std;
permettrait d'économiser quelques octets