ダブルスリットクイン


11

目的:

2つのプログラムをコーディングします。各プログラムは、ジッパー、ダブルスリットクインのように、文字ごとにインターレースされた両方のソースコードを出力します。ダブルスリットクインからの出力は、最初のプログラムのソースコードの最初の文字から始まります。1つのプログラムのソースコードの長さが他のプログラムより短い場合は、残りの出力を残りの長いソースコードで埋める必要があります。

ルール:

  1. 両方のプログラムに同じプログラミング言語を使用する必要はなく、両方のプログラムに任意のプログラミング言語を使用できます。
  2. プログラムは、ファイル、ファイル名、ネットワーク、他のプログラム、その他からの入力を受け取るべきではありません。

必須の基準:

  • キャッチがあり、出力のどこかにQUINE大文字の単語が中断されずに存在している必要があります。
  • 使用している2つのプログラミング言語を記載する必要があります。両方に同じプログラミング言語を使用している場合、必要なプログラミング言語は1つだけです。
  • どちらのプログラムも、他のプログラムから独立して、実行または解釈できる必要があります。

例:

プログラム1のこのソースコード例は次のとおりです。

"QIE"

このプログラム例2のソースコードは次のとおりです。

"UN"

次に、両方のプログラムからの有効なダブルスリットクイン出力は次のようになります。

""QUINE""

これはコードゴルフであり、両方のソースコードの長さを合計したときの最小バイト、そして明らかに各プログラム出力の長さも勝ちます!


個々のプログラムもクインである必要はありませんよね?また、各プログラムには少なくとも1つの文字が含まれている必要がありますか?
mbomb007

@ mbomb007そうです。個々のプログラムは、最初から最後まで両方のソースコード文字をジッパーのように出力する必要があります。まあ、QUINEを出力するには、プログラミング言語で少なくとも1バイトが必要だと思いますか?両方のプログラムからの出力は同一でなければなりません。
Plarsen、2015年

残りの出力を残りの長いソースコードで正しく埋める必要があることを理解しいるとは思いません。どのようにAXYZてインターリーブされますか?AXYZ
デニス

@Dennis Just like .+or zworks
オプティマイザ

@デニス正解。両方のプログラムからの出力に、短いバイト数が不足したときに長いソースコードから残されるものを追加する必要があります。
Plarsen、2015年

回答:


9

CJam、49 47バイト

{`:_"__~~e#QUINE"}_~

そして

{`:_"__~~e#QUINE"}_~e#QUINE

両方のプリント

{{``""__~~""++::__""ee##QQUUIINNEE""}}__~~e#QUINE

オンラインで試す:プログラム1プログラム2有効性の証明

それらがどのように機能するか

{                }   e# Push a code block.
                  _~ e# Execute a copy.
 `                   e# Convert the code block into a string.
  :_                 e# Duplicate each character of the resulting string.
    "__~~e#QUINE"    e# Push this string.

プログラム1はここで終了し、ソースコード全体(各文字が2回繰り返されます)の文字列表現と、スタック上の文字列e#QUINEを持ちます。

プログラム2 e#QUINEは、コメントであるをさらに解析します。

どちらの場合も、CJamは2つの文字列を自動的に印刷し、前述の出力を生成します。


4

真剣に、46 56 42バイト

QUNX;RZtdXεj.ƒ£REIQ

16進ダンプ:

51554e583b525a746458ee6a2e7f9f9c524549510a

2番目のプログラムは、この正確なプログラムを逆にしたものです。目に見えない文字が含まれていますが、バイト数は正しいです。どちらのプログラムも、この回文的な文字列を出力します。


QQUINEXR;£RƒZ⌂t.djXεεXjd.t⌂ZƒR£;RXENIUQQ

(何らかの理由で、端末に出力すると非表示の文字が表示されます。その7Fバイトがよくわかりません。)

使い方:

Q                     Push the source to the stack
 U                    Nop
  NX                  Push and pop lyrics to 99 bottles of beer
    ;R                Make a copy of the source reversed.
      Z               Zip them together.
       t              Completely flatten the list.
        dX            Delete the trailing newline
          εj          Join it into a string.
            .         Print it with a trailing newline.
             ⌂        (This is that 7F byte that won't show up. It halts.)

プログラムの残りの部分は実行されません。

次に、他の方向:

\n                   Nop
  Q                  Push the source code.
   IE                Nops
     R               Reverse source code to get source of first program
      £              Eval it into a function
       ƒ             Call it.

この時点で、上記の最初のプログラムを実行しているので、そこで説明されているように実行が続行されます。

ここでは、いくつかのコマンドが文字列や空のスタックに対して何も実行しないという事実を大きく利用しています。tスタックにアイテムが1つしかない場合の予期しない動作も利用しています。このプログラムがSeriouslyの将来のバージョンで機能することを期待しないでください。

Seriouslyインタープリターのオンラインバージョンは引き続き機能しなくなっているため、インタープリターダウンロードして独自のマシンで実行し、テストする必要があります。


@デニスはあなたのコンピューターでテストしましたか?それは私自身のビルド環境の成果物かもしれません。
quintopia

@Dennis nvmあなたは正しい。Seriouslyのすべての出力メソッドは、改行を追加します。8バイトで修正できます。あなたの方法は短くなるように見えます(この方法はIMOがより涼しいので悲しいです)。
クイントピア2015

1

GolfScript、46バイト

{`{.}%"..~~QUINE"}.~

そして

{`{.}%"..~~QUINE"}.~QUINE

両方のプリント

{{``{{..}}%%""....~~~~QQUUIINNEE""}}..~~QUINE

オンラインで試す:プログラム1プログラム2有効性の証明

使い方

{`{.}%"..~~QUINE"}.~

{                }    # Push a code block.
                  .~  # Execute a copy.
 `                    # Convert the code block into a string.
  {.}%                # Duplicate each character of the resulting string.
      "..~~QUINE"     # Push that string.

プログラム2のソースコードはQUINE\n、2つの未定義のトークンであるをさらに解析します。


1

Perl、61 + 60 = 121バイト

プログラム1:

$x=q<print"\$x=q<$x>;eval\$x#"=~s/./$&$&/gr,QUINE>;eval$x#QIE

プログラム2:

$x=q<print"\$x=q<$x>;eval\$x#"=~s/./$&$&/gr,QUINE>;eval$x#UN

私はこれをゴルフ以外の言語でやってみようと思った。これは基本的に、印刷する前にすべての文字を2倍にQUINEして最後に追加するように変更されたPerlのユニバーサルquineコンストラクターです。次に、追加されたテキストを補うために、コードの最後にコメントを貼り付ける必要があります。

(私は他の答えをまったく見ずにこれを書きました。1つのプログラムにコメント全体を置くことでバイトを節約することが可能であることがわかりましたが、そのようなアルゴリズムを露骨にコピーする必要があるかどうかはわかりません。)

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