In dieser Code Golf Challenge verifizierst du Hashtags!
#Was_Ihr_Code_Sollt_tun
Die Eingabe ist eine Zeichenfolge. Geben Sie einen Wahrheitswert aus, wenn es sich um ein gültiges Hashtag handelt, und einen falschen Wert, wenn es sich nicht um ein gültiges Hashtag handelt.
Wir definieren einen String als gültigen Hashtag, wenn ...
- Es beginnt mit einem Hash (
#
). - Es gibt keine Nummer direkt nach dem Hashtag (z. B.
#2016USElection
kein gültiges Hashtag). - Es enthält keine "Sonderzeichen" (dh keine Buchstaben, Unterstriche (
_
) oder Zahlen).
Sie können davon ausgehen, dass die Eingabe nur ASCII-Zeichen enthält. (Es wäre unfair, wenn wir auch Unicode machen würden.)
#Regeln
Grundlegende Code-Golf- Regeln gelten.
#Beispiele
Wahrheit:
#
#e
#_ABC
#thisisanunexpectedlylongstringxoxoxoxo
#USElection2016
Falsch:
Hello, World!
#12thBday
#not-valid
#alsoNotValid!
#!not_a_hash
code-golf
string
decision-problem
Laikoni
quelle
quelle
#
wirklich ein gültiger Hashtag?#öäü
gültig?#
ist kein gültiger Hashtag von irgendeinem System, Facebook oder Twitter. Es verstößt auch gegen die festgelegten Regeln.an alphabet
bedeutet Ascii Groß- oder Kleinbuchstaben? dhabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
?Antworten:
Retina , 12 Bytes
Druckt
1
für Hashtags und0
andere Zwecke .Probieren Sie es online! (Die erste Zeile aktiviert eine durch Zeilenvorschub getrennte Testsuite.)
Es gibt hier nicht viel zu erklären, dies ist eine wörtliche Umsetzung der Definition:
^
und$
sind nur Anker sicherzustellen , dass die Partie deckt die gesamte Zeichenfolge,#
überprüft , dass die Zeichenfolge beginnt mit einem#
,(?!\d)
sichergestellt , dass das nächste Zeichen ist nicht eine Ziffer (ohne voran die Regex - Engine Position),\w*
prüft , dass wir das Ende der Zeichenfolge mit null oder mehr Buchstaben, Ziffern oder Unterstrichen erreichen.Standardmäßig zählt Retina die Anzahl der Übereinstimmungen mit der angegebenen Regex, weshalb dies gilt
1
für gültige Hash-Tags und0
sonstiges gilt.quelle
(?!\d)
ist(?=\D)
... aber ich weiß nicht, wie Sie Retina geschrieben haben. Ist es möglich, dass Sie(?\D)
ohne das verwenden=
und ein Byte speichern könnten ? (Wenn nicht, lohnt es sich, die Sprache zu bearbeiten, damit das machbar ist?)(?!\d)
unterscheidet sich von(?=\D)
, dass das letztere erfordert einige Zeichen nach der aktuellen Position während erstere mit dem Ende der Zeichenfolge erfüllt ist. Unabhängig davon ist das Anpassen der Regex-Variante derzeit nicht möglich (da ich die Regex nur an die Regex-Engine von .NET weitergebe), aber solche Änderungen stehen auf der Roadmap irgendwo (sehr weit unten) auf dem Programm.=
optional machen werde . Die gesamte(?...)
Syntax wurde aus Gründen der Erweiterbarkeit gewählt, da das Zeichen nach dem?
niemals optional ist und bestimmt, um welche Art von Gruppe es sich handelt, und ich glaube nicht, dass ich auf diese Erweiterbarkeit verzichten möchte.(?{
und(??
und(?<
(sowohl für das Erfassen von Gruppen als auch für Lookbehind) und(?-
und(?1
und natürlich das Grundlegende(?:
. Und vielleicht einige, die ich verpasst habe.Perl, 22 Bytes
21 Byte Code +1 für
-p
Gibt 1 aus, wenn es sich um ein gültiges Hashtag handelt, andernfalls eine leere Zeichenfolge.
Verwendung
2 Bytes gespart danke für Martin Ender (und weitere 4 mit seiner Lookaround-Methode )
Perl, 18 Bytes
17 Byte Code +1 für
-p
Mit Martins Lookaround kann dies viel kürzer sein!
quelle
JavaScript (ES6), 25 Byte
quelle
C 80 Bytes
Die Funktion
f()
nimmt den String als Argument und ändert ihnint *b
entweder auf 1 oder 0, um Wahrhaftigkeit / Falschheit anzuzeigen.Wenn die Zeichenfolge immer mindestens ein Zeichen enthält (dh niemals eine leere Zeichenfolge), kann ein Byte für 79 Byte abgeschnitten werden:
quelle
Python 3, 41 Bytes
quelle
None
falsch sind, denke ich, dassbool()
es in Ordnung ist, sie fallen zu lassen.re.compile('#(?!\d)\w*$').match
? Es ist akzeptabel, dief=
BTW fallen zu lassen .Brachylog , 55 Bytes
Dies verwendet keinen regulären Ausdruck.
Erläuterung
quelle
Python 3,
10393 BytesDas
#
WesenTrue
getötet mich hier, ich hatte die Zeichenfolge aufzuzählen einen Indexfehler auf der einzelnen Zeicheneingabe zu vermeiden.quelle
isalpha()
Methode in meiner py3-Antwort komplett vergessen : D "#" ist wahr, hat mich auch zerstört.PowerShell v2 +, 25 Byte
Verwenden Sie Martins regulären Ausdruck , und schließen Sie ihn zusammen
-match
mit der Eingabe in den PowerShell- Operator ein$args
. Bei Wahrheits / Falsch-Werten gibt dies die Zeichenfolge selbst bei einer Übereinstimmung (einem Wahrheits-Wert) oder nichts bei einer Nichtübereinstimmung (einem Falsch-Wert) zurück. Dies liegt daran, dass ein Vergleichsoperator, der auf ein Array angewendet wird, alles zurückgibt diesen Operator erfüllt.Einige Beispiele (in eine
[bool]
Besetzung gehüllt , um die Ausgabe klarer zu machen):quelle
Mathematica,
524643 BytesGespeicherte
69 Bytes aufgrund @MartinEnder .Funktion. Nimmt einen String als Eingabe und gibt
True
oderFalse
als Ausgabe zurück. Ziemlich einfach, passt einfach gegen den Regex/#(?!\d)\w*/
.quelle
hello#world
da Sie nicht über die Anfangs- und Endzeichenfolgenanker verfügen. Ich kenne Mathematica allerdings nicht und bin mir nicht sicher.Dyalog APL ,
2220 BytesOhne RegEx:
-2 danke an ngn
quelle
Python 2, 79 Bytes
Erster Golfversuch. Ungolfed-Version:
quelle
Oktave,
37565443 BytesVielen Dank an @LuisMendo für das Entfernen von 8 Bytes!
Nicht sehr golfig, aber sehr eingebaut.
Bearbeiten: Der ursprüngliche Code akzeptiert Zeichenfolgen ohne führendes '#'. Ich denke, ich hätte mich an Regex halten sollen.
Testsuite auf Ideone .
quelle
Python3 -
156128 BytesEine Lösung ohne Regex. 0 ist falsch und jeder andere Wert ist wahr.
Vielen Dank an @LeakyNun für das Speichern von Bytes!
quelle
+0
After entfernenn[1:]
, aber leider funktionierte es immer noch nicht: / Falsch an "#d".+0
, schlägt jedoch bei "#d" fehl. Ich habe es jedoch auf Python3 getestet. Ich bin nicht sicher, ob es auf Python2 funktionieren wirdIndexOutOfRange
für "#" undFalse
für "#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)
für 128 Bytes. Beweis, dass es funktioniertLua,
595554 BytesCode
Wie es funktioniert:
#
.Übernimmt Eingaben von der Kommandozeile. Druckt ,
true
wenn die Zeichenfolge ein gültiger Hashtag ist, andernfalls er drucktnil
.quelle
Google Sheets, 30 Bytes
Eine anonyme Arbeitsblattfunktion, die Eingaben aus der Zelle entgegennimmt
A1
, vergleicht sie mit dem RE2-Ausdruck und gibt das Ergebnis an die aufrufende Zelle aus.quelle
05AB1E , 18 Bytes
Code:
Verwendet die CP-1252- Codierung. Probieren Sie es online! .
quelle
Sed 19 + 2 = 21 Bytes
Dies filtert alle Nicht-Hashtags heraus und gibt gültige Hashtags aus.
Führen Sie so
sed -rn "/^#$|^#[a-z]\w*$/Ip"
. Mit Ctrl+ beenden D(EOF senden).quelle
GNU grep, 15 + 2 = 17 Bytes
Prüfung:
Ausgabe:
quelle
Python 3, 97 Bytes
70 Bytes 56 Bytes(Code geändert)
Menschenlesbarquelle
lambda x:all(True==[x[0]=="#",x[1].isalpha(),x[2:].isalpha()])
isalpha
?Pyke, 19 Bytes
Probieren Sie es hier aus!
Schnelle Lösung für heute Abend
quelle
#123
gibt immer noch nichts zurück, sollte nicht 0 zurückgeben?Rubin, 16 +
31 (n
Flagge) =1917 BytesVerwendet
0
als wahr undnil
als falsch.Führen Sie es als
ruby -ne 'p~/^#(?!\d)\w*$/'
. Vielen Dank an @manatwork für die Behebung des Bash-Fehlers beim Ausführen des Programms.quelle
!
siehe Event Designators in man bash.)Standard ML ,
121118107 BytesProbieren Sie es online! Funktionale Lösung ohne Verwendung von Regex. Deklariert eine anonyme Funktion, die an die implizite Ergebniskennung gebunden ist
it
.quelle
isAlphaNum$orelse
das ist ziemlich bedrohlich ...orelse
und sagen kannandalso
.AlphaNum
,orelse
!! (orelse what?
)o explode
das Ende auch für ziemlich bedrohlich halten ...Excel VBA, 54 Byte
Anonyme VBE-Direktfensterfunktion, die Eingaben von der Zelle entgegennimmt
[A1]
, prüft, ob der Wert der Zelle mit demLike
Muster übereinstimmt , und gibtBoolean
Informationen zum VBE-Direktfenster ausquelle
Haskell , 79 Bytes
Probieren Sie es online!
quelle
C #, 92 Bytes
C # lambda (
Predicate
) wobei input astring
und output a istbool
.Probieren Sie es online!
quelle
Lua, 39 Bytes
Einfache Copypasta der Übereinstimmungsbeschreibung. Ausgaben falsch
nil
wenn kein Hashtag angegeben ist, andernfalls wird ein echtes Hashtag zurückgegeben.Kann um ein weiteres Byte gekürzt werden,
find
wenn durch die Ausgabe einer Liste mit zwei Werten (was wahr ist) keine Regeln verletzt werden.quelle
#
für sich alleine passt.#
es sich um einen Hashtag auf Twitter oder Facebook handelt, spielt für diese Herausforderung keine Rolle. Die Spezifikation ist sehr klar darüber, dass#
sie für die Zwecke dieser Herausforderung als Hashtag angesehen werden sollte. Und obwohl ich nicht alle Antworten überprüft habe, akzeptiere ich alle Antworten, die ich überprüft habe ,#
als Hashtag, sodass ich nicht sicher bin, auf welche Top-Antworten Sie sich beziehen.Clojure,
130135132 Bytes+5 Bytes für einen NPE, der auftrat, als die Zeichenfolge nur aus einem Hashtag bestand.
-2 Bytes mit
Character/isLetterOrDigit
.Ungolfed:
quelle
Java 8,
575428 BytesPort von Martin Enders Retina-Antwort , um ein paar Bytes zu speichern und hinzugefügte Testfälle abzugleichen.
Das
String#matches
passt nicht immer zur gesamten Zeichenfolge, daher ist dies nicht erforderlich^...$
.Probieren Sie es hier aus.
quelle