メタクインチェッカー


10

この課題は、受け入れる場合、3つの関数またはプログラムA、B、およびCを記述することです。

  • Aは、A、B、Cのすべてを出力するクインです(提出物のコードの内容全体でもあります)。
  • BはパラメータFを取り、それがそのようなクイン(FBCを出力する)であるかどうか、または別のことを行うかどうかをチェックします。
  • CはパラメーターGを取り、GがBのように機能するかどうかをチェックします(FがFGCを出力するかどうかをチェックします)。関数がクインチェッカーであるかどうかを判断することは不可能なので、もっと簡単なことをしましょう。
    • GがBに対して有効である場合は、trueを返す必要があります。
    • Gがすべての有効なクインに対してfalseを返す場合、またはGはすべての有効な非クインに対してtrueを返す場合、falseを返す必要があります。
    • それが他のいずれかのケースである場合、それは何かを返したり、クラッシュしたり、終了しない場合があります。

Bが可能であることに注意してください。AとFには入力がないため、実行して結果を確認するだけです。

ルール

  • Aの出力から、どの部分がA、B、Cであるかを判別する方法がいくつかあるはずです。たとえば、各行が1行であるか、インタプリタで3つの関数として認識されます。
  • 各関数は、完全なコードではなく、それ自体の定義のみで実行する必要があります。
  • 関数/プログラムまたはそのソースコード、あるいは両方のペアをB(またはG)とCの入力として使用できます。
  • 真偽をこれらの値のサブセットに再定義できます。単一の文字列のように、Fが選択した型を返すことを一貫して要求することもできます。
  • A、B、F、Gが有効なパラメーターで呼び出された場合、グローバル変数へのアクセスやstdinの読み取りなど、選択した他の入力や副作用のタイプが一貫して存在しない場合があります。
  • FとGが有効なパラメーターで呼び出された場合、常に終了することも想定できます。
  • FはAと同じ条件で動作する必要があります。したがって、その変数が出力の独自の部分で定義されていない限り、BまたはCまたは別の変数の存在に依存することはできません。
  • 関数やプログラムが独自のソースコードを読み取ることはできません。
  • これは、コードゴルフ、最短のコード(Aの出力)で、バイト数の勝ちです。

Bは、Fが終了しない可能性があるため一般的に不可能です。また、多くの言語では、stdoutの一時的なリダイレクトとfunction-to-stringまたはexecのような機能の組み合わせが必要になるため、実際には不可能です。あなたが期待できる最高のものは、おそらくLISPのハーフワーキングソリューションでしょう。
Peter Taylor、

すべてのクインと非クインでGをどのようにチェックしますか?私は現在Mathematicaソリューションに取り組んでいます。
LegionMammal978 2015

@PeterTaylor「FとGを想定することもできます。有効なパラメーターで呼び出された場合は、常に終了します。」そして「出力」とは、必ずしも標準出力に出力するのではなく、返すことを意味します。
jimmy23013

@ LegionMammal978 すべてのクインと非クインをチェックすることは不可能です。しかし、Cのタスクはより単純で、1つのクインと1つの非クインをチェックするだけで済みます。
jimmy23013 2015

1
@PyRulezこれはこの課題の精神にあると思うので、許可します。ただし、関数は独自のソースコードにアクセスできません。
jimmy23013 2015

回答:


1

CJam、254バイト

ゴルフではなく、答えの例。

{{['{\"_~}{{[1$'{@\"_~}"{{["_~}"2$+'{@"_~}"]s`"{{['{\\"\+"]s}_~}"+~1$~{L}@~!&}_~}_``1>W<"\"]s\~=}_~}"@]s}_~}{{[1$'{@"_~}{{[\"_~}\"2$+'{@\"_~}\"]s`\"{{['{\\\\\"\+\"]s}_~}\"+~1$~{L}@~!&}_~}"]s\~=}_~}{{["_~}"2$+'{@"_~}"]s`"{{['{\\"\+"]s}_~}"+~1$~{L}@~!&}_~}

3つの機能は次のとおりです。

{{['{\"_~}{{[1$'{@\"_~}"{{["_~}"2$+'{@"_~}"]s`"{{['{\\"\+"]s}_~}"+~1$~{L}@~!&}_~}_``1>W<"\"]s\~=}_~}"@]s}_~}
{{[1$'{@"_~}{{[\"_~}\"2$+'{@\"_~}\"]s`\"{{['{\\\\\"\+\"]s}_~}\"+~1$~{L}@~!&}_~}"]s\~=}_~}
{{["_~}"2$+'{@"_~}"]s`"{{['{\\"\+"]s}_~}"+~1$~{L}@~!&}_~}

AとFはパラメータを取らず、文字列を返します。B、G、CはCJamブロックをパラメーターとして取り、真の場合は1、偽の場合は0を返します。

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