VEVO Kullanıcı Hesabı Denetleyicisi


21

Youtube'da sık sık müzik videoları görüyoruz. Müzik videoları barındıran birçok Youtube kanalı "VEVO tarafından desteklenmektedir". Bunlar hem küçük resimlere VEVO'yu gömmek suretiyle ve VEVO'yu kanal adlarına ekleyerek kolayca tanımlanabilir.

Şimdi, kullanıcı tarafından verilen bir dizinin VEVO kullanıcı hesabı olup olmadığını test etmek için bir kod yazın.

Geçerli VEVO kullanıcı hesap dizgileri için gerekenler:

  • Yalnızca büyük harf, küçük harf ve rakam karakterleri içermelidir. (boşluk veya noktalama yok)

  • 80 karakter uzunluğunu geçmemelidir.

  • Dizenin sonunda "VEVO" alt dizgisine sahip olmalı

Test durumları:

Geçerli girişler:

AdeleVEVO
ConnieTalbotVEVO
SHMVEVO
justimberlakeVEVO
DJMartinJensenVEVO
test123VEVO

Geçersiz girişler:

syam kapuk
jypentertainment
Noche de Brujas
testVEVO123

Tabii ki, çünkü bu , herhangi bir programlama dilini kullanan en kısa kodu arıyorum.


4
Güzel ilk soru! +1
LiefdeWen

12
test çalışmaları: VEVOveūņīčōdēVEVO
dzaima

8
diğer önerilen test durumları: test123VeVove 80'den fazla karakter içeren bir tane
Arnauld,

6
En iyi cevabı kabul etmeden önce çok daha fazla beklemelisin; Bu soru sadece bir saattir sürüyor ve insanların cevap verebileceği çok fazla dil var!
Luke Stevens,

5
"büyük harf, küçük harf ve rakam karakterleri", A-Za-z0-9'u kastettiğinizi (sanırım, herkesin zaten yaptığını farz ediyorum) tanımlamayı gerektiriyor; örnek ve ve diğer alfabelerdeki rakamlar, örneğin (9)
Jonathan Allan,

Yanıtlar:



6

Japt v2.0a0, 20 16 bayt

1Geçerli veya 0geçersiz için döndürür . Aynı bayt sayısı [\l\d]yerine de [^\W_]çalışırdı.

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

Deneyin | Tüm test durumlarını kontrol et

Açıklama : èGirdide RegEx ile eşleşen sayısını sayar. Japt'de, \wRegEx sınıfı alt çizgi içermez.


Güzel bir. Regex olmadan yapabileceğim en iyi şey;¥oB+mc)¯80 ©"VEVO"¥Ut4n
ETHproductions

@ETHproductions, güzel bir numara B+mc:) Bu arada, Japt2'nin karakter sınıfı olsaydı [A-Za-z0-9], burada Retina'yı yenebilirdik! Hatta ağır basan değerinde olabilir \w& \W.
Shaggy

Heh, aslında bunu yapmayı planladığımı düşünüyorum ... Genel olarak Japt üzerinde çalışmaya başlamalıyım: P
ETHproductions

4

JavaScript (ES6), 27 36 34 31 bayt

@Neil ve @Shaggy sayesinde 3 byte sayesinde 2 bayt kaydedildi

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

Test durumları


2
Does not \wmaç _yanı s?
Neil

((?!_)\w)2 bayt kurtardığını düşünüyorum .
Neil

1
Misiniz [^\W_]bir iş için 3 bayt tasarrufu ?
Shaggy

@Shaggy Heck. Nedense, bu tür karakter sınıflarının karakter kümeleri içinde çalışmadığını düşünüyordum. Teşekkürler!
Arnauld,

JS'nin lambayı atlamanın bir yolu yok mu? Gibi /^[^\W_]{0,76}VEVO$/.testya da bir şey?
tamamen insanlık

4

PHP , 51 bayt

-10 bayt <?=yerine Ismael Miguel yerine kullanmak için <?php echo! ve kapanış etiketini kaldırma

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

Çevrimiçi deneyin!

Diğer cevaplar için teşekkürler, bu yüzden regex yazmak zorunda kaldım!


1
Bunun yerine <?php echoyapabilirsin <?=preg_match("/^[^\W_]{0,76}VEVO$/",fgets(STDIN));.
Ismael Miguel

Rica ederim. PHP etiketini kapatabilirsiniz. Belgelerin alıntılanması: "Bir dosya saf PHP koduysa, dosyanın sonunda PHP kapanış etiketini atlamak tercih edilir." ( php.net/manual/en/language.basic-syntax.phptags.php ). Bu size 2 bayt daha kazandırmalıdır. Ayrıca, bunun yerine [^\W_], sadece \waynı olanı kullanın [a-zA-Z_].
Ismael Miguel,

1
Teşekkürler, şimdi güncellemek için birkaç cevabım var!
NK1406

Rica ederim. Bir tavsiye: belgeleri okumak ve onunla tanışmak size çok yardımcı olacaktır.
Ismael Miguel,


3

C (gcc) , 83 bayt

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

