Introdução
Meu velocímetro do carro foi hackeado! Em vez de me mostrar o quão rápido estou dirigindo, ele apenas mostra: "Vroooom!" Por favor, me ajude a saber o quão rápido estou indo.
Desafio
Pegue uma string como entrada e verifique se ela corresponde ao regex /^[Vv]ro*m!$/m
. Em inglês, isso significa que qualquer linha da sequência deve começar com maiúscula ou minúscula v
, depois minúscula r
e depois qualquer valor (incluindo zero) da letra minúscula e o
, em seguida, a sequência exata m!
. Pode haver outras linhas, mas a string Vroom deve estar na sua própria linha.
Se você encontrar uma correspondência, deve contar a quantidade de o
s na string Vroom e produzi-la. Se você não encontrar uma correspondência, no entanto, deve gerar qualquer valor padrão que não possa ser emitido de outra forma (como -1
uma string vazia)
Lembretes
- E / S está em qualquer formato razoável
- As brechas padrão são proibidas
- O envio pode ser um programa ou função completo
- A entrada é garantida para ter apenas 1 string Vroom
Pontuação
Isso é código-golfe , então o código mais curto em bytes vence. No entanto , não marcarei nenhuma resposta como aceita.
Casos de teste
Entrada
Vrom!
Resultado 1
Entrada
vrooooooom!
Resultado 7
Entrada
Hello, Vroom!
Resultado (none)
Entrada
Foo bar boo baz
Vrooom!
hi
Resultado 3
Entrada
Vrm!ooo
Resultado (none)
Entrada
PPCG puzzlers pie
Resultado (none)
Entrada
hallo
vROOOm!
Resultado (none)
fonte
Vrm!
deVram!
Python 2 ,
5653 bytesExperimente online!
Regex básico e agrupamento, usa o sinalizador re.MULTILINE (que tem um valor de 8) e re.search para garantir que funcione para entradas com várias linhas. Gera uma exceção quando nenhuma correspondência é encontrada. Obrigado a @ovs pelos -3 bytes da
(re.M == 8)
ponta.fonte
re.M
tem o valor8
, então pode apenas usarre.search(regex,x,8)
R ,
62 60 5844 bytesExperimente online!
@ Giuseppe com 14 bytes de golfe.
Abordagem original com explicação:
Experimente online!
R possui sete funções de correspondência de padrões. Os mais utilizados são
grep
,grepl
esub
, mas aqui está um uso bom pararegexec
.regexec
fornece várias coisas, uma das quais é o comprimento de qualquer substring capturado, neste caso, a(o*)
parte do regex multilinha.O
attr(el .... "m")[2]
material é uma maneira de obter o número desejado.Retorna
NA
se não houver correspondência.fonte
JavaScript (Node.js) , 41 bytes
Experimente online!
fonte
vroooooooooooom!x\nvrom!
[1]. length
?length
estava quebrando uma nova linha de qualquer maneira.Powershell,
62585348 bytes bytesretorna números de
o
em um primeiroVroom!
, ou -4 seVroom!
não for encontrado.Notas:
sls
é o alias para Select-String ;(?m-i)
regexp interno significa:^
e$
corresponda ao início e ao fim de uma linha, em vez do início e do fim de uma sequência.|% M*
é um atalho para a propriedadeMatches
, que fornece uma primeira correspondência porque não usamos o-AllMatches
parâmetroScript de teste:
Resultado:
fonte
PowerShell , 83 bytes
Experimente online!
-split
s a entrada$args
nas`n
linhas de ew, canaliza essas para um loop for. A cada iteração, verificamos se o nosso[regex]::Match
é.success
ou não. Nesse caso, deixamos$x
(o objeto de resultados regex) no pipeline. Fora do loop, pegamos a.length
propriedade - se for o objeto de resultados de regex, esse é o comprimento da partida (por exemplo, "Vroom!" Seria 6); se não for um objeto de resultados de regex, o comprimento será zero. Subtraímos então4
para remover as contagensVrm!
e deixá-las no pipeline. A saída está implícita. Emite a-4
se nenhuma correspondência for encontrada.fonte
sls "^[Vv]ro*m!$"
?sls
, retornará('','Vroom!','')
por exemplo.sls
vez disso[regex]::Match
Retina , 21 bytes
Experimente online! Explicação:
L
lista correspondências, portanto, se o regex falhar, a saída estará vazia.$
faz com que o resultado seja a substituição e não a correspondência.m
faz com que seja uma correspondência multilinha (o equivalente ao finalm
da pergunta). A.
substituição substitui o tamanho da captura em decimal.fonte
SNOBOL4 (CSNOBOL4) ,
9982 bytesExperimente online!
Tradução SNOBOL bastante direta da especificação, lê cada linha até encontrar uma que corresponda
^[Vv]ro*m!$
e depois gera o comprimento doo*
bit.Insere um loop infinito se não for
Vroom!
possível encontrar.fonte
Perl 6 , 26 bytes
Experimente online!
fonte
C (gcc) ,
188183 bytesPor que usar expressões regulares quando você pode usar uma máquina de estado? :-)
Experimente online!
fonte
Stax , 16 bytes
Execute e depure
fonte
Haskell ,
757169 bytesExperimente online!
Sem regex. Em vez disso, constrói todas as
Vrooom!
cadeias válidas até um comprimento suficiente e compara as linhas da entrada com elas, coletando o número deo
s em uma lista. Assim, para entradas inválidas, uma lista vazia é retornada.fonte
C (gcc) ,
104100 bytesExperimente online!
Saída
n
para cada linha válida, exatamente no requisito (nada se não houver linha válida,n
se for exatamente uma)fonte
Japonês , 18 bytes
Experimente online!
Salva um byte, recebendo a entrada como uma matriz de linhas.
Inclui um caractere não imprimível entre
]
e*
.Explicação:
fonte
C (gcc) ,
138124 bytesAqui está a maneira regex chata.
Experimente online!
fonte
Pitão , 28 bytes
Experimente online!
fonte
Pitão, 20 bytes
Saída como uma lista contendo apenas o número de 'o's ou uma lista vazia, se não houver Vroom.
Experimente aqui
Explicação
fonte
Pip , 21 bytes
Experimente online!
Regex de correspondência
^[Vv]r(o*)m!$
no modo multilinha; comprimento de saída do grupo de captura.fonte
sfk , 94 bytes
Experimente online!
Dá
-1
quando você não está vomitando.fonte
Vermelho , 104 bytes
Experimente online!
Uma solução simples. Vermelho
parse
é legal e legível, mas muito longo em comparação com regexfonte
J, 35 bytes
Retorna 1 negativo se o padrão não corresponder.
fonte
JavaScript,
907361 bytesExperimente online!
Substitua caracteres que não são capturados por
(o*)
uma sequência vazia, retornolength
da sequência contendo apenas"o"
ou-1
se a sequência resultante estiver vazia.fonte
Ruby, 32 bytes
Corresponde a string ao regex e, em seguida, usa as variáveis do grupo regex mágico do Ruby para obter o tamanho do primeiro grupo.
Chame assim:
fonte
Ruby ,
2829 bytesExperimente online!
Cadeias de linhas múltiplas requerem mais três bytes. Não tenho certeza se isso é um requisito difícil. Se assim for, eu vou atualizar isso.
fonte
VROM!
Clojure , 90 bytes
Experimente online!
Essa função anônima retorna o número de "o" s na cadeia de caracteres do vroom ou -1 se não houver uma sequência de caracteres do vroom válida.
Versão legível
Explicação
fonte
perl -nE, 35 bytes
Isso usa a saudação esquimó (
}{
), que abusa da maneira rápida de como a-n
opção é tratada pelo perl.fonte
Java 8, 109 bytes
Experimente online.
Explicação:
fonte
C # (.NET Core) ,
134122 bytesExperimente online!
-12 bytes:
null
verificação movida nofor
loop e colchetes removidosUngolfed:
fonte
{}
quando se utiliza apenas uma declaração nofor
loop: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;
, não sei se isso é lol importante-1
para cada linha em que não funciona, mas também produz uma-1
eternidade, pois não há verificaçãonull
.a = Console.ReadLine()
faz com que o loop, de modo que cada vez que você está solicitando entrada para o loop para continuar, se não houver nenhuma entrada, o circuito está apenas esperando, não está imprimindo-1
para sempre05AB1E ,
3937 bytesEmbora 05AB1E seja uma linguagem de golfe, os desafios baseados em regex definitivamente não são sua suíte forte, já que não possui recursos embutidos em regex.
Saída
[]
se nenhuma correspondência foi encontrada.Experimente online ou verifique todos os casos de teste .
Explicação:
fonte
C ++, MSVC,
164159 bytes-5 bytes graças a Zacharý
Compila mesmo com
regex
apenas o cabeçalhoTestes:
fonte
using namespace std;
iria salvar alguns bytes