入力を含むクインを印刷します


15

仕事

あなたが唯一の文字からなる入力中の文字列与えられますaにしz、入力が正規表現にマッチしますすなわち/^[a-z]*$/

出力は同じ言語の完全なプログラムである必要があり、そのソースコードには入力が含まれており、適切なものです。

プログラムは入力abcと出力を受け取ります。

...abc...

上記は、入力も出力も行わない同じ言語の完全なプログラムである必要があります。

...abc...

すなわち、それ自体を出力します。

得点

これは、。バイト単位の最短回答が優先されます。

参照資料


3
うーん。「クアット」(クイン+ネコ)のように?
マシュー盧

回答:


7

Pythonの3、57の 61バイト

lambda x:"s='s=%r;print(s%%s)';print(s%s)".replace('s',x+'x')

ここから基本的なpython 3クインを取得し、変数名を入力に置き換えます。

注: ASはコメントでハイパーニュートリノが指摘し、これは次のように予約されたキーワードのために動作しないforifなど、

予約済みキーワードのいずれもなどで終わる文字を追加することで、'x'これは修正されません。(ØrjanJohansen)。


変数名を使用する非常に創造的。
リーキー修道女

3
input "for"やPythonの他の予約語では機能しません。
ハイパーニュートリノ

確認できます。すべての可能な入力に対して機能するわけではありません。オンラインで試してください
mbomb007

@HyperNeutrinoに注意、またどのようにそれを回避するには考えていない
C ...

のように、キーワードの末尾にない余分な文字を追加できます'x'
Ørjanヨハンセン

6

ゼリー、9バイト

発生器

;“¶Øv”ṾØv

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

使い方

;“¶Øv”ṾØv  Main link. Argument: s (string of letters)

;“¶Øv”     Concatenate s and the string "\nØv".
      Ṿ    Uneval; get its string representation.
           (implicit) Print the previous return value since the next link is an
           otherwise unparsable nilad.
       Øv  Set the return value to "Ṙv".

クイン

入力がのquine場合、次のプログラムが生成されます。

“quine
Øv”Ṙv

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

使い方

これは標準的なゼリーの馬です。最初、

“quine
Øv”

左引数と戻り値を文字列に設定します"quine\nØv"

次に、文字列表現(前のブロックのコード)を出力し、変更されていない文字列を返します。

その後、v左引数を取り、それを入力としてJellyプログラムに渡します

quine
Øv

すべてのJellyプログラムでは、メインリンク(最後の行で定義されている)のみが実行されるため、最初の行は完全に無視されます。

最後にØv、戻り値をに設定します"Ṙv"。これは、外部プログラムが終了すると暗黙的に出力されます。



4

Haskell、51バイト

q 文字列を取り、文字列を返します。

q s|t<-"main=putStr$fst`mappend`show$"=t++show(t,s)

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

の出力例putStr$q"test"

main=putStr$fst`mappend`show$("main=putStr$fst`mappend`show$","test")

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

  • メインのクインテキストと目的の文字列をタプルに入れます。
  • fstメインテキストを抽出するために使用します。
  • showタプル全体を文字列に変換するために使用します。
  • を使用mappendして、前の2つの機能を組み合わせます。便利なmappend2つの関数では、各関数を引数に適用mappendし、結果を結果タイプ(ここでは文字列連結)に結合する関数を提供します。

4

アンダーロード、14バイト

(~aSaS(:^)S):^

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

として使用(test)(~aSaS(:^)S):^-それ自体が馬です。

