Controllo account utente VEVO


21

Spesso vediamo video musicali su Youtube. Molti canali Youtube che ospitano video musicali sono "powered by VEVO". Questi possono essere facilmente identificati sia incorporando VEVO nelle miniature dei video sia aggiungendo VEVO al nome del loro canale.

Ora scrivi un po 'di codice per verificare se una stringa fornita dall'utente è un account utente VEVO o meno.

Requisiti per le stringhe di account utente VEVO valide:

  • Deve contenere solo caratteri maiuscoli, minuscoli e cifre. (nessuno spazio bianco o punteggiatura)

  • Non deve superare 80 caratteri di lunghezza.

  • Deve avere la sottostringa "VEVO" alla fine della stringa

Casi test:

Ingressi validi:

AdeleVEVO
ConnieTalbotVEVO
SHMVEVO
justimberlakeVEVO
DJMartinJensenVEVO
test123VEVO

Ingressi non validi:

syam kapuk
jypentertainment
Noche de Brujas
testVEVO123

Certo, dato che si tratta di , sto cercando il codice più breve usando qualsiasi linguaggio di programmazione.


4
Bella prima domanda! +1
Liefde:

12
casi di test: VEVOeūņīčōdēVEVO
dzaima il

8
altri casi di test suggeriti: test123VeVoe uno con più di 80 caratteri
Arnauld

6
Dovresti aspettare molto di più prima di accettare una risposta migliore; la domanda è rimasta aperta solo per un'ora e ci sono molte più lingue a cui le persone potrebbero rispondere!
Luke Stevens,

5
"caratteri maiuscoli, minuscoli e cifre" richiede di definire (suppongo (come, credo, tutti hanno già fatto) che intendi A-Za-z0-9; ma potrebbe significare tutto ciò che può essere maiuscolo o minuscolo, per esempio e cifre in altri alfabeti, ad esempio (9).
Jonathan Allan,

Risposte:


9

Python 2 , 45 byte

-3 byte grazie a Rod. -2 byte grazie agli ovs.

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

Provalo online!

Una soluzione regex risulta essere più lunga.

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

6

Japt v2.0a0, 20 16 byte

Restituisce 1per valido o 0per non valido. [\l\d]funzionerebbe anche al posto di [^\W_]per lo stesso conteggio byte.

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

Provalo | Controlla tutti i casi di test

Spiegazione : èconta il numero di corrispondenze del RegEx nell'input. In Japt, la \wclasse RegEx non include il carattere di sottolineatura.


Ben fatto. Il meglio che potrei fare senza regex è;¥oB+mc)¯80 ©"VEVO"¥Ut4n
ETHproductions il

@ETHproductions, bel trucco con B+mc:) A proposito, se Japt2 avesse una classe di personaggi per [A-Za-z0-9], potremmo battere Retina qui! Potrebbe anche valere la pena di ignorare \w& \W.
Shaggy,

Eh, penso che stavo davvero pianificando di farlo in origine ... Dovrei tornare a lavorare su Japt in generale: P
ETHproductions

4

JavaScript (ES6), 27 36 34 31 byte

Salvato 2 byte grazie a @Neil e 3 byte grazie a @Shaggy

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

Casi test


2
Non \wcorrisponde anche a _s?
Neil,

Penso che ((?!_)\w)salva 2 byte.
Neil,

1
Funzionerebbe [^\W_]per un risparmio di 3 byte ?
Shaggy,

@Shaggy Heck. Per qualche ragione, pensavo che tali classi di personaggi non funzionassero all'interno di set di caratteri. Grazie!
Arnauld,

JS non ha modo di saltare la lambda? Ti piace /^[^\W_]{0,76}VEVO$/.testo qualcosa del genere?
totalmente umano il

4

PHP , 51 byte

-10 byte grazie a @Ismael Miguel per l'utilizzo al <?=posto di <?php echo! e rimuovendo il tag di chiusura

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

Provalo online!

Grazie per le altre risposte, quindi non ho dovuto scrivere la regex!


1
Invece di <?php echo, puoi farlo <?=preg_match("/^[^\W_]{0,76}VEVO$/",fgets(STDIN));.
Ismael Miguel,

Prego. Puoi tralasciare il tag PHP di chiusura. Citando la documentazione: "Se un file è puro codice PHP, è preferibile omettere il tag di chiusura PHP alla fine del file." ( php.net/manual/en/language.basic-syntax.phptags.php ). Questo dovrebbe farti risparmiare altri 2 byte. Inoltre, invece di [^\W_], basta usare \w, che è lo stesso di [a-zA-Z_].
Ismael Miguel,

1
Grazie, ho alcune risposte da aggiornare ora!
NK1406,

Prego. Un consiglio: leggere la documentazione e familiarizzare con essa sarà di grande aiuto.
Ismael Miguel,


3

C (gcc) , 83 byte

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

Provalo online!


Non vedo alcuna returnaffermazione, come viene restituito c? Comportamento indefinito?
MD XF,