Çevrimiçi deneyin!


Hiçbir returnifade göremiyorum , bu nasıl geri döner c? Tanımlanmamış davranış?
MD XF

@MDXF Bu tanımlanamayan bir davranış ve gcc'nin değişken atama ve geri dönüş değerleri için aynı kayıtları nasıl kullandığına yönelik bir kötüye kullanımdır ( C’de golf oynamak için ipuçlarına bakın) ). Bu taşınabilir değildir ve mutlaka diğer derleyicilerle çalışmaz (örneğin clang ile çalışmaz)
scottinet 22:17

bu çok etkileyici. Bunu nasıl öğrendin?
MD XF

bazen f ("VO" da, "VI" daha önce kaydedildiğinde doğrudur; ya da hata olabilir
l4m2

3

Dyalog APL , 47 bayt

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

Çevrimiçi deneyin!

Saf bir regex çözümü 32 byte , ancak aynı zamanda bu yaklaşımdan çok daha sıkıcı.

{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

Dfn korumasını ⍣¯1kontrol etmek VEVOve ihtiyaç duymak yerine , bunu yapabilirsiniz 'VEVO'≡¯4↑⍵. Bir şeyleri etrafta {('VEVO'≡¯4↑⍵)∧∧/⍵∊⎕D,⎕A,(819⌶)⎕A}
dolaştırmak

@Cowsquack evet, unutmuş olabilirim .. Bu zorluğun üstesinden gelmenin daha iyi yolları var (yani Eriks cevaplıyor) ve bu fikri sevdim: p
dzaima

3

Grime , 13 bayt

e`n{-76"VEVO"

Çevrimiçi deneyin!

Burada süslü bir şey yok. Eşleşme edesen karşı ntire girişi: çoğu 76 alfa de numeric karakterler, dize izledi VEVO. Eşleşme 1için ve 0eşleşme olmadan yazdırır . Son teklifin satır sonunda kaldırılabileceğini hatırladım, ancak görünüşe göre sadece ayrıştırma hatasına neden oluyor.


3

C # (.NET Çekirdeği) , 87 + 18 = 105 bayt

Çevrimiçi deneyin!

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

Girdi alfasayısal olmayan karakterler içeriyorsa bu başarısız olmaz mı?
Shaggy

@Shaggy Haklısın, biraz sonra çözecek.
LiefdeWen

TIO ile kontrol ettim ve "ConnieTalbotVEVO" girişinin (geçerli giriş olmalı) yanlış olarak geçersiz giriş olarak ilan edildiğini öğrendim.
Bagas Sanjaya

@BagasSanjaya Test sekmesine sonradan sekmeleri koydum, sekmeleri çıkardım ve yukarıdaki test senaryosuyla aynı olacak ve çalışacak.
LiefdeWen

73 + 18: a=>a.All(x=>char.IsLetterOrDigit(x)&x<123)&a.Length<81&a.EndsWith("VEVO")sadece ASCII harfleri veya 67 + 18: a=>a.All(x=>char.IsLetterOrDigit(x))&a.Length<81&a.EndsWith("VEVO")unicode desteği ile
dg3

2

> <> , 147 125 bayt

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

Çevrimiçi deneyin!

> <> , 147 bayt

Çevrimiçi deneyin!

Bu, giriş dizesi geçerliyse ve geçersiz bir giriş için hiçbir şey yoksa, 1 olarak yazdırılır.

Düzenleme 1: Her karakterle karşılaştırmak yerine aralıkları kullanmak için Alfanümerik kontrolleri değiştirdi. (22 bayt kaydediliyor)


Şu anda bunu golf oynamaya vaktim yok ama karakter kodlarıyla karşılaştırma yaparak bayt kaybedebileceğinizden eminim. Bunun amacı, '0' 'dan küçük ve' z 'den büyük şeyleri reddetmek ve' 9 'ile' A 've' Z 'ile' a 'arasındaki şeyleri reddetmek olacaktır.
Cole

@cole: - Göndermeden sonra dün bunu değiştirmek için bilgisayarımda değildim, ama haklısın, karşılaştırmalar biraz azaldı. Eminim kod boyunca tarama yaparsanız fazladan baytları atlatabilirsiniz.
Peal Pelikan

2

Bash, 53 26 30 bayt

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

VALID sonuçları için 0 kodundan ve INVALID sonuçları için 1 kodundan çıkın.

Hala 80 karakter veya daha az karakter üzerinde çalışıyorum.

@KeyWeeUsr sayesinde çıkışı kaldırmadan -27 bayt

+4 bayt, sabit regex (diğer herkesle aynı)

Çevrimiçi deneyin!


Sadece echo 1doğru için yapabilir veya herhangi bir yankı olmadan gidebilirsiniz. Hala kontrol ettiğiniz bir çıkış kodunu &&||
doldurduğunuzda

Tamam, ne tür bir çıktı (varsa) gerekli olduğundan emin değildi. Soru gerçekten söylemedi.
Muhtemelen

'Truthy' fikri burada açıklanmıştır, burada codegolf.meta.stackexchange.com/q/2190/16658 ve aksi belirtilmediği sürece genel olarak belirtilmiştir
Sirens

Bu, TIO'da hiçbir şey çıkarmaz. Ayrıca, RegEx'iniz, olmaması gereken alt çizgilere izin verir. Ve uzunluğu kontrol etmiyorsun. Burada tamamen işlevsel olması için çözümlere ihtiyacımız var, devam etmekte olan çalışmalar yayınlanmamalıdır. Sorunları çözene kadar silmenizi tavsiye ederim. (İlgili bir notta, insanlar neden açıkça çalışmayan çözümleri tercih ediyorlar?)
Shaggy

@Shaggy Çıkış, çıkış kodu üzerinden yapılır.
Tamamen insan

2

> <> , 101 89 83 81 94 bayt

Düzenleme: Alfanümerik değil, alfanümerik olmayan karakterleri kontrol etmeye geçirilir. Geri döndü, çünkü Z ve a arasında kontrol etmeyi unuttum. @Emigna teşekkürler. Yine de kayıp baytları kopyala

Düzenleme 2: Ayrıca, bunlardan tamamen kurtulabilirim}}}}. Bunun için Teal pelikan ve TIO ile sorunu bulmak için teşekkürler

Düzenleme 3: a ile bir ~~~ değiştirildi

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

Bunun neden TIO'da işe yaramayacağını bilmiyorum, ama burada iyi çalışıyor . Sorun, TIO’daki {} komutlarının boş bir liste için çalışmamasıydı.Buradan Deneyin

Nasıl çalışır

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

Tutarlılık için, yerine; geçersiz komut ile son satırında her çıktı bir hata yapar .


TIO hatanız, son istifleme bölmesinde sipariş verme ile nasıl çalıştığı olabileceğine inanıyorum. BURADA TIO BAĞLANTISI TIO'da bir karmaşa olması durumunda bunu değiştirebilirsiniz.
Peal Pelikan

@Tealpelican'a teşekkürler. Bu düzeltildi ve birkaç bayt daha öldürüldü
Jo King

"Z" ve "a" arasındaki karakterlerin kontrolünü kaçırıyorsunuz.
Emigna

@Emigna Oops, teşekkürler! Sabit!
Jo King,

2

C ++, 129 105 102 bayt

Bana verilen diğer cevaplar
sayesinde Zacharý sayesinde -2 bayt karakter sayısını sayabileceğimi gösterdim.

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

TIO LINK


Cevabınızdaki TIO bağlantısı nerede? Kodunuzu test etmek istiyorum ...
Bagas Sanjaya

C ++ bilgisi yoksa beni affet. Değişkeni kaldırabilir rve çağrının içindeki regex'i kaldırabilir misiniz std::regex_match?
Zacharý


Virgülden sonra virgülün üstünü kaldırabilirsiniz.
Zacharı



1

Java (OpenJDK 8) , 37 36 bayt

Bazı güzel regex kullanarak oldukça basit bir cevap.
Muhtemelen şimdiye kadar yaptığım en kısa Java cevabı.
Javascript cevabındaki Neil'a -1 bayt teşekkürler

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

Çevrimiçi deneyin!





1

V, 17 bytes

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

Try it online!

Hexdump:

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

Compressed regexes for the win!

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

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

Output 0 if true, nil if false

Try it online!

Using the same boring regex as everybody else.





1

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

-6 bytes thanks to ETHproductions

Added 4 bytes. Didn't see that underscore wasn't allowed.

This is my first golf, so here's hoping I did it right.

Returns 1 if valid, 0 if not.

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

Try it online!


1
Welcome to PPCG! You can remove extraneous whitespace to get down to 25 (+1) bytes: print/^\w{1,76}VEVO$/?1:0
ETHproductions

+0 converts match bool into number, rather than ?1:0, saves 2 bytes. Calling with -ple prints $_ for you. So: perl -ple '$_=/^[^\W_]{0,76}VEVO$/+0'. 25 bytes. If you are happy to get blanks on non-matching lines, $_=/^[^\W_]{0,76}VEVO$/ is 23 bytes.
Phil H

0

Google Sheets, 33 Bytes

Anonymous worksheet function that takes input from range A1 and outputs to the calling cell

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

Where's the closing bracket?
Bagas Sanjaya

@BagasSanjaya that's one of the wonderful things about Google Sheets, it autocompletes unclosed strings and groups. So when this is pasted into a cell and you either click off the cell or press enter GS converts this to =RegexMatch(A1,"^[^\W_]{0,76}VEVO") without any feedback to the user and executes
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"))))

Try it online!

This would be much shorter using a regex, but I figured doing it manually would be more interesting.

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

Any TIO link for testing?
Bagas Sanjaya

@BagasSanjaya I can add one in a bit. It seems like adding TIO links are standard now. They were optional last time I used the site frequently, but now everyone's adding them.
Carcigenicate

@BagasSanjaya I added a link. Unfortunately TIO seems broken. It can't find the ends-with? function, even though that's part of the standard library.
Carcigenicate
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.