VEVOユーザーアカウントチェッカー


21

YouTubeでミュージックビデオをよく見ます。ミュージックビデオをホストする多くのYoutubeチャンネルは「powered by VEVO」です。これらは、ビデオサムネイルにVEVOを埋め込むことと、チャンネル名にVEVOを追加することで簡単に識別できます。

ここで、ユーザーが指定した文字列がVEVOユーザーアカウントかどうかをテストするコードを作成します。

有効なVEVOユーザーアカウント文字列の要件:

  • 大文字、小文字、数字のみを含める必要があります。(空白または句読点なし)

  • 80文字を超えることはできません。

  • 文字列の最後に「VEVO」部分文字列が必要です

テストケース:

有効な入力:

AdeleVEVO
ConnieTalbotVEVO
SHMVEVO
justimberlakeVEVO
DJMartinJensenVEVO
test123VEVO

無効な入力:

syam kapuk
jypentertainment
Noche de Brujas
testVEVO123

もちろん、これはなので、あらゆるプログラミング言語を使用して最短のコードを探しています。


4
素敵な最初の質問!+1
LiefdeWen

12
テストケース:VEVOおよびūņīčōdēVEVO
dzaima

8
他の提案のテストケース:test123VeVoと80個の以上の文字を1
アルノー

6
ベストアンサーを受け入れる前に、さらに長く待つ必要があります。質問はたった1時間で終わり、人々が答える言語は他にもたくさんあります!
ルークスティーブンス

5
「大文字、小文字、数字」は定義する必要があります(A-Za-z0-9を意味すると仮定します(すべて既に行ったと思いますが、大文字でも小文字でも構いません)例し、例えば、他のアルファベット、桁(9)。
ジョナサン・アラン

回答:



6

JAPT v2.0a0、20の 16バイト

1有効または0無効を返します。同じバイト数の[\l\d]代わりに機能し[^\W_]ます。

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

それを試してください | すべてのテストケースを確認する

説明è入力内の正規表現の一致数をカウントします。Japtでは、\wRegExクラスにアンダースコアは含まれません。


良いですね。私は正規表現なしで行うことができる最高です;¥oB+mc)¯80 ©"VEVO"¥Ut4n
ETHproductions

@ETHproductions、と素敵なトリックB+mcJapt2がために文字クラスを持っていた場合ところで:)は、[A-Za-z0-9]私たちはここに網膜を打つことができます!でもオーバーライド価値があるかもしれない\w\W
シャギー

ああ、私は実際にそれを実際に行うことを計画していたと思います...私は一般的にJaptの作業に戻る必要があります:P
ETHproductions

4

JavaScript(ES6)、27 36 34 31バイト

@Neilのおかげで2バイト、@ Shaggyのおかげで3バイト節約

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

テストケース


2
s も\w一致しません_か?
ニール

((?!_)\w)2バイト節約できると思います。
ニール

1
思い[^\W_]のために働く3バイトの節約
シャギー

@Shaggy Heck。何らかの理由で、このような文字クラスは文字セット内では機能しないと考えていました。ありがとう!
アーナルド

JSにはラムダをスキップする方法がありませんか?好き/^[^\W_]{0,76}VEVO$/.testか何か?
完全に人間

4

PHP、51バイト

@Ismael Miguelの<?=代わりに<?php echo!終了タグを削除します

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

オンラインでお試しください!

他の回答をありがとう、正規表現を書く必要はありませんでした!


1
代わりに<?php echo、できます<?=preg_match("/^[^\W_]{0,76}VEVO$/",fgets(STDIN));
イスマエルミゲル

どういたしまして。PHPの終了タグは省略できます。ドキュメントを引用:「ファイルが純粋なPHPコードである場合、ファイルの最後のPHP終了タグを省略することをお勧めします。」(php.net/manual/en/language.basic-syntax.phptags.php)。これにより、さらに2バイト節約できます。また、の代わりにを[^\W_]使用します\w。これはと同じ[a-zA-Z_]です。
イスマエルミゲル

1
おかげで、今すぐ更新するいくつかの答えがあります!
NK1406

どういたしまして。1つのアドバイス:ドキュメントを読んで、それに慣れることは大いに役立ちます。
イスマエルミゲル


3

C(gcc)、83バイト

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

オンラインでお試しください!


