Quinean Regex Tester


13

この課題は非常に簡単です。入力として、正規表現を使用します。

次に、ソースコードが正規表現と一致するかどうかの真実/偽を出力します。とても簡単です!あと2つだけ:

  • 馬のビルトインはありません。ただし、ファイルIOなどによりコードのソースコードにアクセスできます。
  • これはなので、バイト単位の最短コードが勝ちです!

ソースコードがの場合abc、の入力はa\wctrueを返し、の入力はa\dcfalseを返します。


例ください?
ママファンロール

1
@CᴏɴᴏʀO'Bʀɪᴇɴいいえ、大丈夫です。
マルティセン

2
1. 単純な文字クラスを持つBREだけでは十分だとは思いません。どのBRE機能をサポートする必要がありますか?2. \dBREでは特別ではありません。文字に一致しますd。3.特定の正規表現フレーバーを選択すると、それをサポートする言語への挑戦が制限され、BREをサポートする言語はほとんどありません。それは意図的ですか?
デニス

2
回答者に任せることをお勧めします。言語xがデフォルトで正規表現フレーバーyを使用する場合、このチャレンジでそのフレーバーを使用するようにします。
デニス

6
@Maltysenなぜ質問本文に部分文字列の例を追加しないのですか?
-feersum

回答:


14

Zシェル、12バイト

grep "$@"<$0

Zsh条件式は終了コードのみを理解し、それに応じてスクリプトは0または1で終了します。

また、一致のために、このプリント非空の文字列(ソースコード)とと組み合わせてtruthy / falsy値としてあり得るミスマッチのために空の、test/ [

プログラムは独自のファイルを読み取りますが、OPによるこのコメントによれば、これは許可されています。


3
Aaand Dennisが勝ちました。¯\ _(ツ)_ /¯
コナー・オブライエン

これは機能しません。スペースが入っているパターンで中断します。
-feersum

@feersumおっと!それを指摘してくれてありがとう。回答を編集しました。
デニス

2
名前にスペースが含まれるファイルに書き込まれると壊れます。またはというファイル-v。それとも...
ベン・ミルウッド

@BenMillwood私は通常、そのようなファイル名保存しないでくださいと言いますが、zshに切り替えるとバイト数を増やすことなく防弾になります。
デニス


9

Python 3、119バイト

これはIMOのほうがクールに見えます(ファイルを読み取りません)。

(lambda i:print(bool(__import__('re').search(input(),i))))("(lambda i:print(bool(__import__('re').search(input(),i))))")

Python 3、67バイト

print(bool(__import__('re').search(input(),open(__file__).read())))

このコメントを読んだ後に追加されました。


intはより短いbool

7

ジュリア、64 54バイト

r=readline;show(ismatch(Regex(r()),open(r,@__FILE__)))

ジュリアの正規表現はPCREを使用します。ファイルのソースコードの読み取りは、クインの標準的な抜け穴ですが、この場合、明示的に許可されています。末尾の改行なしで入力を受け取ります。



2

Mathematica、63バイト

StringMatchQ[ToString[#0, InputForm], RegularExpression[#1]] & 

末尾のスペースに注意してください。標準のMma quineメカニズムを使用し、正規表現と一致するかどうかをテストします。


2

Perl、21バイト

open 0;$_=<0>=~$_

17バイト+ 4バイト-pl0。次のように実行します:

echo open | perl -pl0 quinean

ソースファイルには、上記のコードのみが含まれている必要があります(シバンも、末尾の改行も含まれていません)。1正規表現が一致する場合は出力し、一致しない場合は空の文字列を出力します(Perlでは空の文字列はfalseyです)。


入力が改行で終わらないことが保証されている場合、4バイトを保存できます。

open 0;say<0>=~<>

次のように実行します:

echo -n open | perl -M5.010 quinean

sayPerl 5.10以降が必要で、で有効にする必要があります-M5.010Metaによると、「-M5.010必要に応じて、無料で」、17バイトのスコアを与えます。

使い方

これは、標準の「チート」クインの単純なバリエーションです。

open 0;print<0>

これにより、という名前のファイルが開き、で$0コンテンツが読み取られ<0>ます。

$_=<0>=~$_ソースファイルから1行を読み取り、$_-pフラグによって読み取られた)の内容に対して正規表現の一致を行い、結果をに割り当て$_ます。最後に自動的に-p印刷し$_ます。


2

Jolf、18 15バイト

RegExのJSフレーバーをサポートしています。それでいいのですが。ここで試してみてください!

 h$code.value#i

コメント:

  $code.value#      the document's element "code" (the program container)
_h            i     and output if it has (matches) the input string (i.e. regex)

これはどのブラウザで機能しますか?ChromeとFirefoxはどちらもx.step機能ではないことを訴えます。
デニス

@Dennis Huh。昨夜通訳を壊したに違いない。他に何が間違っていますか?私は現在、デバッグできません、学校にいます。
コナーオブライエン

良い。次に、ドキュメントの要素「コード」にショートカットを追加して、短くすることができます。
-user48538

@CᴏɴᴏʀO'Bʀɪᴇɴまた、の参照エラーも示しますmath
デニス

@デニスああ、それが理由です。HTMLを更新するのを忘れて、math.jsを追加しました。手遅れではない場合、私は家に到着したときに修正します。(約4時間)
コナーオブライエン

1

𝔼𝕊𝕄𝕚𝕟、14文字/ 26バイト(非競合)

⟮‼(ⒸⅩ222+ᶈ0)đï

Try it here (Firefox only).

チャレンジ後に書かれたバグ修正付きのバージョンを使用します。

説明

⟮‼(ⒸⅩ222+ᶈ0)đï // implicit: ï=input
⟮               // copy block: copy following code for later use
 (ⒸⅩ222+ᶈ0)   // take convert 10222 to char, add stuff inside copy block
‼           đï // check if input matches resulting string
               // implicit output

注:コピーブロックは、キイン演算子ではありません。これらは、変数宣言のより汎用性の高い代替手段となることを目的としています。


1
10に変更することでバイトを節約できると思います。
lirtosiast16年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.