Neste desafio de código de golfe, você verificará hashtags!
#What_your_code_should_do
Entrada é uma sequência. Emita um valor verdadeiro se for uma hashtag válida e, caso contrário, um valor falso.
Definimos uma string como um Hashtag válido se ...
- Começa com um hash (
#
). - Ele não tem um número logo após a hashtag (por exemplo,
#2016USElection
não é uma hashtag válida). - Não possui "caracteres especiais" (ou seja, qualquer caractere que não seja um alfabeto, sublinhado (
_
) ou número).
Você pode assumir que a entrada contém apenas caracteres ASCII. (Seria injusto se fizéssemos o Unicode também.)
#Regras
Aplicam-se regras básicas de golfe com código .
#Exemplos
Verdade:
#
#e
#_ABC
#thisisanunexpectedlylongstringxoxoxoxo
#USElection2016
Falsy:
Hello, World!
#12thBday
#not-valid
#alsoNotValid!
#!not_a_hash
code-golf
string
decision-problem
Laikoni
fonte
fonte
#
realmente uma hashtag válida?#öäü
válido?#
não é uma hashtag válida por nenhum sistema, Facebook ou Twitter, ele também quebra as regras definidas, também não tenho certeza de que #_ABC é válido novamente nelas, mas não tenho certeza disso.an alphabet
significa ascii letra maiúscula ou minúscula? ieabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
?Respostas:
Retina , 12 bytes
Imprime
1
para hashtags e0
outros.Experimente online! (A primeira linha ativa um conjunto de testes separado por avanço de linha.)
Não há muito a explicar aqui, esta é uma implementação literal da definição:
^
e$
são apenas âncoras, garantindo que a correspondência cubra toda a cadeia,#
verifique se a cadeia começa com a#
,(?!\d)
garante que o próximo caractere não seja um dígito (sem avançar posição do mecanismo regex),\w*
verifica se podemos chegar ao final da string com zero ou mais letras, dígitos ou sublinhados.Por padrão, a Retina conta o número de correspondências do regex especificado, e é por isso que isso fornece
1
tags hash válidas e0
outras coisas.fonte
(?!\d)
é(?=\D)
... mas eu não sei como você escreveu Retina. É possível usar(?\D)
sem o=
e salvar um byte? (Se não, vale a pena editar o idioma de modo que é factível?)(?!\d)
é diferente(?=\D)
, pois o último requer algum caractere após a posição atual, enquanto o primeiro está satisfeito com o final da string. Independentemente disso, atualmente não é possível ajustar o sabor do regex (já que estou apenas entregando o regex ao mecanismo de regex do .NET), mas fazer essas alterações está no roteiro em algum lugar (muito distante) abaixo da linha.=
opcional. A(?...)
sintaxe inteira foi escolhida para a extensibilidade, pois o personagem após o?
nunca é opcional e determina que tipo de grupo é esse, e eu acho que não quero desistir dessa extensibilidade.(?{
e(??
e(?<
(tanto para a captura de grupos e para lookbehind) e(?-
e(?1
e, claro, o básico(?:
. E talvez alguns que eu tenha perdido.Perl, 22 bytes
Código de 21 bytes +1 para
-p
Imprime 1 se for uma hashtag válida. Seqüência vazia, caso contrário.
Uso
Economizou 2 bytes graças a Martin Ender (e outros 4 usando seu método de busca )
Perl, 18 bytes
Código de 17 bytes +1 para
-p
Usando o lookaround de Martin, isso pode ser muito mais curto!
fonte
JavaScript (ES6), 25 bytes
fonte
C, 80 bytes
A função
f()
pega a string como argumento e modificaint *b
para 1 ou 0 para indicar verdade / falsidade.Se a string sempre tiver pelo menos um caractere (ou seja, nunca uma string vazia), um byte poderá ser cortado por 79 bytes:
fonte
Python 3, 41 bytes
fonte
None
falsos, acho que deixarbool()
tudo bem.re.compile('#(?!\d)\w*$').match
? É aceitável descartar of=
BTW.Braquilog , 55 bytes
Isso não usa regex.
Explicação
fonte
Python 3,
10393 bytesO
#
serTrue
me matou aqui, eu tinha para enumerar a corda para evitar um erro índice na entrada de caracteres única.fonte
isalpha()
método na minha resposta py3: D "#" sendo verdadeiro, também me destruiu.PowerShell v2 +, 25 bytes
Usando a expressão regular de Martin , envolvida apenas no
-match
operador do PowerShell, juntamente com a entrada$args
. Para valores truthy / falsey, isso retornará a própria string em uma correspondência (um valor de verdade) ou nada em uma não correspondência (um valor de falsey). Isso ocorre porque quando um operador de comparação é aplicado a uma matriz, ele retorna qualquer coisa que satisfaça esse operador.Alguns exemplos (agrupados
[bool]
para tornar a saída mais clara):fonte
Mathematica,
524643 bytesSalvo
69 bytes devido a @MartinEnder .Função. Pega uma string como entrada e retorna
True
ouFalse
como saída. Muito simples, apenas combina com o regex/#(?!\d)\w*/
.fonte
hello#world
uma vez que você não tem as âncoras de sequência de início e fim. Eu não conheço o Mathematica, então não tenho certeza.Dyalog APL ,
2220 bytesSem RegEx:
-2 graças a ngn
fonte
Python 2, 79 bytes
Primeira tentativa de golfe. Versão não destruída:
fonte
Oitava,
37565443 bytesObrigado a @LuisMendo por remover 8 bytes!
Não é muito golfista, mas muito embutido.
Editar: o código original aceita cadeias sem '#' à esquerda. Acho que deveria ter ficado com o regex.
Conjunto de testes em ideone .
fonte
Python3 -
156128 bytesUma solução que não usa regex. 0 é falsey e todos os outros valores são verdadeiros.
Obrigado a @LeakyNun por salvar bytes!
fonte
+0
depoisn[1:]
, mas, infelizmente, ainda não funcionou: / Deu falso para "#d".+0
mas falha em "# d" Eu testei no Python3 embora Não tenho certeza se ele vai trabalhar em python2..IndexOutOfRange
para "#" eFalse
para "#d".lambda n:n=="#"or(n[0]=="#")*all(any([47<ord(c)<58,64<ord(c)<91,ord(c)==95,96<ord(c)<123])for c in n[1:]+"0")*~(47<ord(n[1])<58)
para 128 bytes. Prova de que funciona #Lua,
595554 bytesCódigo
Como funciona:
#
.Recebe entrada da linha de comando. Imprime
true
se a string for uma hashtag válida, caso contrário, ela será impressanil
.fonte
Planilhas Google, 30 bytes
Uma função de planilha anônima que recebe entrada da célula
A1
a compara com a expressão RE2 e gera o resultado para a célula que está chamando.fonte
05AB1E , 18 bytes
Código:
Usa a codificação CP-1252 . Experimente online! .
fonte
Sed 19 + 2 = 21 bytes
Isso filtra todas as não hashtags e gera hashtags válidas.
Executar como
sed -rn "/^#$|^#[a-z]\w*$/Ip"
. Saia com Ctrl+ D(envie EOF).fonte
GNU grep, 15 + 2 = 17 bytes
Teste:
Saída:
fonte
Python 3, 97 bytes
70 bytes 56 bytes(Código alterado)
legível por humanosfonte
lambda x:all(True==[x[0]=="#",x[1].isalpha(),x[2:].isalpha()])
isalpha
?Pyke, 19 bytes
Experimente aqui!
Solução rápida para hoje à noite
fonte
#123
retorna ainda nada, não deve retornar 0?Ruby, 16 +
31 (n
sinalizador) =1917 bytesUsa
0
como verdade enil
como falsidade.Execute-o como
ruby -ne 'p~/^#(?!\d)\w*$/'
. Obrigado a @manatwork por corrigir o erro do bash ao executar o programa.fonte
!
, consulte designadores de evento no homem bash.)ML padrão ,
121118107 bytesExperimente online! Solução funcional sem usar regex. Declara uma função anônima que está vinculada ao identificador implícito de resultados
it
.fonte
isAlphaNum$orelse
isso é um pouco ameaçador ... #orelse
eandalso
.AlphaNum
,orelse
!! (orelse what?
)o explode
no final para ser bastante ameaçador também ...Excel VBA, 54 bytes
Função de janela imediata VBE anônima que recebe entrada da célula
[A1]
, verifica se o valor da célula corresponde aoLike
padrão e gera saídaBoolean
para a janela imediata VBEfonte
Haskell , 79 bytes
Experimente online!
fonte
C #, 92 bytes
C # lambda (
Predicate
) onde entrada é astring
e saída é abool
.Experimente online!
fonte
Lua, 39 bytes
Copypasta simples da descrição da partida. Saídas falsas,
nil
se não hashtag, retornam verdadeiramente a hashtag.Pode ser reduzido para mais um byte usando
find
se a lista de saída de dois valores (que é verdadeira) não quebra as regras.fonte
#
por si só.#
é uma hashtag no Twitter ou no Facebook, é irrelevante para esse desafio. A especificação é muito clara no fato de que#
deve ser considerada uma hashtag para os propósitos deste desafio. E enquanto eu não tenho verificado todas as respostas, tudo o que fiz de verificação não aceitar#
como uma hashtag, então eu não tenho certeza que as respostas top você está se referindo.Clojure,
130135132 bytes+5 bytes para lidar com um NPE que ocorreu quando a sequência consistia em apenas uma hashtag.
-2 bytes usando
Character/isLetterOrDigit
.Ungolfed:
fonte
Java 8,
575428 bytesA resposta Retina do porto de Martin Ender para salvar alguns bytes e corresponder aos casos de teste adicionados.
Nem
String#matches
sempre isso corresponde a toda a String, portanto não há necessidade^...$
.Experimente aqui.
fonte