Codegolf:クインとアンチキン


13

この課題は、Can you Meta Quineに似ていますか?

クインは、STDOUTで自身を生成するプログラムです。この課題は、実行時にSTDOUTでプログラムBを生成するプログラムAを生成することです。プログラムBを実行すると、STDOUTでプログラムAが生成されます。プログラムAとBは、同じ言語で作成(および実行)する必要があります。リンクされた質問はA!= Bを制約しました。それはあまりにも簡単に見えました。そのため、この質問では、AとBは次のルールを使用してアンチキンであると主張します。

  1. プログラムAとBは、同じ文字を使用したり、空白やステートメントの区切り文字、句読点を保存したりすることはできません。
  2. プログラムAおよびBには、それぞれ、空白でもステートメント区切り文字でも句読点文字でもない文字が少なくとも1つ含まれている必要があります。
  3. ルール1および2の目的のために、「空白」という用語は、それ自体が解釈される(セパレータではなく)ステートメント、演算子、またはシンボルであるシンボルまたはシンボルのシーケンスを除外します。したがって、ホワイトスペース言語では、ホワイトスペースはありません。
  4. ステートメント分離文字は、ステートメントを分離するために言語内で従来使用されている構文要素です。これには、Pythonの改行、またはJava、perlまたはCのセミコロンが含まれます。
  5. 句読点文字は、空白でもPOSIX単語文字クラスでもないASCII文字です(つまり、この目的ではアンダースコアは句読点ではありません)。つまりispunct()、trueを返しますが、そうではありません_
  6. 実行時のプログラムAは、STDOUTでプログラム(プログラムB)を生成する必要があり、そのプログラムは、実行時にプログラムAを生成します。
  7. プログラムAとBは同じプログラミング言語である必要があります。
  8. 使用されるプログラミング言語は、実際にはプログラミング言語でなければなりません。良いケースを別の方法で作らない限り、チューリング完全でなければなりません。
  9. AとBの少なくとも1つは、言語内で少なくとも1つのステートメントを実行する必要があります。

これはコードゴルフであるため、最短回答が勝ち、スコアはプログラムAの長さ(バイト)です(つまり、プログラムBの長さは関係ありません)。


最初の句の例外のリストに「句読点」を追加してください。それ以外の場合、多くの言語(特に、メイン関数で中括弧を必要とする言語)でこのタスクを解決することは不可能です。
FUZxxl 14

関連していますが、おそらく十分に異なっています。
マーティンエンダー14

@FUZxxl句読点は許可しましたが、アンダースコアは除外しました。
abligh

1
ここでの目的のために、異なる「キャラクター」Aa見なされますか?
HostileForkは、SEを信頼してはいけないと言っています14

1
ルール5に一致するASCII文字の完全なリストを提供した方が良いでしょう
。– SEはEVILであるため、aditsuは終了し

回答:


5

GolfScript、13バイト

1{\~\".~"}.~

出力は

-2{\~\".~"}.~

初期プログラムを生成します。

出力の出力にはバイトカウントが含まれるため、バイトカウントには末尾のLFが含まれます。

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

使い方

1       # Push 1.
{       # Start code block.
  \~\   # Apply logical NOT to the second topmost element of the stack.
  ".~"  # Push that string.
}       # End code block.
.~      # Duplicate the code block and execute the copy.

GolfScriptは、終了時にスタックの内容を印刷します。


問題文をもう一度お読みくださいPrograms A and B may not use any of the same characters, save for whitespace and statement separators, and punctuation characters.
isaacg 14

1
エヴリシング12句読点です。
デニス14

OK、最後に読んだときからルールが変更されました。
isaacg 14

はい、動作します。空白がステートメントとして使用されないようにするための規則を言いましたが、句読点に同じ抜け穴が存在することを忘れていました。したがって、抜け穴は合法的に悪用されました。
abligh

14

パスカル(731文字)

プログラムA:

program s;{$h+}uses sysutils;const p='program s;{$h+}uses sysutils;const p=';a='a';aa=''';';aaa='a=''';aaaa='''';aaaaa='begin write(lowercase(p+aaaa+p+aa+aaa+a+aa+a+aaa+aaaa+aa+aa+a+a+aaa+aaa+aaaa+aa+a+a+a+aaa+aaaa+aaaa+aa+a+a+a+a+aaa+stringreplace(stringreplace(stringreplace(stringreplace(aaaaa,aaaa,aaaa+aaaa,[rfreplaceall]),''lower''+''c'',''tm''+''p'',[]),''up''+''c'',''lower''+''c'',[]),''tm''+''p'',''up''+''c'',[])+aa+aaaaa))end.';begin write(upcase(p+aaaa+p+aa+aaa+a+aa+a+aaa+aaaa+aa+aa+a+a+aaa+aaa+aaaa+aa+a+a+a+aaa+aaaa+aaaa+aa+a+a+a+a+aaa+stringreplace(stringreplace(stringreplace(stringreplace(aaaaa,aaaa,aaaa+aaaa,[rfreplaceall]),'lower'+'c','tm'+'p',[]),'up'+'c','lower'+'c',[]),'tm'+'p','up'+'c',[])+aa+aaaaa))end.

プログラムBを出力します。

PROGRAM S;{$H+}USES SYSUTILS;CONST P='PROGRAM S;{$H+}USES SYSUTILS;CONST P=';A='A';AA=''';';AAA='A=''';AAAA='''';AAAAA='BEGIN WRITE(UPCASE(P+AAAA+P+AA+AAA+A+AA+A+AAA+AAAA+AA+AA+A+A+AAA+AAA+AAAA+AA+A+A+A+AAA+AAAA+AAAA+AA+A+A+A+A+AAA+STRINGREPLACE(STRINGREPLACE(STRINGREPLACE(STRINGREPLACE(AAAAA,AAAA,AAAA+AAAA,[RFREPLACEALL]),''LOWER''+''C'',''TM''+''P'',[]),''UP''+''C'',''LOWER''+''C'',[]),''TM''+''P'',''UP''+''C'',[])+AA+AAAAA))END.';BEGIN WRITE(LOWERCASE(P+AAAA+P+AA+AAA+A+AA+A+AAA+AAAA+AA+AA+A+A+AAA+AAA+AAAA+AA+A+A+A+AAA+AAAA+AAAA+AA+A+A+A+A+AAA+STRINGREPLACE(STRINGREPLACE(STRINGREPLACE(STRINGREPLACE(AAAAA,AAAA,AAAA+AAAA,[RFREPLACEALL]),'LOWER'+'C','TM'+'P',[]),'UP'+'C','LOWER'+'C',[]),'TM'+'P','UP'+'C',[])+AA+AAAAA))END.

プログラムAを出力します。


3
私は、ケース翻訳の(誤)使用を楽しんでいます。
abligh

11

ROT13ルールの更新後に競合しなくなりました

これが言語としてカウントされるかどうかは定かではありませんが、私は確かにその挑戦を補いませんでした。通常、次のような特定のユーティリティに対する回答sedも受け入れられます。ただし、それは判断の呼び出しなので、カウントされない場合は削除します(言語としてカウントされるものについてのメタディスカッションはどこにありますか?編集:現在あります

A

サイクル間AN

~>> echo "A" | rot13
N
~>> echo "A" | rot13 | rot13
A

rot13はSTDINプログラムを実行するのではなく、単に入力を受け取るため、これは機能しないと思います。長さがゼロのプログラムであると主張している場合、それはルール2を満たすことができません。プログラム(sed)は、で渡されるものsed -eです。これが受け入れられた場合、それcatは馬でありtac、馬および反馬となります。しかし、何ものソースを生産されていないcattacまたはそのことについてrot13
abligh

@abligh使用されている言語がrot13である場合、なぜrot13のソースコードを印刷する必要があるのですか?また、Golfscript、Python、または他の何かを実行する場合、ソースコードをstdinまたはファイルを介して渡すだけなので、実際には違いはありません。この場合、rot13 インタープリターです。
インゴバーク14

rot13プログラミング言語は「プログラミング言語」の合理的な定義を満たしていないようであり、何も解釈していません。それを明確にするために質問を修正します。
abligh

元気です。この回答はもう競合しないものとして残し、メタディスカッションを開始します。ところで、いいチャレンジです。「本当の」解決策が待ち遠しい!
インゴバーク14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.