returnステートメントは表示されませんが、これはどのように戻りcますか?未定義の動作?
MD XF

@MDXFこれは確かに未定義の動作であり、gccが変数の割り当てと戻り値に同じレジスタを使用する方法の乱用です(Cでのゴルフのヒントを参照)。これはポータブルではなく、必ずしも(例えば、それが打ち鳴らすと仕事をしない)他のコンパイラでは動作しない
scottinet

それはとても印象的です。どのようにしてそれを見つけましたか?
MD XF

時々 (「VOは」前「VI」が格納されている場合にも、真実であるF;または多分障害
l4m2

3

Dyalog APL、47バイト

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

オンラインでお試しください!

純粋な正規表現ソリューションは32バイトですが、このアプローチよりもずっと退屈です。

{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ガード⍣¯1をチェックしVEVOて必要とする代わりに、を使用できます'VEVO'≡¯4↑⍵。少し周りのものを移動すると、私を取得します{('VEVO'≡¯4↑⍵)∧∧/⍵∊⎕D,⎕A,(819⌶)⎕A}
KritixiのLithos

@Cowsquackええ、私は忘れていたかもしれません..しかし、この挑戦​​をする他のより良い方法があります(すなわち、エリクの答え)そして、私はこのアイデアが好きです:p
dzaima

3

グライム、13バイト

e`n{-76"VEVO"

オンラインでお試しください!

ここには何も派手なものはありません。一致eパターンに対するntire入力を:ほとんどの76アルファでnumeric文字、文字列が続きますVEVO1一致する場合と一致0しない場合に印刷します。行末で最後の引用を削除できることを思い出しましたが、どうやらそれは単に解析エラーを引き起こすだけです。


3

C#(.NET Core)、87 + 18 = 105バイト

オンラインでお試しください!

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

入力に英数字以外の文字が含まれている場合、これは失敗しませんか?
シャギー

@Shaggyあなたは正しい、少し後で修正します。
LiefdeWen

TIOで確認したところ、入力 "ConnieTalbotVEVO"(有効な入力である必要があります)が無効な入力として誤って宣言されていました。
バガスサンジャヤ

@BagasSanjayaそれは、テストケースの後にタブを配置し、タブを取り出すと、上記のテストケースと同じになり、動作するためです。
LiefdeWen

73 + 18:a=>a.All(x=>char.IsLetterOrDigit(x)&x<123)&a.Length<81&a.EndsWith("VEVO")唯一のASCII文字または67 + 18:a=>a.All(x=>char.IsLetterOrDigit(x))&a.Length<81&a.EndsWith("VEVO")Unicodeサポート付き
DG3

2

> <>147125バイト

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

オンラインでお試しください!

> <>、147バイト

オンラインでお試しください!

入力文字列が有効な場合は1を出力し、無効な入力の場合は何も出力しません。

編集1:すべての文字と比較するのではなく、範囲を使用するように英数字チェックを変更しました。(22バイトを節約)


私は今これをゴルフする時間はありませんが、文字コードと比較することでバイトを失う可能性があると確信しています。その要点は、「0」より小さく「z」より大きいものを拒否し、「9」から「A」の間、および「Z」から「a」の間のものを拒否することです。
コール

@cole:-昨日の投稿後、これを変更するために私のPCにはいませんでしたが、あなたは正しいです、比較は少し中断します。コード全体をスキャンすると、余分なバイトを削除できる可能性があります。
ティールペリカン

2

Bash、53 26 30バイト

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

VALID結果の場合は終了コード0、INVALID結果の場合は1を終了します。

まだ80文字以下で作業中です。

@KeyWeeUsrのおかげで、出力の削除から-27バイト

+4バイト、固定正規表現(他のすべてと同じ)

オンラインでお試しください!


あなたはただecho 1本当のことをすることができます、または単にエコーなしで行くことができます。あなたはまだあなたが実際に確認することを終了コードで終わるようエコーは何もする必要はありません&&とは||
KeyWeeUsr

さて、どのような出力が(もしあれば)必要なのかわかりませんでした。質問は本当に言いませんでした。
おそらく

「truthy」のアイデアがここで説明されcodegolf.meta.stackexchange.com/q/2190/16658とそうでないとして指定されない限り、一般的に普遍的に暗示される
サイレン

TIOには何も出力されません。また、正規表現ではアンダースコアを使用できますが、アンダースコアは使用できません。そして、あなたは長さをチェックしていません。ここでは、ソリューションが完全に機能する必要があります。進行中の作業は投稿しないでください。問題を解決できるまで削除することをお勧めします。(関連するメモでは、なぜ人々は明らかに機能しないソリューションに賛成票を投じるのですか?)
シャギー

@Shaggy出力は終了コード経由です。
完全に人間

2

> <>101 89 83 81 94バイト

編集:英数字ではなく、英数字以外の文字のチェックに切り替えました。Zとaの間を確認するのを忘れたため、スイッチバック @Emignaに感謝します。ただし、これらの失われたバイトをリッピングします

編集2:また、私はそれらの}}}}を完全に取り除くことができます。Tealペリカンに感謝し、TIOの問題を発見

編集3:~~~をapに置き換えました

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

TIOでこれが機能しない理由はわかりませんが、ここでは問題なく機能します問題は、TIOの{}コマンドが空のリストに対して機能しないことでした。ここで試してみてください

使い方

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

一貫性を保つため、;を置き換えます。無効な命令を含む最後の行では、すべての出力がエラーになります。


TIOエラーは、終了するスタックスプリットでの順序付けとどのように機能するかを考えています。TIOリンクはこちらTIOに混乱が生じた場合、これに変更できます。
ティールペリカン

@Tealpelicanに感謝します。それを修正し、さらに数バイトを
ジョーキング

「Z」と「a」の間の文字のチェックがありません。
エミグナ

@Emignaおっと、ありがとう!一定!
ジョーキング

2

C ++、129の 105 102バイト


Zacharýのおかげで、文字数-2バイトを数えることができることを私に示した他の回答の おかげで

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

TIO LINK


TIOリンクはどこにありますか?私は...あなたのコードをテストしたい
Bagasサンジャヤ

これがC ++の知識不足の場合はご容赦ください。移動して変数を削除しrて、正規表現を呼び出しの中に入れることができますstd::regex_matchか?
ザカリー

コンマの後に不要なスペースがあります
ザカリー

カンマの後のスペースでカンマを削除できます。
ザカリー







1

V、17バイト

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

オンラインでお試しください!

Hexdump:

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

勝利のための圧縮正規表現!

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

Perl 5の35 29 + 1(-a)= 30バイト

ETHproductionsのおかげで-6バイト

4バイトを追加しました。アンダースコアが許可されていないことはわかりませんでした。

これは私の最初のゴルフですので、ここで私がそれを正したことを願っています。

有効な場合は1、無効な場合は0を返します。

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

オンラインでお試しください!


1
PPCGへようこそ!あなたは25(1)に降りるために余分な空白を削除することができますバイト:print/^\w{1,76}VEVO$/?1:0
ETHproductions

+0マッチboolを数値ではなく数値に変換して?1:0、2バイト節約します。あなたのために-pleプリント$_で呼び出します。だから:perl -ple '$_=/^[^\W_]{0,76}VEVO$/+0'。25バイト。一致しない行で空白を取得しても問題ない場合、$_=/^[^\W_]{0,76}VEVO$/23バイトです。
フィルH

0

Googleスプレッドシート、33バイト

範囲から入力を受け取りA1、呼び出しセルに出力する匿名ワークシート関数

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

閉じ括弧はどこにありますか?
バガスサンジャヤ

@BagasSanjayaはGoogleスプレッドシートのすばらしい点の1つで、閉じられていない文字列とグループを自動補完します。これをセルに貼り付けて、セルをクリックするかEnterキーを押すと、GS =RegexMatch(A1,"^[^\W_]{0,76}VEVO")はユーザーにフィードバックせずにこれを変換し、実行します
Taylor Scott

-1

Clojure、146バイト

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

オンラインでお試しください!

これは正規表現を使用するとはるかに短くなりますが、手動で実行する方が面白いと考えました。

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

テスト用のTIOリンクはありますか?
バガスサンジャヤ

@BagasSanjaya少し追加できます。TIOリンクの追加は現在標準のようです。前回サイトを頻繁に使用したときはオプションでしたが、今では誰もが追加しています。
発癌性

@BagasSanjayaリンクを追加しました。残念ながら、TIOは壊れているようです。ends-with?標準ライブラリの一部であるにもかかわらず、関数を見つけることができません。
発癌性
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.