Muitas vezes, vemos vídeos de música no Youtube. Muitos canais do YouTube que hospedam vídeos de música são "alimentados por VEVO". Eles podem ser facilmente identificados, incorporando o VEVO nas miniaturas de vídeo e anexando o VEVO ao nome do canal.
Agora, escreva algum código para testar se uma string fornecida pelo usuário é uma conta de usuário VEVO ou não.
Requisitos para cadeias de conta de usuário válidas do VEVO:
Deve conter apenas caracteres maiúsculos, minúsculos e dígitos. (sem espaço em branco ou pontuação)
Não deve exceder 80 caracteres.
Deve ter substring "VEVO" no final da string
Casos de teste:
Entradas válidas:
AdeleVEVO
ConnieTalbotVEVO
SHMVEVO
justimberlakeVEVO
DJMartinJensenVEVO
test123VEVO
Entradas inválidas:
syam kapuk
jypentertainment
Noche de Brujas
testVEVO123
Obviamente, como se trata de código-golfe , estou procurando o código mais curto usando qualquer linguagem de programação.
fonte
VEVO
eūņīčōdēVEVO
test123VeVo
e um com mais de 80 caracteresạ
eẠ
e algarismos em outros alfabetos, por exemplo九
(9).Respostas:
Python 2 , 45 bytes
-3 bytes graças a Rod. -2 bytes graças a ovs.
Experimente online!
Uma solução regex acaba sendo mais longa.
fonte
Japt v2.0a0,
2016 bytesRetorna
1
para válido ou0
inválido.[\l\d]
também funcionaria no lugar da[^\W_]
mesma contagem de bytes.Experimente | Verifique todos os casos de teste
Explicação :
è
conta o número de correspondências do RegEx na entrada. No Japt, a\w
classe RegEx não inclui sublinhado.fonte
;¥oB+mc)¯80 ©"VEVO"¥Ut4n
B+mc
:) Aliás, se Japt2 tivesse uma classe de personagem[A-Za-z0-9]
, poderíamos vencer a Retina aqui! Pode até valer a pena substituir\w
&\W
.JavaScript (ES6),
27363431 bytesEconomizou 2 bytes graças a @Neil e 3 bytes graças a @Shaggy
Casos de teste
Mostrar snippet de código
fonte
\w
corresponde a_
s?((?!_)\w)
economiza 2 bytes.[^\W_]
trabalhar para uma economia de 3 byte ?/^[^\W_]{0,76}VEVO$/.test
ou algo assim?PHP , 51 bytes
-10 bytes graças a @Ismael Miguel por usar em
<?=
vez de<?php echo
! e removendo a tag de fechamentoExperimente online!
Obrigado pelas outras respostas, para não precisar escrever o regex!
fonte
<?php echo
, você pode fazer<?=preg_match("/^[^\W_]{0,76}VEVO$/",fgets(STDIN));
.[^\W_]
, basta usar\w
, que é o mesmo que[a-zA-Z_]
.APL (Dyalog) , 25 bytes
Experimente online!
fonte
C (gcc) , 83 bytes
Experimente online!
fonte
return
declaração, como isso retornac
? Comportamento indefinido?Dyalog APL , 47 bytes
Experimente online!
Uma solução de regex pura tem 32 bytes , mas também é muito mais chata do que essa abordagem.
fonte
⍣¯1
para verificarVEVO
e precisar do protetor dfn, você pode fazer'VEVO'≡¯4↑⍵
. Mudar um pouco as coisas me deixa com um pouco de{('VEVO'≡¯4↑⍵)∧∧/⍵∊⎕D,⎕A,(819⌶)⎕A}
↑
.. Há outras maneiras melhores de fazer este desafio embora (ie Eriks resposta) e eu como esta ideia: pGrime , 13 bytes
Experimente online!
Nada extravagante aqui. Combine a
e
entrada ntire com o padrão: no máximo 76n
caracteres alfa uméricos, seguidos pela sequênciaVEVO
. Imprime1
para correspondência e0
sem correspondência. Lembrei-me de que a última cotação poderia ser removida no final da linha, mas aparentemente apenas causa um erro de análise.fonte
C # (.NET Core) , 87 + 18 = 105 bytes
Experimente online!
fonte
a=>a.All(x=>char.IsLetterOrDigit(x)&x<123)&a.Length<81&a.EndsWith("VEVO")
somente letras ASCII ou 67 + 18:a=>a.All(x=>char.IsLetterOrDigit(x))&a.Length<81&a.EndsWith("VEVO")
com suporte a Unicode> <> ,
147125 bytesExperimente online!
> <> , 147 bytes
Experimente online!
Isso imprime 1 se a sequência de entrada for válida e nada para uma entrada inválida.
Editar 1: Alteradas as verificações alfanuméricas para usar intervalos em vez de comparar com cada caractere. (economizando 22 bytes)
fonte
Bash,
532630 bytesCódigo de saída 0 para resultados VALID e 1 para resultados INVALID.
Ainda trabalhando com 80 caracteres ou menos.-27 bytes de remoção de saída, graças a @KeyWeeUsr
+4 bytes, regex fixo (igual a todos os outros)
Experimente online!
fonte
echo 1
ser verdadeiro, ou apenas ir sem nenhum eco. Não há necessidade de repetir nada, pois você ainda termina com um código de saída com o qual realmente verifica&&
e #||
> <> ,
10189838194 bytesEditar:
Alterado para a verificação de caracteres não alfanuméricos em vez de alfanuméricos.Voltei porque esqueci de verificar entre Z e a. Obrigado @Emigna. Rasgue esses bytes perdidosEdit 2: Além disso, eu posso simplesmente me livrar daqueles}}}}. Obrigado Teal pelican por isso e encontrando o problema com o TIO
Editar 3: substituiu um ~~~ por ap
Não sei por que isso não funcionará no TIO, mas funciona bem aqui .O problema era que os comandos {} no TIO não funcionam para uma lista vazia. Experimente aquiComo funciona
Por consistência, substituindo o; na última linha com uma instrução inválida, torna todas as saídas um erro.
fonte
C ++,
129105102 bytesGraças a outras respostas que me mostraram que posso contar o número de caracteres
-2 bytes graças a Zacharý
TIO LINK
fonte
r
e apenas ter o regex dentro da chamada parastd::regex_match
?Empilhados , 21 bytes
Experimente online!
fonte
05AB1E , 21 bytes
Experimente online!
fonte
Java (OpenJDK 8) ,
3736 bytesResposta bastante simples usando alguns regex adorável.
Possivelmente, a resposta Java mais curta que eu já fiz.
-1 bytes graças a Neil na resposta Javascript
Experimente online!
fonte
Retina , 18 bytes
Experimente online!
ou
Experimente online!
fonte
Haskell , 75 bytes
-2 bytes graças a user28667.
Experimente online!
fonte
drop(length s-4)
e extrair olength s
Deorst , 22 bytes
Experimente online!
Apenas usa o regex encontrado por Shaggy
fonte
V , 17 bytes
Experimente online!
Hexdump:
Regexes compactadas para a vitória!
fonte
Ruby -n, 22 + 1 = 23 bytes
Saída
0
se verdadeira,nil
se falsaExperimente online!
Usando o mesmo regex chato que todo mundo.
fonte
Swift 4 , 113 bytes
Experimente online!
fonte
AWK , 23 bytes
Experimente online!
Emite o nome da conta se válido e nada emite se não for válido
fonte
Limpo , 61 bytes
Experimente online!
fonte
Perl 5 ,
3529 + 1 (-a) = 30 bytes-6 bytes graças a ETHproductions
Adicionado 4 bytes. Não viu que o sublinhado não era permitido.
Este é o meu primeiro golfe, então espero que eu tenha feito certo.
Retorna 1 se válido, 0 se não.
Experimente online!
fonte
print/^\w{1,76}VEVO$/?1:0
+0
converte booleano de correspondência em número, em vez de?1:0
economiza 2 bytes. Ligando com-ple
impressões$_
para você. Assim:perl -ple '$_=/^[^\W_]{0,76}VEVO$/+0'
. 25 bytes. Se você deseja obter espaços em branco em linhas não correspondentes,$_=/^[^\W_]{0,76}VEVO$/
é 23 bytes.Planilhas Google, 33 bytes
Função de planilha anônima que leva entrada do intervalo
A1
e saídas para a célula chamadorafonte
=RegexMatch(A1,"^[^\W_]{0,76}VEVO")
sem qualquer feedback para o usuário e executaClojure , 146 bytes
Experimente online!
Isso seria muito mais curto usando um regex, mas achei que fazê-lo manualmente seria mais interessante.
fonte
ends-with?
função, mesmo que faça parte da biblioteca padrão.