VEVO User Account Checker

21

Wir sehen oft Musikvideos auf Youtube. Viele Youtube-Kanäle, die Musikvideos hosten, sind "powered by VEVO". Diese können leicht identifiziert werden, indem Sie VEVO in ihre Video-Thumbnails einbetten und VEVO an ihren Kanalnamen anhängen.

Schreiben Sie nun einen Code, um zu testen, ob eine vom Benutzer angegebene Zeichenfolge ein VEVO-Benutzerkonto ist oder nicht.

Voraussetzungen für gültige VEVO-Benutzerkonto-Zeichenfolgen:

  • Darf nur Großbuchstaben, Kleinbuchstaben und Ziffern enthalten. (kein Leerzeichen oder Interpunktion)

  • Darf nicht länger als 80 Zeichen sein.

  • Am Ende der Zeichenfolge muss der Teilstring "VEVO" stehen

Testfälle:

Gültige Eingaben:

AdeleVEVO
ConnieTalbotVEVO
SHMVEVO
justimberlakeVEVO
DJMartinJensenVEVO
test123VEVO

Ungültige Eingaben:

syam kapuk
jypentertainment
Noche de Brujas
testVEVO123

Da es sich um , suche ich natürlich mit jeder Programmiersprache nach dem kürzesten Code.

Bagas Sanjaya
quelle
4
Schöne erste Frage! +1
LiefdeWen
12
Testfälle: VEVOundūņīčōdēVEVO
dzaima
8
andere vorgeschlagene Testfälle: test123VeVound einer mit mehr als 80 Zeichen
Arnauld
6
Sie sollten viel länger warten, bis Sie die beste Antwort erhalten. Die Frage ist erst seit einer Stunde offen und es gibt noch viele weitere Sprachen, auf die die Leute antworten könnten!
Luke Stevens
5
Für "Groß-, Klein- und Ziffernzeichen" muss definiert werden (ich nehme an, das haben (glaube ich) alle bereits getan), dass Sie A-Za-z0-9 meinen; Beispiel und und Ziffern in anderen Alphabeten, zum Beispiel (9)
Jonathan Allan

Antworten:

9

Python 2 , 45 Bytes

-3 Bytes dank Rod. -2 Bytes dank ovs.

lambda s:len(s)<81*s.isalnum()<'VEVO'==s[-4:]

Probieren Sie es online!

Eine Regex-Lösung ist länger.

lambda s:re.match('^[^\W_]{0,76}VEVO$',s)
import re
total menschlich
quelle
6

Japt v2.0a0, 20 16 Bytes

Rückgabe 1für gültig oder 0ungültig. [\l\d]würde auch anstelle von [^\W_]für die gleiche Byteanzahl arbeiten.

è/^\w{0,76}VEVO$

Versuchen Sie es | Überprüfen Sie alle Testfälle

Erläuterung : èZählt die Anzahl der Übereinstimmungen des RegEx in der Eingabe. In Japt enthält die \wRegEx-Klasse keinen Unterstrich.

Zottelig
quelle
Schön. Das Beste, was ich ohne Regex machen könnte, ist;¥oB+mc)¯80 ©"VEVO"¥Ut4n
ETHproductions
@ETHproductions, netter Trick mit B+mc:) Wenn Japt2 übrigens eine Charakterklasse hätte [A-Za-z0-9], könnten wir hier Retina schlagen! Könnte es sogar wert sein, übergangen zu werden \w& \W.
Shaggy
Heh, ich glaube, ich hatte eigentlich geplant, das zu tun ... Ich sollte mich wieder ganz allgemein mit
Japt
4

JavaScript (ES6), 27 36 34 31 Byte

2 Bytes dank @Neil und 3 Bytes dank @Shaggy gespeichert

s=>/^[^\W_]{0,76}VEVO$/.test(s)

Testfälle

Arnauld
quelle
2
Passt nicht auch \wzu _s?
Neil
Ich denke, ((?!_)\w)spart 2 Bytes.
Neil
1
Würde [^\W_]für eine 3-Byte-Einsparung arbeiten ?
Shaggy
@ Shaggy Heck. Aus irgendeinem Grund dachte ich, dass solche Zeichenklassen nicht in Zeichensätzen funktionieren. Vielen Dank!
Arnauld
Hat JS keine Möglichkeit, das Lambda zu überspringen? Wie /^[^\W_]{0,76}VEVO$/.testoder so?
Totalhuman
4

PHP , 51 Bytes

-10 Bytes Dank an @Ismael Miguel für die Verwendung <?=anstelle von <?php echo! und Entfernen des schließenden Tags