使い方

  • アンダーロードは、連結(スタックベース)の難解な言語です。入力の読み取りをサポートしていないため、引数は最初にスタックに置かれます。
  • (test)(~aSaS(:^)S)は文字列リテラルであるため、スタックに配置し、スタックを一番上にします。
  • : 複製する (~aSaS(:^)S)スタックの一番上に文字列を^その内容をサブプログラムとして実行します。
  • ~ スタックの上の2つの要素を交換します。 (test)は最上位になります。
  • a ラップ (test)余分な括弧で。
  • S((test))スタックの一番上にある文字列を取得し、外側の括弧(リテラル構文のみ)なしで出力します。
  • いま aS、残りの印刷(~aSaS(:^)S)(括弧で)同様にスタック上。
  • 最後に(:^)S、finalを出力し:^ます。

)(入力としては実際には機能しません、と思います。
Rɪᴋᴇʀ

@Riker確かに、Underloadは不整合な括弧をサポートしていません。しかし、質問はa-を指定しますz
Ørjanヨハンセン

うん、いいよ。気づかなかった。
Rɪᴋᴇʀ

4

アンダーロード、14バイト

a(aS(:^)S)~*:^

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

他のアンダーロード回答とは異なるアプローチ。それ自体がクインであるのではなく、これはクインを構成します。興味深いことに、同じバイト数になります。これは、スタックから引数を取り、標準出力に出力する関数です。

説明

a(aS(:^)S)~*:^
a               Generate a string literal containing the input
 (aS(:^)S)~*    Prepend "aS(:^)S"
            :^  Mockingbird: run the resulting function with itself as argument

結果の関数は次のようになります。

aS(:^)S(input)
aS              Print a string literal containing the argument
  (:^)S         Print ":^"
       (input)  Push "input" onto the stack

つまり、それ自体を含む文字列リテラルを出力し、その後に:^。これは明らかにクインです(印刷された内容は、最初に実行するために実行したコードと同じであるため)。


TIOのように見えますがa、入力にが含まれてaいるときにstderrに出力されるセグメンテーション違反エラーを気にしない限り、イニシャルを削除できます。
Ørjanヨハンセン

ユーザーが指定する文字列リテラルを実行することすら考えていませんでした。これは、プログラムの作業がその時点で既に完了して(おり、入力に登場するキャラクターではないため、すべてのプログラムは必然的に何もしないかクラッシュするからです。それがTIOに特有のものだとは思いません。プログラムは無効ですが、クラッシュした時点で目的の出力がすでに生成されています。

2

V、9バイト

ñ"qPxÉÑ~j

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

これは標準のV quineの修正であり、これが1バイトだけ長いことを誇りに思っています。

Hexdump:

00000000: f122 7150 78c9 d17e 6a                   ."qPx..~j

説明:

ñ           " Record the following commands into register 'q'
 "qP        " Paste register 'q' before all input
    x       " Delete the last character of what we just pasted (this will be a 'ÿ')
     ÉÑ     " Insert 'Ñ' at the beginning of this line
       ~    " Toggle the case of this character
        j   " Move down a line. During playback, this will cancel playback of the current macro,
            " So everything after here is a NOOP

その後、記録は暗黙的に停止し、再生されます。これにより、次の出力が生成されます。

ñ"qPxÉÑ~jHello

以来j、マクロの再生中断します、中には何もHello今までに実行されませしまいます。


2

Python 2、38バイト

入力はをサポートするためa-zにのみ必要ですが、これはNULバイトを含まない単一行入力で動作するはずです。

s='s=%r;print s%%s#'+input();print s%s

オンラインで試す

入力の場合abc、結果のクインは次のとおりです。

s='s=%r;print s%%s#abc';print s%s#abc

オンラインで試す



1

網膜、14バイト

バイトカウントはISO 8859-1エンコードを前提としています。

\(\`^
¶\(*S1`|

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

入力のx場合、これは次を出力します。


\(*S1`|x
\(*S1`|x

説明

出力は、標準のquineの小さな変更です。|x空の正規表現の代わりに正規表現を使用します。が|まだ許可(および優先順位付け)および空の一致であるため、機能自体は影響を受けず、x文字のみが含まれるため、有効な正規表現構文であることが保証されます。

これを実際に印刷するには、クイン自体に似た手法を使用します。クインの重複を避けるため¶\(*S1`|に、文字列の先頭に1回だけ挿入します。これはソースコードのちょうど半分です。改行なしで2回印刷するに\(\は、グループ全体でプログラム全体をラップし、ステージ自体とそれを含むグループの両方で改行なしで結果を印刷する構成を使用します。


1

Japt、14バイト

"\"iQ ²ª`"+U ²

オンラインでテストしてください!の入力に対してabc、出力

"iQ ²ª`abc"iQ ²ª`abc

それ自体を出力します。オンラインでテストしてください!

説明

これは、標準のペイロード対応Japtクインの拡張です。

"iQ ²"iQ ²

"iQ ²"      // Take this string.  iQ ²
      iQ    // Insert a quote.    "iQ ²
         ²  // Repeat this twice. "iQ ²"iQ ²
            // Implicit: output result of last expression

唯一の違いはª`abc、末尾に追加することです。JavaScript では、基本的には||"abc"です。最初の部分の結果は常に空ではない文字列(真)であるため、||実行されません。

同じ長さの代替バージョンがいくつかあります。

"iQ ²ª`abc"iQ ²ª`abc   quine||"abc"
"iQ ²ª$abc"iQ ²ª$abc   quine||abc
"iQ ²ª{abc"iQ ²ª{abc   quine||function(){ ... }
"iQ ²ªXabc"iQ ²ªXabc   quine||X.a(...) (X could be any uppercase letter or digit)
"iQ ²//abc"iQ ²//abc   quine//abc      (// is a comment in JS/Japt)
"iQ ²;[abc"iQ ²;[abc   quine;          (unmatched [ causes a parsing error)

0

CJam16 14バイト

"`_~"q`';++`_~

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

使い方

"`_~"           e# Push "`_~"
     q`         e# Push a string representation of the input (input wrapped in quotes)
       ';       e# Push a semicolon
         ++     e# Concatenate all this together
           `    e# Get the string representation of the resulting string
            _~  e# Duplicate it and eval it (pushing the original string on the stack again)

のようなものを出力します"`_~\"test\";"`_~"test";



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