正規表現の多言語を作成する


19

少なくとも2つの正規表現フレーバー(またはバージョン)で動作する正規表現を作成し、実行中の各フレーバー(またはバージョン)の異なる文字列と一致させます。

このチャレンジで一致する文字列は、Ubuntuコード名の最初の単語で、以下にリストされています。正規表現はリストの先頭から一致する必要があります。つまり、正規表現が3つのフレーバーで動作する場合、他の正規表現ではなく、と一致する必要がWarty HoaryありBreezyます。

Warty
Hoary
Breezy
Dapper
Edgy
Feisty
Gutsy
Hardy
Intrepid
Jaunty
Karmic
Lucid
Maverick
Natty
Oneiric
Precise
Quantal
Raring
Saucy
Trusty
Utopic
Vivid
Wily
Xenial
Yakkety
Zesty
17.10
18.04
18.10
19.04
19.10
...

正規表現が26を超えるフレーバーで機能する場合は、代わりにUbuntuのバージョン番号を一致させることができます。17.10以降、新しいフレーバーごとに、2番目の数値が04の場合は2番目の数値を10に変更し、最初の数値を増分してそれ以外の場合は2番目の数値を04に変更します。

各フレーバーでは、正規表現は想定される文字列のみに一致し、他には何も一致しない必要があります(コード名に限定されません)。末尾の改行は重要ではありません。つまり、正規表現は、末尾の改行を含まない文字列のみと一致するか、末尾の改行を含む文字列のみと一致するか、または両方とも一致する可能性があります。また、異なるフレーバーで一貫している必要はありません。入力は印刷可能なASCII(末尾の改行がある場合はそれを除く)であると想定できます。

スコアは(コードの長さ+ 10)/((フレーバーの数)^ 2)です。最低スコアが勝ちます。


1
確認するだけです-「各フレーバーで、正規表現は想定される文字列のみと一致する必要があります。」とは、各正規表現が1つのUbuntuバージョン名と他の名前のいずれにも一致しないが、他の非バージョンに一致する可能性があることを意味します文字列に名前を付けますか、それとも正規表現が上記のリストのバージョン名ではない場合でも、その正確な文字列のみに一致し、他の文字列には一致しないことを意味しますか?
Sp3000 16

@ Sp3000正確な文字列に一致し、他の文字列には一致しないはずです。
jimmy23013 16

回答:


24

87バイト、5フレーバー、(87 + 10)/ 25 = 3.88

^(((?=W)[[:word:]&&]art|Ho(?=a)\ar|Bre(?=ez)[]e]\z|E(?=dg)[[d]]g)y|(?=Da)[D-[E]]apper)$

今のところ、簡単にテストできるフレーバーを試しました。

一般的な構造はです^((...)y|...)$。つまり、末尾yのsを因数分解し、アンカーを追加します。

いぼ状(PCRE)

(?=W)[[:word:]&&]art

PCREおよびRubyでは[[:word:]]、単語文字に一致するPOSIX文字クラスです。他のフレーバーでは、[[:word:]文字クラスを取得してからリテラルを取得&&]し、(?=W)アサートに失敗します。Rubyを失敗させるに&&は、POSIXクラスと何も交差させないようにしますが、PCRE &&では特別な意味はありません。

Hoary(Javascript)

Ho(?=a)\ar

なんらかの理由で、Javascriptは\a文字列である束の中の唯一のフレーバーaです。他のフレーバーでは、ベル文字(ASCII 7)と一致します。

Breezy(Python)

Bre(?=ez)[]e]\z

PythonおよびJavascriptでは\z、リテラルzです。他のフレーバーでは$、文字列アンカーの終わりに相当します。Javascriptを失敗させるには、charクラスを使用します[]e]。これは、空のcharクラスで、Javascriptでは[]リテラル、Pythonではe]2文字のクラス[]e]です。

Dapper(.NET)

(?=Da)[D-[E]]apper

セットを除去する、集合差であるから。PCRE、Javascript、およびPythonには、クラスがあり、その後にリテラルがあります。Rubyは少し異なりますが、何らかの理由で、にのみ一致するクラスとして解析されますが、その理由はまだわかりません....NET[D-[E]][E][D][D-[E]][D-[E]]E

エッジー(ルビー)

E(?=dg)[[d]]g

Rubyはcharクラス内でcharクラスを許可[[d]]するため[d]、実際には、または単にと同等dです。他のフレーバーでは[[d]、リテラルがあり]ます。

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