@MDXF Questo è in effetti un comportamento indefinito e un abuso di come gcc utilizza gli stessi registri per valori variabili di assegnazione e di ritorno (vedi suggerimenti per giocare a golf in C ). Questo non è portatile e non funziona necessariamente con altri compilatori (ad esempio non funziona con clang)
scottinet

è davvero impressionante. Come l'hai scoperto?
MD XF,

a volte f ("VO" è anche vero, quando prima è memorizzato "VI"; o forse guasto
l4m2

3

Dyalog APL , 47 byte

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

Provalo online!

Una soluzione regex pura è di 32 byte , ma è anche molto più noiosa di questo approccio.

{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

Invece di usare ⍣¯1per verificare VEVOe aver bisogno della protezione di dfn, puoi farlo 'VEVO'≡¯4↑⍵. Spostare le cose un po 'mi fa venire{('VEVO'≡¯4↑⍵)∧∧/⍵∊⎕D,⎕A,(819⌶)⎕A}
Kritixi Lithos il

@Cowsquack sì, forse mi sarei dimenticato .. Ci sono altri modi migliori per fare questa sfida (cioè risposta di Eriks) e mi piace questa idea: p
dzaima,

3

Grime , 13 byte

e`n{-76"VEVO"

Provalo online!

Niente di speciale qui. Abbina l' einput ntire al modello: al massimo 76 ncaratteri alfanumerici, seguiti dalla stringa VEVO. Stampa 1per corrispondenza e 0per nessuna corrispondenza. Ho ricordato che l'ultima citazione potrebbe essere rimossa alla fine della riga, ma a quanto pare provoca solo un errore di analisi.


3

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

Provalo online!

a=>a.Where(x=>char.IsLetterOrDigit(x)).Count()==a.Length&a.Length<81&a.EndsWith("VEVO")

Ciò non fallirebbe se l'input contiene caratteri non alfanumerici?
Shaggy,

@Shaggy Hai ragione, riparerò un po 'più tardi.
Liefde:

Ho verificato con TIO e ho scoperto che l'ingresso "ConnieTalbotVEVO" (che dovrebbe essere un input valido) è stato erroneamente dichiarato input non valido.
Bagas Sanjaya,

@BagasSanjaya È perché ho messo le schede dopo di esso nel caso di test, ho rimosso le schede e sarà lo stesso del caso di test sopra e funzionerà.
Liefde:

73 + 18: a=>a.All(x=>char.IsLetterOrDigit(x)&x<123)&a.Length<81&a.EndsWith("VEVO")solo lettere ASCII o 67 + 18: a=>a.All(x=>char.IsLetterOrDigit(x))&a.Length<81&a.EndsWith("VEVO")con supporto unicode
dg3

2

> <> , 147 125 byte

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

Provalo online!

> <> , 147 byte

Provalo online!

Stampa 1 se la stringa di input è valida e nulla per un input non valido.

Modifica 1: Modificati i controlli alfanumerici per usare gli intervalli piuttosto che confrontarli con ogni personaggio. (risparmio di 22 byte)


Al momento non ho tempo per giocare a golf, ma sono abbastanza sicuro che puoi perdere byte facendo confronti con i codici dei caratteri. L'essenza di ciò sarebbe quella di rifiutare le cose meno di '0' e maggiori di 'z' e quindi rifiutare le cose tra '9' e 'A' così come tra 'Z' e 'a'.
Cole

@cole: - Non ero sul mio PC per cambiarlo ieri dopo il post, ma hai ragione, i confronti si interrompono un po '. Sono sicuro che se esegui la scansione del codice potresti essere in grado di eliminare alcuni byte extra.
Pellicano verde acqua

2

Bash, 53 26 30 byte

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

Codice di uscita 0 per risultati VALIDI e 1 per risultati NON VALIDI.

Funziona ancora su 80 caratteri o meno.

-27 byte dalla rimozione dell'output, grazie a @KeyWeeUsr

+4 byte, regex fisso (uguale a tutti gli altri)

Provalo online!


Puoi solo echo 1per vero, o semplicemente andare senza alcuna eco. Non è necessario eseguire l'eco di nulla poiché si finisce con un codice di uscita con cui si controlla effettivamente &&e||
KeyWeeUsr

Ok, non ero sicuro di quale tipo di output (se presente) fosse richiesto. La domanda non ha detto davvero.
Probabilmente il

L'idea di "verità" è spiegata qui codegolf.meta.stackexchange.com/q/2190/16658 ed è generalmente implicita universalmente se non diversamente specificato
Sirene,

Questo non produce nulla su TIO. Inoltre, RegEx consente i caratteri di sottolineatura, cosa che non dovrebbe. E non stai controllando la lunghezza. Richiediamo che le soluzioni siano pienamente funzionali qui, i lavori in corso non dovrebbero essere pubblicati. Consiglio di eliminarlo fino a quando non è possibile risolvere i problemi. (In una nota correlata, perché le persone votano soluzioni che chiaramente non funzionano?)
Shaggy

@Shaggy L'output è tramite il codice di uscita.
totalmente umano il

2

> <> , 101 89 83 81 94 byte

Modifica: è passato al controllo dei caratteri non alfanumerici anziché alfanumerici. Passato indietro perché ho dimenticato di controllare tra Z e a. Grazie @Emigna. Strappa quei byte persi però

Modifica 2: Inoltre, posso semplicemente sbarazzarmi di quelli}}}}. Grazie pellicano Teal per questo e per aver trovato il problema con TIO

Modifica 3: sostituito a ~~~ con ap

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

Non so perché questo non funziona su TIO, ma funziona bene qui . Il problema era che i comandi {} in TIO non funzionano per un elenco vuoto.Provalo qui

Come funziona

!\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

Per coerenza, sostituendo il; nell'ultima riga con un'istruzione non valida rende ogni uscita un errore.


Credo che il tuo errore TIO potrebbe essere il modo in cui funziona con l'ordinamento sulla suddivisione dello stack finale. TIO LINK QUI Avere un casino in TIO è possibile cambiarlo in questo.
Pellicano verde acqua

Grazie @Tealpelican. Risolto il problema e ucciso qualche altro byte
Jo King il

Manca il controllo per i caratteri tra "Z" e "a".
Emigna,

@Emigna Oops, grazie! Fisso!
Jo King,

2

C ++, 129 105 102 byte

Grazie ad altre risposte che mi hanno mostrato che posso contare il numero di caratteri
-2 byte grazie a Zacharý

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

TIO LINK


Dov'è il link TIO alla tua risposta? Vorrei testare il tuo codice ...
Bagas Sanjaya il

Perdonami se questa è una mancanza di conoscenza del C ++. Puoi spostare rimuovere la variabile re avere solo la regex all'interno della chiamata std::regex_match?
Zacharý,

C'è uno spazio non necessario dopo la virgola
Zacharý

È possibile rimuovere la virgola lo spazio dopo la virgola.
Zacharý,



1

Java (OpenJDK 8) , 37 36 byte

Risposta piuttosto semplice usando un po 'di regex adorabile.
Probabilmente la risposta Java più breve che abbia mai fatto.
-1 byte grazie a Neil sulla risposta Javascript

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

Provalo online!





1

V , 17 byte

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

Provalo online!

hexdump:

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

Regex compressi per la vittoria!

ø                   " 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

1

Ruby -n, 22 + 1 = 23 byte

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

Uscita 0se vero, nilse falso

Provalo online!

Usando la stessa regex noiosa di tutti gli altri.





1

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

-6 byte grazie a ETHproductions

Aggiunti 4 byte. Non ho visto che il carattere di sottolineatura non era permesso.

Questo è il mio primo golf, quindi spero di averlo fatto bene.

Restituisce 1 se valido, 0 in caso contrario.

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

Provalo online!


1
Benvenuti in PPCG! È possibile rimuovere spazi bianchi estranei per ridurre a 25 (+1) byte:print/^\w{1,76}VEVO$/?1:0
ETHproductions

+0converte il bool di corrispondenza in numero anziché ?1:0salvare 2 byte. Chiamare con -plestampe $_per te. Quindi: perl -ple '$_=/^[^\W_]{0,76}VEVO$/+0'. 25 byte. Se sei felice di ottenere spazi vuoti su linee non corrispondenti, $_=/^[^\W_]{0,76}VEVO$/è di 23 byte.
Phil H,

0

Fogli Google, 33 byte

Funzione del foglio di lavoro anonima che accetta input dall'intervallo A1e output nella cella chiamante

=RegexMatch(A1,"^[^\W_]{0,76}VEVO

Dov'è la staffa di chiusura?
Bagas Sanjaya,

@BagasSanjaya è una delle cose meravigliose di Fogli Google, completa automaticamente stringhe e gruppi non chiusi. Quindi, quando questo viene incollato in una cella e fai clic sulla cella o premi invio GS, lo converte =RegexMatch(A1,"^[^\W_]{0,76}VEVO")senza alcun feedback per l'utente ed esegue
Taylor Scott

-1

Clojure , 146 byte

(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"))))

Provalo online!

Questo sarebbe molto più breve usando un regex, ma ho pensato che farlo manualmente sarebbe stato più interessante.

(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")))

Qualche collegamento TIO per i test?
Bagas Sanjaya,

@BagasSanjaya Posso aggiungerne uno tra un po '. Sembra che l'aggiunta di collegamenti TIO sia standard ora. Sono stati facoltativi l'ultima volta che ho usato il sito frequentemente, ma ora tutti li stanno aggiungendo.
Carcigenicato il

@BagasSanjaya Ho aggiunto un link. Sfortunatamente TIO sembra rotto. Non riesce a trovare la ends-with?funzione, anche se fa parte della libreria standard.
Carcigenicato il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.