Dans ce défi de golf de code, vous vérifierez les hashtags!
#What_your_code_should_do
L'entrée est une chaîne. Sortez une valeur véridique si c'est un hashtag valide, et une valeur falsifiée sinon.
Nous définissons une chaîne comme un hashtag valide si ...
- Cela commence par un hachage (
#
). - Il n'a pas de numéro juste après le hashtag (par exemple,
#2016USElection
n'est pas un hashtag valide). - Il n'a pas de "caractères spéciaux" (c'est-à-dire aucun caractère qui n'est pas un alphabet, un trait de soulignement (
_
) ou un nombre).
Vous pouvez supposer que l'entrée ne contient que des caractères ASCII. (Ce serait injuste si nous utilisions également Unicode.)
#Règles
Les règles de base du code-golf s'appliquent.
#Exemples
Vérité:
#
#e
#_ABC
#thisisanunexpectedlylongstringxoxoxoxo
#USElection2016
Faux:
Hello, World!
#12thBday
#not-valid
#alsoNotValid!
#!not_a_hash
code-golf
string
decision-problem
Laikoni
la source
la source
#
vraiment un hashtag valide?#öäü
valide?#
n'est pas un hashtag valide par aucun système, Facebook ou Twitter, il enfreint également les règles définies, je ne suis pas sûr que #_ABC soit à nouveau valide sur eux, mais je n'en suis pas certain.an alphabet
signifie ascii majuscule ou minuscule? c'est à direabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
?Réponses:
Rétine , 12 octets
Imprime
1
pour les hashtags et0
autres.Essayez-le en ligne! (La première ligne active une suite de tests séparés par un saut de ligne.)
Pas grand chose à expliquer ici, cela est tout à fait une application littérale de la définition:
^
et ne$
sont que des ancres assurant que les couvertures de correspondre à la chaîne complète,#
vérifie que la chaîne commence par un#
,(?!\d)
assure que le caractère suivant n'est pas un chiffre (sans avancer la position du moteur d'expression régulière),\w*
vérifie que nous pouvons atteindre la fin de la chaîne avec zéro ou plusieurs lettres, chiffres ou traits de soulignement.Par défaut, Retina compte le nombre de correspondances de l'expression régulière donnée, c'est pourquoi cela donne
1
des balises de hachage valides et0
autres.la source
(?!\d)
c'est(?=\D)
... mais je ne sais pas comment tu as écrit Retina. Est-il possible que vous puissiez utiliser(?\D)
sans=
et enregistrer un octet? (Sinon, vaut-il la peine d'éditer la langue pour que ce soit faisable?)(?!\d)
est différent du fait(?=\D)
que ce dernier nécessite un certain caractère après la position actuelle tandis que le premier est satisfait de la fin de la chaîne. Indépendamment de cela, l'ajustement de la saveur des expressions régulières n'est actuellement pas possible (car je ne fais que transmettre les expressions régulières au moteur de regex de .NET), mais apporter de tels changements est sur la feuille de route quelque part (très loin) sur toute la ligne.=
option facultative. L'intégralité de la(?...)
syntaxe a été choisie pour l'extensibilité, en ce sens que le caractère après le?
n'est jamais optionnel et détermine de quel type de groupe il s'agit, et je ne pense pas vouloir abandonner cette extensibilité.(?{
et(??
et(?<
(à la fois pour capturer des groupes et pour regarder derrière) et(?-
et(?1
et bien sûr la base(?:
. Et peut-être en ai-je manqué.Perl, 22 octets
21 octets code +1 pour
-p
Imprime 1 s'il s'agit d'un hashtag valide, sinon une chaîne vide.
Usage
Enregistré 2 octets merci pour Martin Ender (et 4 autres en utilisant sa méthode de recherche )
Perl, 18 octets
17 octets code +1 pour
-p
En utilisant le lookaround de Martin, cela peut être beaucoup plus court!
la source
JavaScript (ES6), 25 octets
la source
C, 80 octets
La fonction
f()
prend la chaîne comme argument et seint *b
transforme en 1 ou 0 pour indiquer la vérité / la fausse.Si la chaîne a toujours au moins un caractère (c'est-à-dire jamais une chaîne vide), un octet peut être rasé pour 79 octets:
la source
Python 3, 41 octets
la source
None
sont falsey, je pense que laisser tomber lebool()
est correct.re.compile('#(?!\d)\w*$').match
? Il est acceptable de laisser tomber lef=
BTW.Brachylog , 55 octets
Cela n'utilise aucune expression régulière.
Explication
la source
Python 3,
10393 octetsL'
#
êtreTrue
m'a tué ici, j'ai dû énumérer la chaîne pour éviter une erreur d'index sur l'entrée à un seul caractère.la source
isalpha()
méthode sur ma réponse py3: D "#" étant vrai, m'a également détruit.PowerShell v2 +, 25 octets
En utilisant l'expression régulière de Martin , vient d'être enveloppé dans l'
-match
opérateur de PowerShell couplé à l'entrée$args
. Pour les valeurs véridiques / falsey, cela retournera la chaîne elle-même sur une correspondance (une valeur véridique) ou rien sur une non-correspondance (une valeur falsey). En effet, lorsqu'un opérateur de comparaison est appliqué à un tableau, il renvoie tout ce qui satisfait cet opérateur.Quelques exemples (enveloppés dans une
[bool]
distribution pour rendre la sortie plus claire):la source
Mathematica,
524643 octets69 octets enregistrés grâce à @MartinEnder .Une fonction. Prend une chaîne en entrée et retourne
True
ouFalse
en sortie. Assez simple, correspond juste contre l'expression régulière/#(?!\d)\w*/
.la source
hello#world
car vous n'avez pas les ancres de chaîne de début et de fin. Je ne connais pas Mathematica, donc je ne suis pas sûr.Dyalog APL ,
2220 octetsSans RegEx:
-2 grâce à ngn
la source
Python 2, 79 octets
Première tentative de golf. Version non golfée:
la source
Octave,
37565443 octetsMerci à @LuisMendo d'avoir supprimé 8 octets!
Pas très golfique, mais très intégré.
Modifier: le code d'origine acceptait les chaînes sans «#» en tête. Je suppose que j'aurais dû m'en tenir à l'expression régulière.
Suite de tests sur ideone .
la source
Python3 -
156128 octetsUne solution qui n'utilise pas regex. 0 est falsey et toutes les autres valeurs sont véridiques.
Merci à @LeakyNun pour avoir économisé des octets!
la source
+0
suiten[1:]
, mais malheureusement, cela n'a toujours pas fonctionné: / A donné false à "#d".+0
mais échoue sur "#d". Je l'ai testé sur Python3 cependant. Je ne sais pas si cela fonctionnera sur Python2IndexOutOfRange
pour "#" etFalse
pour "#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)
pour 128 octets. Preuve que cela fonctionneLua,
595554 octetsCode
Comment ça marche:
#
.Prend des entrées de la ligne de commande. Imprime
true
si la chaîne est un hashtag valide, sinon, elle s'imprimenil
.la source
Google Sheets, 30 octets
Une fonction de feuille de calcul anonyme qui prend l'entrée de la cellule
A1
la compare à l'expression RE2 et renvoie le résultat à la cellule appelante.la source
05AB1E , 18 octets
Code:
Utilise l' encodage CP-1252 . Essayez-le en ligne! .
la source
Sed 19 + 2 = 21 octets
Cela filtre tous les non-hashtags et génère des hashtags valides.
Exécuter en tant que
sed -rn "/^#$|^#[a-z]\w*$/Ip"
. Quittez avec Ctrl+ D(envoyez EOF).la source
Grep GNU, 15 + 2 = 17 octets
Tester:
Sortie:
la source
Python 3, 97 octets
70 octets 56 octets(Code modifié)
Lisible par l'hommela source
lambda x:all(True==[x[0]=="#",x[1].isalpha(),x[2:].isalpha()])
isalpha
?Pyke, 19 octets
Essayez-le ici!
Solution rapide pour ce soir
la source
#123
ne renvoie toujours rien, ne devrait pas retourner 0?Ruby, 16 +
31 (n
drapeau) =1917 octetsUtilise
0
comme véridique etnil
comme fausse.Exécutez-le en tant que
ruby -ne 'p~/^#(?!\d)\w*$/'
. Merci à @manatwork d'avoir corrigé l'erreur bash lors de l'exécution du programme.la source
!
, voir Event Designators dans man bash.)Standard ML ,
121118107 octetsEssayez-le en ligne! Solution fonctionnelle sans utiliser d'expression régulière. Déclare une fonction anonyme qui est liée à l'identificateur de résultat implicite
it
.la source
isAlphaNum$orelse
c'est plutôt menaçant ...orelse
etandalso
.AlphaNum
,orelse
!! (orelse what?
)o explode
la fin est assez menaçante ...Excel VBA, 54 octets
Fonction de fenêtre immédiate VBE anonyme qui prend les entrées de la cellule
[A1]
, vérifie si la valeur de la cellule correspond auLike
modèle etBoolean
affiche la fenêtre immédiate VBEla source
Haskell , 79 octets
Essayez-le en ligne!
la source
C #, 92 octets
C # lambda (
Predicate
) où input est astring
et output est abool
.Essayez-le en ligne!
la source
Lua, 39 octets
Copypasta simple de la description du match. Génère un faux
nil
si ce n'est pas un hashtag, renvoie un vrai hashtag dans le cas contraire.Peut être raccourci pour un octet de plus en utilisant
find
si la sortie de la liste de deux valeurs (ce qui est vrai) ne viole pas les règles.la source
#
seul.#
soit un hashtag sur Twitter ou Facebook n'est pas pertinent pour ce défi. La spécification est très claire sur le fait qu'elle#
doit être considérée comme un hashtag aux fins de ce défi. Et alors que je n'ai pas vérifié toutes les réponses, tout ce que j'ai vérifié ne l' accepte#
comme un hashtag, donc je ne suis pas sûr de réponses haut , vous faites référence.Clojure,
130135132 octets+5 octets pour gérer un NPE qui s'est produit lorsque la chaîne n'était constituée que d'un hashtag.
-2 octets en utilisant
Character/isLetterOrDigit
.Non golfé:
la source
Java 8,
575428 octetsRéponse Retina du port de Martin Ender pour économiser quelques octets et faire correspondre les cas de test ajoutés.
Cela ne
String#matches
correspond pas toujours à la chaîne entière, donc pas besoin de^...$
.Essayez-le ici.
la source