セミキンを書く


10

2つの言語があるAとしBます。文字列sはセミクインでAありB、次の条件を満たす場合:

  1. s言語の羽毛ですA
  2. sでポリグロットであるAB
  3. 実行の出力sとしてBプログラムは、異なる列であるs'クワインですB

この課題の目標は、2つの異なる言語でセミキンを書くことです。これはなので、最も短いコードが優先され、最も早い回答がタイブレーカーとして使用されます。

クインのルール

本当のクインだけが受け入れられます。つまり、以下を使用せずに、ソースコード全体をそのままSTDOUTに出力する必要があります。

  • 直接または間接的にソースコードを読み取る。
  • フィードするすべての式を単に評価して出力するREPL環境に依存しています。
  • 特定の場合にソースを出力するだけの言語機能に依存しています。
  • エラーメッセージまたはSTDERRを使用して、クインのすべてまたは一部を書き込みます。(STDOUTが有効なクインであり、エラーメッセージがその一部ではない限り、何かをSTDERRに書き込んだり、警告/致命的でないエラーを生成したりできます。)

さらに、ソースコードはリテラル(文字列リテラル、数値リテラルなど)やNOPだけで構成されてはなりません。たとえば、`12はJellyおよびPythのポリグロットですが、JellyではNOPおよび数値リテラルであるため、無効です。

抑制されない出力(著作権表示、起動/シャットダウンメッセージ、末尾の改行など)は、クインの有効性のために出力で無視される場合があります。

ポリグロットのルール

使用される2つの言語は明確に異なる必要があります。特に:

  • 同じ言語の異なるバージョンであってはなりません(例:Python 2とPython 3)。
  • それらは、同じ言語の異なる方言であってはなりません(例えば、PascalとDelphi)。
  • 1つの言語が他の言語のサブセットではない場合があります(CとC ++ 1など)。
  • 1つの言語は他の言語の自明な派生物ではない可能性があります(たとえば、Matlab vs. Octave 2、brainfuck vs boolfuck vs TinyBF vs ShadyAsFuck vs他のすべての自明な脳ファック派生物)。

その他の規則

  • STDIN(またはその他のソース)からの入力を受け入れることはできません。選択した言語が場合しなければならない入力を取り、その後、入力のいずれかが空でなければなりません(空の文字列から、パイプ/dev/nullなど)、またはプログラムの出力は、入力に依存してはなりません。
  • この課題では、完全なプログラムを作成する必要があります。ソリューションを実行するために追加のコードを要求することは許可されていません(ソリューションで定義されたラムダ関数の割り当てや呼び出しなど)。

1:はい、Cは実際にはC ++のサブセットではないことを知っています。それは多声の目的のために1つと見なされるのに十分に近いので、私はこの挑戦のためにそれを数えています。

2:上記のポイント1と同様に、Octaveは技術的にはMatlabと100%互換性がありませんが、互換性があるように設計されており、Matlab / Octaveのポリグロットを許可すると問題が簡単になります。


ESMinのコピーブロックは許可されますか?
リルトシアスト2016

@ThomasKwa ESMinに詳しくないので、簡単に説明してください。
Mego 2016

過去のすべてのソースコードを取得するコピーブロックを開始するコマンドがあります。他のJSゴルフ言語にもあると思います。
リルトシアスト2016

@ThomasKwaこれは、クインルールの最初のルールでは許可されません(直接または間接的にソースコードを読み取ることはできません)。
Mego 2016

1
@Downgoat絶対に他のルールに違反しない限り。癖を悪用することはこのサイトの目標のようなものです:)
Mego

回答:


6

GolfScript + Fission19 18バイト

{".~
'!+OR"
2<}.~

末尾の改行が必要です。

これはGolfScriptの真のクインです。オンラインでお試しください!

フィションでは印刷

'!+OR"

これは、分裂における真のクインです。オンラインでお試しください!

説明

GolfScriptでは、フォームのすべて

{...}.~

スタック上に...文字列を残す限り、クイン".~"です。.最後に印刷されますつのコピーがありますように、ブロックを複製し、そして~私たちは印刷し、その内容を使用することができますので、それを実行し.~、それ自体を。この場合、ブロックは文字列をプッシュします

".~
'!+OR"

次に、で最初の2文字に切り捨て2<ます。

1行目と3行目はプログラムによって完全に無視されるため、Fissionプログラムは実際にはクイン自体とまったく同じように機能します。


6

Ruby +(JavaScript または Python 3)、76バイト

これは、私のお気に入りの言語であるRuby、JavaScript、Python 3のほぼ一般的なサブセットを使用して解決できるもう1つの課題です。まだ解答のない言語での回答がなく、多くの人々が非ゴルフ言語のソリューションを好むことを考えると、私はそれに貢献したいと思いました。さらに良いことに、同じ答えが同時にさまざまな方法で課題を解決します。

ここにありsます:

s="'";d='"';n='print("s="+d+s+d+";d="+s+d+s+";n="+s+n+s+";eval(n)")';eval(n)

これはRubyのクインです。JavaScriptやPython 3のクインではありません。これらの言語のいずれかで実行すると、その出力s'には末尾の改行が含まれるため、次のように異なります。

s = "'"; d =' "'; n =' print(" s = "+ d + s + d +"; d = "+ s + d + s +"; n = "+ s + n + s +" ; eval(n) ") '; eval(n)

ただし、s'JavaScriptとPython 3ではポリグロットです。(いつものように、私はJavaScriptのRhino実装を使用しています。これは、利便性(ブラウザを必要とせずにコマンドラインから実行されるため)と、print標準出力に書き込む奇妙な標準ライブラリがあるためです。)s'どちらのプログラムを実行した結果として、両方の言語が生成されます。

おまけとして、このプログラムは問題を逆に解決します。s'Rubyで実行すると、元のプログラムがs再度印刷されます。そのs'ため、質問に対する有効な(ただし少し長い、77バイト)回答です。

この時点で、「2つのプログラムを異なるものとして数えるのに十分な改行で出力が終了するかどうかの違い」は、これが2番目の言語セットであると考えられる場合、標準の抜け穴と見なす必要があるとほぼ考え始めています(有名なGolfScript / CJamを超えて)トリックを取り除くことができます。


2

Vitsy(セーフモード)およびY、9バイト、非競合。

' Ugrd3*Z

Vitsyでは、これはクインです。Yでは、これはを出力しUgrd3*Z'ます。実行するとUgrd3*Z'、これはYのクインであるを出力します。ただし、Yは質問の日付を変更します。

Vitsyの見解:

 ' Ugrd3*Z
 '         Heyyyy a string! Let's do this!
  ........ Capturing a string! Oh, not done? Hm, let's go back to the start.
 '         There we go.
           (space) ...
   U       (no op)
    g      use count, disabled in safe mode
     r     reverse stack
      d3*  push a '
         Z print it all!

Yが見るもの:

' Ugrd3*Z
'         Push a space.
  U       Wrap around and capture.
   g      Print that. (Nothing else is printed.)

1
これはセーフモードでのみ機能することに注意してください。非セーフモードでは、意図しない副作用がいくつかあります。
Addison Crump 2016

1

CJam + GolfScript、9バイト

"0$p"
0$p

これはCJamのクインです。GolfScriptでは、GolfScriptのクインである後続の改行で出力されます。

CJamをGolfScriptのささいな派生物と見なすべきかどうかはわかりません。しかし、私はそれらがかなり異なり、少なくとも些細なことではないと思います。

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