<?=preg_match("/^[^\W_]{0,76}VEVO$/",fgets(STDIN));

Probieren Sie es online!

Vielen Dank für die anderen Antworten, damit ich den Regex nicht schreiben musste!

NK1406
quelle
1
Stattdessen <?php echokönnen Sie tun <?=preg_match("/^[^\W_]{0,76}VEVO$/",fgets(STDIN));.
Ismael Miguel
Bitte. Sie können das schließende PHP-Tag weglassen. Zitieren der Dokumentation: "Wenn es sich bei einer Datei um reinen PHP-Code handelt, sollte das PHP-schließende Tag am Ende der Datei weggelassen werden." ( php.net/manual/en/language.basic-syntax.phptags.php ). Dies sollte Ihnen 2 weitere Bytes ersparen. [^\W_]Verwenden Sie stattdessen auch einfach \wdas Gleiche wie [a-zA-Z_].
Ismael Miguel
1
Danke auch, ich habe jetzt ein paar Antworten zum Update!
NK1406,
Bitte. Ein Tipp: Lesen Sie die Dokumentation und machen Sie sich mit ihr vertraut.
Ismael Miguel
3

C (gcc) 83 Bytes

c,i;f(char*s){for(c=i=0;s[i];c+=!isalnum(s[i++]));c=i<81*!c*!strcmp("VEVO",s+i-4);}

Probieren Sie es online!

