- 最大正規表現サイズは、5回の回答ごとに 1バイト増加します。回答Nは、最大29 +⌈N/5⌉バイトを使用できます。
- 各回答のスコアは(M /(30 + N / 5))Nになります
正規表現ゴルフでは、2セットの文字列が与えられ、最初のセットのすべての文字列に一致するが、2番目のセットのすべての文字列で失敗する最短の正規表現を作成するように求められます。
それが私たちがやろうとしていることですが、誰かが答えるたびに、正規表現自体が2つの文字列のセットの1つに追加されます(独自の選択)。したがって、この課題に答える厳密な順序があります。
例を見てみましょう:
- 私はこれから始めます
abc
(私はそうしません)、そしてマッチセットに入れます。 - 次に、有効な2番目の答えはになります
a
。これは上記に一致するためです(失敗する必要のある文字列はまだありません)。この回答がフェールセットに含まれているとします。 - ここで、3番目の答えは一致する必要
abc
がありますが失敗しa
ます。したがって、考えられる3番目の答えはですb
。これをマッチセットに入れましょう。 - 第四答えは今一致している
abc
とb
、しかしに失敗しますa
。重複する回答は許可しないため、有効な正規表現はですc|b
。
重要なのは、回答をできるだけ短くすることです。これは最初の数回の回答では些細なことかもしれませんが、少数の回答を取得すると、できるだけ少ない文字数で目的の一致を取得することがますます難しくなります。
実際のチャレンジでは、最初は一致セットにが含まれPPCG
、失敗セットにはが含まれ[PPCG]
ます。最初の回答は既に提供されています。
返事
この課題について理解する重要なことは、一度に答えることができるのは1人だけであり、それぞれの答えはその前のものに依存するということです。
同じもので2つの答えがあってはならないN
。2人がN
偶然に同時に答えた場合、後で答えた人は(たとえ数秒の差があっても)丁寧に答えを削除する必要があります。
これを少しスムーズに実行するには、回答を投稿する際に次の手順に従うようにしてください。
- 誰かが前の回答の正しさを独立して検証したことを確認してください(そして対応するコメントを残しました)。
- 前の回答で見つかった2つのテストセットを取得し、1つのセットのすべての文字列に一致し、もう1つのセットの文字列には一致しない正規表現を記述します。
次の形式で回答を投稿してください。
# N. [regex flavour] - [regex size in bytes] [regex] [link to online regex tester] [notes, explanation, observations, whatever] ### The next answer has to match the following strings: [match set] ### And fail on these strings: [fail set]
N
あなたの答えの番号はどこですか。前の回答からコピー[match set]
し[fail set]
て、正規表現をそれらのいずれかに追加してください。これはチャレンジにとって絶対に不可欠です!記帳に役立つチャレンジ用のダッシュボードツールを提供しましたが、これは上記のテンプレートに依存しています。(投稿の下部を参照してください。)
- 別のユーザーが提出物を確認し、回答がすべてのルールに従っている場合は、コメント「正しいことを確認済み」のままにしてください(以下を参照)。そうでない場合は、欠陥を指摘するコメントを残す必要があります。その後、これらの問題を修正するのに15分かかります。回答しない場合、回答は無効とみなされ、削除する必要があります。他の誰かが前の回答のフォローアップ回答を投稿する場合があります。(この場合、いつでも新しい回答を送信できます。)
これらの規制はかなり厳しいように思えるかもしれませんが、チェーンのどこかで無効な回答を避けるために必要です。
ルール
- ユーザーは、4時間ごとに1つの回答のみを提出できます。(これは、ユーザーが常に質問を見て、できる限り回答するのを防ぐためです。)
- ユーザーは、2つの回答を連続して送信することはできません。(たとえば、回答1を提出したので、回答2はできませんが、3はできます。)
- 確認済みの回答は編集しないでください。(短縮する方法を見つけたとしても!)
- チェーンの早い段階で(つまり、フォローアップの回答が投稿された後)間違いが発見された場合、問題のある回答は削除され、新しい投稿が失敗する文字列のセットから削除されます。ただし、それ以降に投稿されたすべての回答は、反映するために変更しないでください。
- 正規表現が有効なフレーバーを1つ明記してください。オンラインで自由にテストできるフレーバーを選択できます。StackOverflowには、オンラインテスターの良いリストがあります。特に、Regex101とRegexPlanetは、さまざまなフレーバーをサポートしているため有用です。選択したテスターへのリンクを回答に含めてください。テスターで
g
lobalおよびm
ultiline修飾子をオンにすると、すべての文字列を一度に1行ずつテストできます(これらの修飾子は、個々の文字列には必要ないため、正規表現サイズにはカウントされません)。 - 正規表現を空にすることはできません。
- 回答Nの正規表現は、29 +⌈N/5⌉バイトを超えてはなりません。すなわち、回答1〜5は最大30バイト(包括的)、回答6〜10は最大31バイト使用できます...回答31〜35は最大36バイト使用できます。ダッシュボードで、次の回答で使用できる文字数を確認してください。
- 正規表現は、どちらのテストセットの文字列とも同一であってはなりません。
- 関連するホスト言語が区切り文字を使用している場合でも、サブミットまたはバイトカウントに区切り文字を含めないでください。正規表現が修飾子を使用する場合、修飾子ごとに1バイトを正規表現サイズに追加します。たとえば
/foo/i
、4バイトです。
得点
各回答のスコアは(M /(30 + N / 5))Nとして計算されます。ここで、Mは正規表現のサイズ(バイト単位)、Nは数値です。各ユーザーのスコアは、すべての回答の積です。総合スコアが最も低いユーザーが勝ちます。まれに同点の場合、最新の提出を持つユーザーが勝ちます。そのユーザーの最新の回答を受け入れます。
スコアの合計を希望する場合は、各回答のスコアをN *(log(M)-log(30))として計算し、すべての回答にわたってそれらを合計できます。それは同じリーダーボードの順序を与えます。
回答に回答のスコアを含める必要はありません。単にMを報告してください。質問の下部にあるチャレンジダッシュボードがスコアを計算し、2つの非常に近いスコアの場合、任意精度の型を使用して結果を再確認します。
各回答のスコアは1未満であるため、新しい回答を提供することで全体のスコアを改善できます。ただし、各提出物が短いほど、スコアをより効率的に下げることができます。さらに、指数が増加するため、後の回答はより長くなりますが、より低いスコアを達成できます。
ダッシュボード
ここでのオプティマイザーの作業に基づいて、スタックスニペットを使用して小さなダッシュボードツールを作成しました。これが、これらの回答依存の課題に何らかの秩序をもたらす助けになることを願っています。
これにより、チャレンジの現在のステータスが表示されます-特に、競合する回答がある場合、回答を検証する必要がある場合、または次の回答を投稿できる場合。
また、スコア付きのすべての回答のリストと、すべてのユーザーのリーダーボードも作成します。ダッシュボードが回答から関連する文字列を読み込めるように、上記のチャレンジ形式に固執してください。そうしないと、リーダーボードに含まれない可能性があります。
バグを見つけたり、ツールの有用性をどのように改善できるかについてのアイデアがある場合は、(理想的にはチャットで)お知らせください。