Wprowadzenie
Prędkościomierz mojego samochodu został zhakowany! Zamiast pokazywać mi, jak szybko jadę, pokazuje tylko: „Vroooom!” Proszę, pomóż mi wiedzieć, jak szybko jadę.
Wyzwanie
Weź ciąg jako dane wejściowe i sprawdź, czy pasuje do wyrażenia regularnego /^[Vv]ro*m!$/m
. W języku angielskim oznacza to, że każda linia łańcucha musi zaczynać się od dużej lub małej litery v
, następnie małą literą r
, a następnie dowolną ilością (w tym zero) małej litery o
, a następnie dokładnym łańcuchem m!
. Mogą istnieć inne linie, ale łańcuch Vrooma musi znajdować się we własnej linii.
Jeśli znajdziesz dopasowanie, musisz policzyć ilość o
ciągów Vrooma i wyprowadzić go. Jeśli jednak nie znajdziesz dopasowania, powinieneś wypisać dowolną wartość domyślną, której inaczej nie można wypisać (np. -1
Pusty ciąg)
Przypomnienia
- I / O ma dowolny rozsądny format
- Standardowe luki są zabronione
- Zgłoszenie może być pełnym programem lub funkcją
- Gwarantowane wejście ma tylko 1 ciąg Vrooma
Punktacja
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach. Jednakże , nie będzie oznaczać żadnej odpowiedzi jako przyjęte.
Przypadki testowe
Wejście
Vrom!
Wynik 1
Wejście
vrooooooom!
Wynik 7
Wejście
Hello, Vroom!
Wynik (none)
Wejście
Foo bar boo baz
Vrooom!
hi
Wynik 3
Wejście
Vrm!ooo
Wynik (none)
Wejście
PPCG puzzlers pie
Wynik (none)
Wejście
hallo
vROOOm!
Wynik (none)
źródło
Vrm!
odVram!
Python 2 ,
5653 bajtówWypróbuj online!
Podstawowe wyrażenia regularne i grupowanie, używa flagi re.MULTILINE (która ma wartość 8) i ponownie przeszukuje, aby upewnić się, że działa dla danych wejściowych wieloliniowych. Zgłasza wyjątek, gdy nie znaleziono dopasowania. Dzięki @ovs za -3 bajty od
(re.M == 8)
końcówki.źródło
re.M
ma wartość8
, więc można po prostu użyćre.search(regex,x,8)
R ,
62 60 5844 bajtówWypróbuj online!
@Giuseppe z 14 bajtami golfowymi.
Oryginalne podejście z wyjaśnieniem:
Wypróbuj online!
R ma siedem funkcji dopasowania wzorca. Najczęściej używane są
grep
,grepl
isub
, ale tutaj jest dobry użytekregexec
.regexec
daje ci kilka rzeczy, z których jedną jest długość dowolnego przechwyconego podłańcucha, w tym przypadku(o*)
część wyrażenia regularnego wieloliniowego.attr(el .... "m")[2]
Rzeczy jest Golfy sposób, aby uzyskać żądany numer.Zwraca,
NA
jeśli nie ma dopasowania.źródło
JavaScript (Node.js) , 41 bajtów
Wypróbuj online!
źródło
vroooooooooooom!x\nvrom!
[1]. length
?length
był na nowej linii.PowerShell,
62585348 bajtówzwraca liczbę z
o
pierwszegoVroom!
lub -4, jeśliVroom!
nie znaleziono.Uwagi:
sls
jest aliasem dla Select-String ;(?m-i)
wewnątrz wyrażenia regularnego oznacza:^
i$
dopasuj początek i koniec linii, zamiast początku i końca łańcucha.|% M*
to skrót do właściwościMatches
, która daje pierwsze dopasowanie, ponieważ nie używamy-AllMatches
parametru.Skrypt testowy:
Wynik:
źródło
PowerShell , 83 bajty
Wypróbuj online!
-split
s dane wejściowe$args
w`n
ewlines, potokują je w pętli for. Przy każdej iteracji sprawdzamy, czy nasza[regex]::Match
jest,.success
czy nie. Jeśli tak, zostawiamy$x
(obiekt wyników wyrażenia regularnego) w potoku. Poza pętlą bierzemy.length
właściwość - jeśli jest to obiekt wyników wyrażenia regularnego, jest to długość dopasowania (np. „Vroom!” To 6); jeśli nie jest to obiekt wyników wyrażenia regularnego, długość wynosi zero. Następnie odejmujemy,4
aby usunąć liczby dlaVrm!
i pozostawiamy to w kolejce. Wynik jest niejawny. Zwraca a,-4
jeśli nie znaleziono dopasowania.źródło
sls "^[Vv]ro*m!$"
?sls
zwrócą('','Vroom!','')
na przykład.sls
zamiast tego[regex]::Match
Retina , 21 bajtów
Wypróbuj online! Objaśnienie:
L
wyświetla listę dopasowań, więc jeśli wyrażenie regularne nie pasuje, dane wyjściowe są puste.$
powoduje, że wynikiem jest zastąpienie, a nie dopasowanie.m
sprawia, że jest to dopasowanie wieloliniowe (odpowiednik końcowegom
w pytaniu)..
W substytucji sprawia, że wyjście długość przechwytywania w systemie dziesiętnym.źródło
SNOBOL4 (CSNOBOL4) ,
9982 bajtówWypróbuj online!
Całkiem bezpośrednie tłumaczenie specyfikacji SNOBOL, odczytuje każdą linię, aż znajdzie taką, która jest zgodna
^[Vv]ro*m!$
, a następnie wyprowadza długośćo*
bitu.Wchodzi w nieskończoną pętlę, jeśli nie
Vroom!
można jej znaleźć.źródło
Perl 6 , 26 bajtów
Wypróbuj online!
źródło
C (gcc) ,
188183 bajtówPo co używać wyrażeń regularnych, jeśli zamiast tego można użyć automatu stanów? :-)
Wypróbuj online!
źródło
Stax , 16 bajtów
Uruchom i debuguj
źródło
Haskell ,
757169 bajtówWypróbuj online!
Brak wyrażenia regularnego. Zamiast tego buduje wszystkie poprawne
Vrooom!
ciągi do wystarczającej długości i porównuje z nimi wiersze danych wejściowych, zbierając liczbęo
s na liście. Zatem dla nieprawidłowych danych wejściowych zwracana jest pusta lista.źródło
C (gcc) ,
104100 bajtówWypróbuj online!
Wypisuj
n
dla każdego poprawnego wiersza dokładnie w wymaganiu (nic, jeśli nie ma poprawnego wiersza,n
jeśli dokładnie jeden)źródło
Japt , 18 bajtów
Wypróbuj online!
Zapisano bajt, przyjmując dane wejściowe jako tablicę wierszy.
Obejmuje niedrukowalny znak między
]
i*
.Wyjaśnienie:
źródło
C (gcc) ,
138124 bajtówOto nudny sposób wyrażenia regularnego.
Wypróbuj online!
źródło
Pyth , 28 bajtów
Wypróbuj online!
źródło
Pyth, 20 bajtów
Wyprowadza jako listę zawierającą tylko liczbę „o” lub pustą listę, jeśli nie ma Vrooma.
Wypróbuj tutaj
Wyjaśnienie
źródło
Pip , 21 bajtów
Wypróbuj online!
Dopasuj wyrażenie regularne
^[Vv]r(o*)m!$
w trybie multilinii; długość wyjściowa grupy przechwytywania.źródło
sfk , 94 bajty
Wypróbuj online!
Daje,
-1
gdy się nie wyposażysz.źródło
Czerwony , 104 bajty
Wypróbuj online!
Proste rozwiązanie. Red's
parse
jest fajny i czytelny, ale zbyt długi w porównaniu do wyrażenia regularnegoźródło
J, 35 bajtów
Zwraca ujemną 1, jeśli wzór nie pasuje.
źródło
JavaScript,
907361 bajtówWypróbuj online!
Zastąp znaki, które nie są przechwytywane,
(o*)
pustym ciągiem, zwróćlength
ciąg zawierający tylko"o"
lub-1
jeśli wynikowy ciąg jest pusty.źródło
Rubinowy, 32 bajty
Dopasowuje ciąg do wyrażenia regularnego, a następnie używa magicznych zmiennych grupy wyrażeń regularnych Ruby, aby uzyskać rozmiar pierwszej grupy.
Nazwij to tak:
źródło
Rubin ,
2829 bajtówWypróbuj online!
Ciągi wieloliniowe wymagają jeszcze trzech bajtów. Nie jestem pewien, czy to trudne wymaganie. Jeśli tak, zaktualizuję to.
źródło
VROM!
Clojure , 90 bajtów
Wypróbuj online!
Ta anonimowa funkcja zwraca liczbę „o” w ciągu vroom lub -1, jeśli nie ma prawidłowego ciągu vroom.
Wersja do odczytu
Wyjaśnienie
źródło
perl -nE, 35 bajtów
Korzysta z Eskimo pozdrowienia (
}{
), które nadużywają szybkiego sposobu obsługi-n
opcji przez perla.źródło
Java 8, 109 bajtów
Wypróbuj online.
Wyjaśnienie:
źródło
C # (.NET Core) ,
134122 bajtówWypróbuj online!
-12 bajtów: przeniesiono
null
czek dofor
pętli i usunięto nawiasyNie golfowany:
źródło
{}
gdy używa się tylko jednej instrukcji wfor
pętli: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;
, nie jestem pewien, czy to ważny lol-1
dla każdego wiersza, na którym nie działa, ale wyświetli-1
s na zawsze, ponieważ nie ma możliwości sprawdzenianull
.a = Console.ReadLine()
robi pętlę, więc za każdym razem żądasz wejście do pętli iść dalej, jeśli nie ma sygnału, pętla tylko czeka, nie drukuje-1
na zawsze05AB1E ,
3937 bajtówChociaż 05AB1E jest językiem golfowym, wyzwania oparte na wyrażeniach regularnych zdecydowanie nie są jego mocnym zestawem, ponieważ nie ma wbudowanych wyrażeń regularnych.
Dane wyjściowe,
[]
jeśli nie znaleziono dopasowania.Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
źródło
C ++, MSVC,
164159 bajtów-5 bajtów dzięki Zacharýowi
Kompiluje nawet z samym
regex
nagłówkiemTesty:
źródło
using namespace std;
że zaoszczędziłbym kilka bajtów