scottinet
quelle
Ich sehe keine returnAussage, wie kommt das zurück c? Undefiniertes Verhalten?
MD XF
@MDXF Dies ist in der Tat undefiniertes Verhalten und ein Missbrauch, wie gcc dieselben Register für die Variablenzuweisung und Rückgabewerte verwendet (siehe Tipps zum Golfen in C ). Dies ist nicht portierbar und funktioniert nicht unbedingt mit anderen Compilern (zum Beispiel funktioniert es nicht mit Clang)
Scottinet
das ist sehr beeindruckend. Wie haben Sie das herausgefunden?
MD XF
manchmal ist f ("VO" auch wahr, wenn vorher "VI" gespeichert wurde; oder Fehler
l4m2 29.12.17
3

Dyalog APL , 47 Bytes

{0::0⋄(∧/(1(819⌶)t)∊⎕A,⎕D)∧77>≢t←,∘'VEVO'⍣¯1⊢⍵}

Probieren Sie es online!

Eine reine Regex-Lösung hat 32 Bytes , ist aber auch viel langweiliger als dieser Ansatz.

{0::0⋄(∧/(1(819⌶)t)∊⎕A,⎕D)∧77>≢t←,∘'VEVO'⍣¯1⊢⍵} a dfn with right arg '⍵'
 0::0                                          on error, return 0
                                 ,∘'VEVO'       a train that appends VEVO
                                         ⍣¯1    apply it -1 times
                                               on '⍵'
                                                and error if impossible (which returns 0)
                               t               save on variable 't'
                                               get the length of that
                           77>                  if that's smaller than 77
                          ∧                     and
         (1(819I)t)                              [for each of] 't' uppercased
                   ∊⎕A,⎕D                        is it in the uppercase alphabet concatenated with the digits
       ∧/                                        reduced by and
dzaima
quelle
Anstatt ⍣¯1nach VEVOdem dfn guard zu suchen und ihn zu benötigen, können Sie dies auch tun 'VEVO'≡¯4↑⍵. Das Bewegen von Dingen bringt mich auf die {('VEVO'≡¯4↑⍵)∧∧/⍵∊⎕D,⎕A,(819⌶)⎕A}
Sprünge
@Cowsquack Ja, ich hätte es vielleicht vergessen . Es gibt aber auch andere bessere Möglichkeiten, diese Herausforderung zu bewältigen (z. B. Eriks Antwort), und ich mag diese Idee: p
dzaima
3

Schmutz , 13 Bytes

e`n{-76"VEVO"

Probieren Sie es online!

Hier ist nichts Besonderes. Entspricht den entire Eingang mit dem Muster: höchstens 76 alpha numeric Zeichen, gefolgt von der Zeichenfolge VEVO. Druckt 1für Übereinstimmung und 0für keine Übereinstimmung. Ich erinnerte mich, dass das letzte Zitat am Ende der Zeile entfernt werden konnte, aber anscheinend nur einen Analysefehler verursacht.

Zgarb
quelle
3

C # (.NET Core) , 87 + 18 = 105 Byte

Probieren Sie es online!

a=>a.Where(x=>char.IsLetterOrDigit(x)).Count()==a.Length&a.Length<81&a.EndsWith("VEVO")
LiefdeWen
quelle
Würde dies nicht scheitern, wenn die Eingabe keine alphanumerischen Zeichen enthält?
Shaggy
@ Shaggy Du hast recht, wir werden es später korrigieren.
LiefdeWen
Ich habe bei TIO nachgefragt und festgestellt, dass die Eingabe "ConnieTalbotVEVO" (die eine gültige Eingabe sein sollte) fälschlicherweise als ungültige Eingabe deklariert wurde.
Bagas Sanjaya
@BagasSanjaya Das liegt daran, dass ich im Testfall die Tabs danach setze, die Tabs herausnehme und es wird das gleiche sein wie im obigen Testfall und es wird funktionieren.
LiefdeWen
73 + 18: a=>a.All(x=>char.IsLetterOrDigit(x)&x<123)&a.Length<81&a.EndsWith("VEVO")nur ASCII-Buchstaben oder 67 + 18: a=>a.All(x=>char.IsLetterOrDigit(x))&a.Length<81&a.EndsWith("VEVO")mit Unicode-Unterstützung
dg3
2

> <> , 147 125 Bytes

!\i:0(?^1[::::::"/9@Z`z"!
;>{(?;{(?v{(?;{(?v{(?;{(?v
 ~l1-?!v >       > !|!: !<
;v    ]/~l99*-0(?!;4["OVEV"{-?;{-?;{-?;{-?;1n

Probieren Sie es online!

> <> 147 Bytes

Probieren Sie es online!

Dies gibt 1 aus, wenn die Eingabezeichenfolge gültig ist und nichts für eine ungültige Eingabe.

Bearbeiten 1: Die alphanumerischen Prüfungen wurden geändert, um Bereiche zu verwenden, anstatt sie mit jedem Zeichen zu vergleichen. (22 Bytes sparen)

Blaugrüner Pelikan
quelle
Ich habe momentan nicht die Zeit, um Golf zu spielen, aber ich bin mir ziemlich sicher, dass Sie durch Vergleiche mit Zeichencodes Bytes verlieren können. Das Wesentliche wäre, Dinge abzulehnen, die kleiner als '0' und größer als 'z' sind, und dann Dinge zwischen '9' und 'A' sowie zwischen 'Z' und 'a' abzulehnen.
Cole
@cole: - Ich war gestern nach dem Post nicht an meinem PC, um das zu ändern, aber Sie haben Recht, Vergleiche schneiden ein bisschen ab. Ich bin sicher, wenn Sie den Code überfliegen, können Sie möglicherweise einige zusätzliche Bytes entfernen.
Teal Pelikan
2

Bash, 53 26 30 Bytes

[[ $1 =~ ^[^\W_]{0,76}VEVO$ ]]

Beenden Sie den Code 0 für GÜLTIGE Ergebnisse und 1 für UNGÜLTIGE Ergebnisse.

Arbeitet immer noch an 80 Zeichen oder weniger.

-27 Bytes beim Entfernen der Ausgabe dank @KeyWeeUsr

+4 Bytes, fester regulärer Ausdruck (wie alle anderen auch)

Probieren Sie es online!

Wahrscheinlich
quelle
Sie können nur echo 1für wahr, oder einfach ohne Echo gehen. Es gibt keine Notwendigkeit zu Echo etwas , wie Sie noch mit einem Exit - Code am Ende , dass Sie tatsächlich überprüfen Sie mit &&und||
KeyWeeUsr
Okay, ich war mir nicht sicher, welche Art von Ausgabe (falls vorhanden) erforderlich war. Die Frage hat nicht wirklich gesagt.
Voraussichtlich
Die Idee von 'Wahrhaftigkeit' wird hier erklärt: codegolf.meta.stackexchange.com/q/2190/16658 und wird allgemein impliziert, sofern nicht anders angegeben
Sirenen
Dies gibt nichts auf TIO aus. Außerdem lässt Ihr RegEx Unterstriche zu, die es nicht sollte. Und Sie überprüfen nicht die Länge. Wir benötigen Lösungen, um hier voll funktionsfähig zu sein. Laufende Arbeiten sollten nicht veröffentlicht werden. Ich würde empfehlen, es zu löschen, bis Sie die Probleme beheben können. (Warum stimmen Leute Lösungen ab, die eindeutig nicht funktionieren?)
Shaggy,
@Shaggy Die Ausgabe erfolgt über den Exit-Code.
Totalhuman
2

> <> , 101 89 83 81 94 Bytes

Bearbeiten: Suche nach nicht-alphanumerischen Zeichen anstatt nach alphanumerischen Zeichen umgestellt. Zurückgeschaltet, weil ich vergessen habe, zwischen Z und a zu prüfen. Vielen Dank @Emigna. Rippen Sie diese verlorenen Bytes

Edit 2: Außerdem kann ich die total einfach loswerden. Vielen Dank, Teal Pelican dafür und finde das Problem mit TIO

Edit 3: ~~~ durch ap ersetzt

!\i::0(?v:::"/")$":"(*$:"`")$"{"(*+$:"@")$"["(*+?
0/?("S"l/
l/"VEVO"[4pn?$0(6
!\{-?vl?
1/;n0/n

Ich weiß nicht, warum dies bei TIO nicht funktioniert, aber hier funktioniert es einwandfrei . Das Problem war, dass die {} Befehle in TIO für eine leere Liste nicht funktionieren. Probieren Sie es hier

Wie es funktioniert

!\i::0(?v:::"/")$":"(*$:"`")$"{"(*+$:"@")$"["(*+?
0/....../
......... Checks each input is alphanumeric
...       If any isn't, print 0 and exit with an error
...

...
0/?("S"l/ Checks if there are more than 80 characters
...       If so, print 0 and exit with an error
...
...

...
...
l/"VEVO"[4pn?$0(6 Check if the input is less than 4 characters
...               If so, print 0 and exit with an error
...

...
...
./"VEVO"[4pn?$0(6 Take the last 4 characters of the input into a new stack (first time I've actually used [)
...               Add "VEVO" to the stack to compare
...

...
0/....../n
........V
!\{-?vl?  Check if the last 4 characters are VEVO
1/;n0/n   Print 1 and exit with an error if so, else print 0 and exit

Aus Gründen der Konsistenz ersetzen Sie die; In der letzten Zeile mit einem ungültigen Befehl wird jede Ausgabe zu einem Fehler.

Scherzen
quelle
Ich glaube, Ihr TIO-Fehler könnte sein, wie es mit der Bestellung auf dem End-Stack-Split funktioniert. TIO-LINK HIER Wenn Sie in TIO ein Durcheinander haben, können Sie dies ändern.
Teal Pelikan
Vielen Dank @Tealpelican. Das behoben und ein paar Bytes mehr getötet
Jo King
Es fehlt die Prüfung auf Zeichen zwischen "Z" und "a".
Emigna
@Emigna Ups, danke! Fest!
Jo King
2

C ++, 129 105 102 Bytes

Dank anderer Antworten, die mir gezeigt haben, dass ich
dank Zacharý die Anzahl der Zeichen -2 Bytes zählen kann

#include<regex>
int v(std::string s){return std::regex_match(s, std::regex("[a-zA-Z0-9]{0,76}VEVO"));}

TIO LINK

HatsuPointerKun
quelle
Wo ist TIO Link bei deiner Antwort? Ich möchte Ihren Code testen ...
Bagas Sanjaya
Verzeihen Sie mir, wenn dies ein Mangel an Kenntnissen in C ++ ist. Können Sie die Variable verschieben, entfernen rund nur den regulären Ausdruck innerhalb des Aufrufs haben std::regex_match?
Zacharý
Nach dem Komma steht ein nicht benötigtes Leerzeichen
Zacharý
Sie können das Komma nach dem Komma entfernen.
Zacharý
1

Java (OpenJDK 8) , 37 36 Bytes

Ziemlich einfache Antwort mit ein paar schönen Regex.
Wahrscheinlich die kürzeste Java-Antwort, die ich je gemacht habe.
-1 Bytes dank Neil in der Javascript-Antwort

w->w.matches("((?!_)\\w){0,76}VEVO")

Probieren Sie es online!

Luke Stevens
quelle
1

Haskell , 75 Bytes

-2 Bytes dank user28667.

import Data.Char
f s|l<-length s=all isAlphaNum s&&l<81&&drop(l-4)s=="VEVO"

Probieren Sie es online!

total menschlich
quelle
1
-2 Bytes, wenn Sie verwenden drop(length s-4)und extrahierenlength s
user28667
1

V , 17 Bytes

ø^¨áüä©û,76}VEVO$

Probieren Sie es online!

Hexdump:

00000000: f85e a8e1 fce4 a9fb 2c37 367d 5645 564f  .^......,76}VEVO
00000010: 24                                       $

Komprimierte Regeln für den Sieg!

ø                   " Count the number of matches of
 ^                  "   The beginning of the line
  ¨áüä©             "   A letter or number...
       û,76}        "   From 0 to 76 times...
            VEVO    "   Followed by "VEVO"
                $   "   At the end of the line
DJMcMayhem
quelle
1

Ruby- n, 22 + 1 = 23 Bytes

p~/^[^\W_]{0,76}VEVO$/

Ausgabe 0wenn wahr,nil wenn falsch

Probieren Sie es online!

Mit dem gleichen langweiligen Regex wie alle anderen.

GB
quelle
1

Swift 4 , 113 Bytes

import Foundation;var f={(s:String)->Bool in s.range(of:"^[^\\W_]{0,76}VEVO$",options:.regularExpression) != nil}

Probieren Sie es online!

Zeke Snider
quelle
1

AWK , 23 Bytes

$0~/^[^\W_]{0,76}VEVO$/

Probieren Sie es online!

Gibt den Kontonamen aus, wenn er gültig ist, und gibt nichts aus, wenn er ungültig ist

Noskcaj
quelle
1

Perl 5 , 35 29 + 1 (-a) = 30 Bytes

-6 Bytes dank ETHproductions

4 Bytes hinzugefügt. Ich habe nicht gesehen, dass ein Unterstrich nicht erlaubt ist.

Dies ist mein erstes Golf, also hoffe ich, dass ich es richtig gemacht habe.

Gibt 1 zurück, wenn dies gültig ist, und 0, wenn dies nicht der Fall ist.

print/^[^\W_]{0,76}VEVO$/?1:0

Probieren Sie es online!

Geoffrey H.
quelle
1
Willkommen bei PPCG! Sie können überflüssige Leerzeichen entfernen, um 25 (+1) Bytes zu erreichen:print/^\w{1,76}VEVO$/?1:0
ETHproductions
+0Konvertiert Übereinstimmungs-Bool in Zahl, anstatt ?1:02 Bytes zu sparen. Mit -pleAbzügen $_für Sie telefonieren. Also: perl -ple '$_=/^[^\W_]{0,76}VEVO$/+0'. 25 Bytes. Wenn Sie froh sind, Leerzeichen in nicht übereinstimmenden Zeilen zu erhalten, $_=/^[^\W_]{0,76}VEVO$/sind dies 23 Byte.
Phil H
0

Google Sheets, 33 Bytes

Anonyme Arbeitsblattfunktion, die Eingaben aus dem Bereich A1und Ausgaben in die aufrufende Zelle übernimmt

=RegexMatch(A1,"^[^\W_]{0,76}VEVO
Taylor Scott
quelle
Wo ist die schließende Klammer?
Bagas Sanjaya
@BagasSanjaya, eine der wunderbaren Funktionen von Google Sheets, vervollständigt automatisch nicht geschlossene Zeichenfolgen und Gruppen. Also, wenn dies in eine Zelle eingefügt wird und Sie entweder auf die Zelle klicken oder die Eingabetaste drücken, konvertiert GS dies in =RegexMatch(A1,"^[^\W_]{0,76}VEVO")ohne Rückmeldung an den Benutzer und führt aus
Taylor Scott
-1

Clojure , 146 Bytes

(fn[u](let[c count](and(<(c u)81)(=(c(filter #(let[i(int %)](or(< 47 i 58)(< 64 i 91)(< 96 i 123)))u))(c u))(clojure.string/ends-with? u"VEVO"))))

Probieren Sie es online!

Mit einer Regex wäre das viel kürzer, aber ich dachte, es wäre interessanter, es manuell zu machen.

(defn vevo? [username]
  (and (< (count username) 81)

       ; Filter out the illegal characters, then check if the length is the same as the original string
       (= (count (filter #(let [i (int %)]
                            ; Make sure the char code is in the valid ranges
                            (or (< 47 i 58) (< 64 i 91) (< 96 i 123)))
                         username))
          (count username))

       (clojure.string/ends-with? username "VEVO")))
Karzigenat
quelle
Gibt es einen TIO-Link zum Testen?
Bagas Sanjaya
@BagasSanjaya Ich kann ein bisschen hinzufügen. Das Hinzufügen von TIO-Links scheint mittlerweile Standard zu sein. Sie waren beim letzten häufigen Besuch der Website optional, aber jetzt werden sie von allen hinzugefügt.
Karzigenat
@BagasSanjaya Ich habe einen Link hinzugefügt. Leider scheint TIO kaputt zu sein. Die ends-with?Funktion wird nicht gefunden , obwohl dies Teil der Standardbibliothek ist.
Carcigenicate