Einführung
Mein Autotacho wurde gehackt! Anstatt mir zu zeigen, wie schnell ich fahre, zeigt es nur: "Vroooom!" Bitte hilf mir zu wissen, wie schnell ich gehe.
Herausforderung
Nehmen Sie eine Zeichenfolge als Eingabe und prüfen Sie, ob sie mit der regulären Ausdrucksweise übereinstimmt /^[Vv]ro*m!$/m
. Auf Englisch bedeutet dies, dass jede Zeile der Zeichenfolge mit einem Groß- oder Kleinbuchstaben v
, einem Kleinbuchstaben r
, einem beliebigen Betrag (einschließlich Null) des Kleinbuchstabens o
und der genauen Zeichenfolge beginnen muss m!
. Möglicherweise gibt es andere Zeilen, aber die Vroom-Zeichenfolge muss in einer eigenen Zeile stehen.
Wenn Sie eine Übereinstimmung finden, müssen Sie die Anzahl der o
Einträge in der Vroom-Zeichenfolge zählen und ausgeben. Wenn Sie jedoch keine Übereinstimmung finden, sollten Sie einen Standardwert ausgeben, der ansonsten nicht ausgegeben werden kann (wie -1
oder eine leere Zeichenfolge).
Erinnerungen
- I / O hat ein beliebiges vernünftiges Format
- Standardlücken sind verboten
- Die Einreichung kann ein vollständiges Programm oder eine Funktion sein
- Der Eingang hat garantiert nur eine Vroom-Zeichenfolge
Wertung
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes. Allerdings werde ich keine Antwort markieren als angenommen.
Testfälle
Eingang
Vrom!
Ausgabe 1
Eingang
vrooooooom!
Ausgabe 7
Eingang
Hello, Vroom!
Ausgabe (none)
Eingang
Foo bar boo baz
Vrooom!
hi
Ausgabe 3
Eingang
Vrm!ooo
Ausgabe (none)
Eingang
PPCG puzzlers pie
Ausgabe (none)
Eingang
hallo
vROOOm!
Ausgabe (none)
quelle
Vrm!
ausVram!
Python 2 ,
5653 BytesProbieren Sie es online!
Grundlegende reguläre Ausdrücke und Gruppierungen verwenden das Flag re.MULTILINE (mit dem Wert 8) und re.search, um sicherzustellen, dass es für mehrzeilige Eingaben funktioniert. Löst eine Ausnahme aus, wenn keine Übereinstimmung gefunden wird. Danke an @ovs für die -3 Bytes von
(re.M == 8)
tip.quelle
re.M
hat den Wert8
, kann also einfachre.search(regex,x,8)
R ,
62 60 5844 ByteProbieren Sie es online!
@ Giuseppe mit 14 Bytes Golf.
Ursprünglicher Ansatz mit Erklärung:
Probieren Sie es online!
R hat sieben Mustervergleichsfunktionen. Die am häufigsten verwendeten sind
grep
,grepl
undsub
, aber hier ist eine gute Verwendung fürregexec
.regexec
gibt Ihnen eine Reihe von Dingen, von denen eine die Länge einer erfassten Teilzeichenfolge ist, in diesem Fall der(o*)
Teil der mehrzeiligen Regex.Das
attr(el .... "m")[2]
Zeug ist ein golferischer Weg, um die gewünschte Anzahl zu bekommen.Gibt zurück,
NA
wenn keine Übereinstimmung vorliegt.quelle
JavaScript (Node.js) , 41 Byte
Probieren Sie es online!
quelle
vroooooooooooom!x\nvrom!
[1]. length
?length
bemerkt, weil sowieso eine neue Leitung aufgeschaltet wurde.Powershell,
62585348 Bytes BytesGibt die Anzahl von
o
in einem erstenVroom!
oder -4 zurück, wennVroom!
nicht gefunden.Anmerkungen:
sls
ist ein Alias für Select-String ;(?m-i)
inside regexp bedeutet:^
und$
passen Sie den Anfang und das Ende einer Zeile an, anstatt den Anfang und das Ende einer Zeichenfolge.|% M*
ist eine Abkürzung für die EigenschaftMatches
, die eine erste Übereinstimmung ergibt, da wir keine-AllMatches
Parameter verwenden.Testskript:
Ausgabe:
quelle
PowerShell , 83 Byte
Probieren Sie es online!
-split
s die Eingabe$args
in`n
ewlines, leitet diese in eine for-Schleife. Bei jeder Iteration prüfen wir, ob unsere[regex]::Match
eine ist.success
oder nicht. In$x
diesem Fall belassen wir das Regex-Ergebnisobjekt in der Pipeline. Außerhalb der Schleife nehmen wir die.length
Eigenschaft - wenn es sich um das Regex-Ergebnisobjekt handelt, ist dies die Länge der Übereinstimmung (z. B. "Vroom!" Wäre 6); Wenn es sich nicht um ein reguläres Ergebnisobjekt handelt, ist die Länge Null. Wir subtrahieren dann4
, um die Zählungen für die zu entfernen,Vrm!
und belassen diese in der Pipeline. Die Ausgabe ist implizit. Gibt a aus,-4
wenn keine Übereinstimmung gefunden wird.quelle
sls "^[Vv]ro*m!$"
?sls
gibt zurück('','Vroom!','')
zum Beispiel.sls
stattdessen versuchen[regex]::Match
Netzhaut , 21 Bytes
Probieren Sie es online! Erläuterung:
L
Listet Übereinstimmungen auf. Wenn die Regex nicht übereinstimmt, ist die Ausgabe leer.$
bewirkt, dass das Ergebnis eher die Substitution als das Match ist.m
macht es zu einem mehrzeiligen Match (das Äquivalent zum Trailingm
in der Frage). Mit.
der Option in der Ersetzung wird die Länge der Erfassung in Dezimalzahl ausgegeben.quelle
SNOBOL4 (CSNOBOL4) ,
9982 BytesProbieren Sie es online!
Ziemlich direkte SNOBOL-Übersetzung der Spezifikation, liest jede Zeile, bis eine übereinstimmende gefunden wird
^[Vv]ro*m!$
, und gibt dann die Länge deso*
Bits aus.Gibt eine Endlosschleife ein, wenn keine gefunden werden
Vroom!
kann.quelle
Perl 6 , 26 Bytes
Probieren Sie es online!
quelle
C (GCC) ,
188183 BytesWarum Regexes verwenden, wenn Sie stattdessen eine Zustandsmaschine verwenden können? :-)
Probieren Sie es online!
quelle
Stax , 16 Bytes
Führen Sie es aus und debuggen Sie es
quelle
Haskell ,
757169 BytesProbieren Sie es online!
Kein Regex.
Vrooom!
Baut stattdessen alle gültigen -strings bis zu einer ausreichenden Länge auf und vergleicht die Zeilen der Eingabe mit ihnen, wobei die Anzahl dero
s in einer Liste erfasst wird . Bei ungültigen Eingaben wird daher eine leere Liste zurückgegeben.quelle
C (GCC) ,
104100 BytesProbieren Sie es online!
Geben Sie die
n
für jede gültige Zeile genau in der Anforderung aus (nichts, wenn keine gültige Zeile,n
wenn genau eine).quelle
Japt , 18 Bytes
Probieren Sie es online!
Ein Byte wurde gespeichert, indem Eingaben als Array von Zeilen übernommen wurden.
Enthält ein nicht druckbares Zeichen zwischen
]
und*
.Erläuterung:
quelle
C (gcc) ,
138–124BytesHier ist der langweilige Regex-Weg.
Probieren Sie es online!
quelle
Pyth , 28 Bytes
Probieren Sie es online!
quelle
Pyth, 20 Bytes
Wird als Liste ausgegeben, die nur die Anzahl der O enthält, oder als leere Liste, wenn kein Vroom vorhanden ist.
Probieren Sie es hier aus
Erläuterung
quelle
Pip , 21 Bytes
Probieren Sie es online!
Regex
^[Vv]r(o*)m!$
im mehrzeiligen Modus anpassen ; Ausgabelänge der Erfassungsgruppe.quelle
sfk , 94 bytes
Probieren Sie es online!
Gibt,
-1
wenn Sie nicht vrooming sind.quelle
Rot , 104 Bytes
Probieren Sie es online!
Eine einfache Lösung. Rot
parse
ist cool und lesbar, aber im Vergleich zu Regex zu langquelle
J, 35 Bytes
Gibt eine negative 1 zurück, wenn das Muster nicht übereinstimmt.
quelle
JavaScript,
907361 BytesProbieren Sie es online!
Ersetzen Sie nicht erfasste Zeichen
(o*)
durch leere Zeichenfolgen, geben Sielength
nur Zeichenfolgen zurück, die diese enthalten,"o"
oder geben Sie an,-1
dass die resultierende Zeichenfolge leer ist.quelle
Ruby, 32 Bytes
Ordnet die Zeichenfolge dem regulären Ausdruck zu und verwendet dann Rubys magische reguläre Gruppenvariablen, um die Größe der ersten Gruppe zu ermitteln.
Nenne es so:
quelle
Ruby ,
2829 BytesProbieren Sie es online!
Mehrzeilige Zeichenfolgen erfordern drei weitere Bytes. Ich bin mir nicht sicher, ob das eine harte Anforderung ist. Wenn ja, werde ich dies aktualisieren.
quelle
VROM!
Clojure , 90 Bytes
Probieren Sie es online!
Diese anonyme Funktion gibt die Anzahl der "0" in der Vroom-Zeichenfolge zurück oder -1, wenn keine gültige Vroom-Zeichenfolge vorhanden ist.
Lesbare Version
Erläuterung
quelle
Perl -nE, 35 Bytes
Dies verwendet die Eskimo-Begrüßung (
}{
), die einen kurzen Einblick in den Umgang mit der-n
Option durch Perl gibt.quelle
Java 8, 109 Bytes
Probieren Sie es online aus.
Erläuterung:
quelle
C # (.NET Core) ,
134122 BytesProbieren Sie es online!
-12 Bytes:
null
Check in Loop verschobenfor
und Klammern entferntUngolfed:
quelle
{}
wenn nur eine Anweisung in derfor
Schleife verwendet wird: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;
, nicht sicher, ob dies wichtig ist lol-1
für jede Zeile, für die er nicht funktioniert, ein ausgibt, sondern-1
für immer, da keine Prüfung auf erfolgtnull
.a = Console.ReadLine()
Wenn Sie also jedes Mal eine Eingabe für die Schleife anfordern, wartet die Schleife nur und wird nicht-1
für immer gedruckt05AB1E ,
3937 BytesObwohl 05AB1E eine Golf-Sprache ist, sind Regex-basierte Herausforderungen definitiv nicht ihre starke Suite, da es keine Regex-eingebauten hat.
[]
Wird ausgegeben, wenn keine Übereinstimmung gefunden wurde.Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
C ++, MSVC,
164159 Bytes-5 Bytes dank Zacharý
Es wird auch nur mit dem
regex
Header kompiliertTests:
quelle
using namespace std;
würde ein paar Bytes sparen