Вступление
Спидометр моей машины был взломан! Вместо того, чтобы показать мне, как быстро я еду, он просто показывает: "Vroooom!" Пожалуйста, помогите мне знать, как быстро я иду.
Вызов
Возьмите строку в качестве ввода и проверьте, соответствует ли она регулярному выражению /^[Vv]ro*m!$/m
. В английском языке это означает, что любая строка строки должна начинаться с заглавной или строчной буквы v
, затем строчной буквы r
, затем любой суммы (включая ноль) строчной буквы o
, а затем точной строки m!
. Могут быть и другие строки, но строка Vroom должна быть на отдельной строке.
Если вы найдете совпадение, вы должны посчитать количество o
's в строке Vroom и вывести его. Однако, если вы не найдете соответствия, вы должны вывести любое значение по умолчанию, которое не может быть выведено иначе (например, -1
или пустую строку)
Напоминания
- Ввод / вывод в любом разумном формате
- Стандартные лазейки запрещены
- Представление может быть полной программой или функцией
- На входе гарантированно будет только 1 строка Vroom
счет
Это код-гольф , поэтому выигрывает самый короткий код в байтах. Однако я не буду отмечать любой ответ как принятый.
Контрольные примеры
вход
Vrom!
Выход 1
вход
vrooooooom!
Выход 7
вход
Hello, Vroom!
Выход (none)
вход
Foo bar boo baz
Vrooom!
hi
Выход 3
вход
Vrm!ooo
Выход (none)
вход
PPCG puzzlers pie
Выход (none)
вход
hallo
vROOOm!
Выход (none)
источник
Vrm!
отVram!
Python 2 ,
5653 байтаПопробуйте онлайн!
Основное регулярное выражение и группировка, использует флаг re.MULTILINE (который имеет значение 8) и re.search, чтобы гарантировать, что он работает для многострочных входов. Вызывает исключение, когда совпадение не найдено. Спасибо @ovs за -3 байта из
(re.M == 8)
чаевых.источник
re.M
имеет значение8
, так что можете просто использоватьre.search(regex,x,8)
R ,
62 60 5844 байтаПопробуйте онлайн!
@Giuseppe с 14 байтами в гольф.
Оригинальный подход с объяснением:
Попробуйте онлайн!
R имеет семь функций сопоставления с образцом. Наиболее часто используемые из них
grep
,grepl
иsub
, но вот хорошее применение дляregexec
.regexec
дает вам кучу вещей, одна из которых - длина любой захваченной подстроки, в данном случае это(o*)
часть многострочного регулярного выражения.Материал
attr(el .... "m")[2]
- это гольф-способ получить желаемое количество.Возвращает,
NA
если нет совпадений.источник
JavaScript (Node.js) , 41 байт
Попробуйте онлайн!
источник
vroooooooooooom!x\nvrom!
[1]. length
для?length
что в любом случае перешел на новую строку.Powershell,
62585348 байтвозвращает число
o
в первомVroom!
или -4, еслиVroom!
не найден.Примечания:
sls
это псевдоним для Select-String ;(?m-i)
внутри регулярное выражение означает:^
и$
соответствует началу и концу строки вместо начала и конца строки.|% M*
является ярлыком для свойстваMatches
, которое дает первое совпадение, потому что мы не используем-AllMatches
параметр.Тестовый скрипт:
Выход:
источник
PowerShell , 83 байта
Попробуйте онлайн!
-split
s ввод$args
на`n
ewlines, направляет их в цикл for. На каждой итерации мы проверяем,[regex]::Match
является ли наш тип.success
или нет. Если это так, мы оставляем$x
(объект результатов regex) на конвейере. Вне цикла мы берем.length
свойство - если это объект результатов регулярного выражения, это длина совпадения (например, «Vroom!» Будет 6); если это не объект результатов регулярного выражения, длина равна нулю. Затем мы вычитаем,4
чтобы убрать отсчеты дляVrm!
и оставить это на конвейере. Вывод неявный. Выводит a,-4
если совпадений не найдено.источник
sls "^[Vv]ro*m!$"
?sls
вернет('','Vroom!','')
.sls
вместо этого[regex]::Match
Сетчатка , 21 байт
Попробуйте онлайн! Объяснение:
L
перечисляет совпадения, поэтому, если регулярное выражение не совпадает, вывод пуст.$
результатом является замена, а не совпадение.m
делает его многострочным соответствием (эквивалент трейлингаm
в вопросе)..
В замене делает его выход длина захвата в десятичной системе .источник
СНОБОЛ4 (CSNOBOL4) ,
9982 байтаПопробуйте онлайн!
Довольно прямой перевод спецификации SNOBOL, читает каждую строку, пока не найдет ту, которая соответствует
^[Vv]ro*m!$
, а затем выводит длинуo*
бита.Входит в бесконечный цикл, если не
Vroom!
может быть найдено.источник
Perl 6 , 26 байт
Попробуйте онлайн!
источник
C (gcc) ,
188183 байтаЗачем использовать регулярные выражения, если вместо этого вы можете использовать конечный автомат? :-)
Попробуйте онлайн!
источник
Stax , 16 байт
Запустите и отладьте его
источник
Haskell ,
757169 байтПопробуйте онлайн!
Нет регулярных выражений Вместо этого строит все допустимые
Vrooom!
строки до достаточной длины и сравнивает строки ввода с ними, собирая количествоo
s в списке. Таким образом, для неверных входных данных возвращается пустой список.источник
C (gcc) ,
104100 байтПопробуйте онлайн!
Выведите
n
для каждой действительной строки, точно в требовании (ничего, если нет действительной строки,n
если точно одна)источник
Japt , 18 байт
Попробуйте онлайн!
Сохраняет байт, принимая входные данные в виде массива строк.
Включает непечатаемый символ между
]
и*
.Объяснение:
источник
C (gcc) ,
138124 байтаВот скучный способ регулярных выражений.
Попробуйте онлайн!
источник
Pyth , 28 байт
Попробуйте онлайн!
источник
Pyth, 20 байт
Выводится в виде списка, содержащего только число «о», или пустого списка, если нет Vroom.
Попробуй здесь
объяснение
источник
Пип , 21 байт
Попробуйте онлайн!
Соответствие регулярному выражению
^[Vv]r(o*)m!$
в многострочном режиме; выходная длина группы захвата.источник
сфк , 94 байта
Попробуйте онлайн!
Дает,
-1
когда ты не ухаживаешь.источник
Красный , 104 байта
Попробуйте онлайн!
Простое решение. Красные -
parse
это круто и читабельно, но слишком долго по сравнению с регулярными выражениямиисточник
J 35 байт
Возвращает отрицательное значение 1, если шаблон не совпадает.
источник
JavaScript,
907361 байтПопробуйте онлайн!
Замените символы, которые не были захвачены,
(o*)
пустой строкой, возвращениемlength
строки, содержащей только,"o"
или-1
если результирующая строка пуста.источник
Рубин, 32 байта
Сопоставляет строку с регулярным выражением, затем использует переменные группы магического регулярного выражения Ruby, чтобы получить размер первой группы.
Назовите это так:
источник
Рубин ,
2829 байтПопробуйте онлайн!
Многострочные строки требуют еще три байта. Я не уверен, что это жесткое требование. Если так, я обновлю это.
источник
VROM!
Clojure , 90 байт
Попробуйте онлайн!
Эта анонимная функция возвращает число «o» в строке vroom или -1, если нет допустимой строки vroom.
Читаемая версия
объяснение
источник
perl -nE, 35 байт
При этом используется эскимос приветствия (
}{
), который неправильно описывает, как-n
опция обрабатывается в Perl.источник
Java 8, 109 байт
Попробуйте онлайн.
Объяснение:
источник
C # (.NET Core) ,
134122 байтаПопробуйте онлайн!
-12 байт: перенесены
null
проверки вfor
цикл и удалены скобкиUngolfed:
источник
{}
при использовании только одного оператора вfor
цикле: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;
, не уверен, если это важно, LOL-1
для каждой строки, с которой он не работает, но он будет выводить-1
s всегда, так как нет проверкиnull
.a = Console.ReadLine()
делает цикл, поэтому каждый раз, когда вы запрашиваете ввод для продолжения цикла, если нет ввода, цикл просто ждет, а не печатает-1
вечно05AB1E ,
3937 байтХотя 05AB1E является языком игры в гольф, проблемы, связанные с регулярными выражениями, определенно не являются его сильной стороной, поскольку в нем нет встроенных регулярных выражений.
Выводится,
[]
если совпадений не найдено.Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
источник
C ++, MSVC,
164159 байт-5 байт благодаря Захари
Компилируется даже с
regex
заголовкомТесты:
источник
using namespace std;
что сэкономит несколько байтов