Quine Suiteを書く


30

私たちは多くの課題を抱えてきましたが、多くのクインのフォーマットは似ています。

あなたの仕事は、同じ言語(少なくとも2つ)で選択したプログラムを作成し、すべてが独自のソースコードを出力することですが、これらのプログラムはいずれも文字を共有できません。

たとえば、次を使用してプログラムを作成する場合:

printf+qw(printf+qw(%s)x2)x2

次のプログラムに次のものを含めることはできません。

%()+2finpqrstwx

等々。

ルール

  • Unicode文字を使用することもできますが、バイト単位でスコアリングする必要があります。
  • すべてのプログラムは適切な馬のコミュニティ定義を満たさなければなりません。これは、特に空の文字列が有効なクインとしてカウントされないことを意味します。
  • 標準的な抜け穴は禁止されています。
  • 関数または完全なプログラムは、上記の定義を満たす限り許可されます。
  • シンボルに依存しない言語(LenguageとHeadsecksを含む)は許可されていません。
  • タイブレーカーとして最も短い合計コードで、ほとんどのプログラムが勝ちます。

近い投票があるので、議論のためにサンドボックスの投稿を元に戻し
Dom Hastings

サンドボックスのコメントには、関数の送信が許可されていると書かれていますが、チャレンジではそれについて何も言われていません。
Ørjanヨハンセン

2
関連(逆の挑戦の種類-あなたのクインは自分自身の代わりに互いに出力する必要があります)
ナサニエル

1
末尾の改行はどうですか?私の片方が片方を印刷する場合、もう片方はそれを避ける必要がありますか?(ほとんどの答えはこれをしないと思う。)
ナサニエル

2
私はので@DomHastings私は、メタ質問を見つけることができなかったものを尋ねました
ナサニエル

回答:


27

V3、5カイン、46バイト

2A2A

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

Hexdump:

00000000: 3241 3241                                2A2A

説明:

2     " 2 times...
 A    " (A)ppend the following text...
  2A  "   '2A'

5­­­a5­­­a

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

Hexdump:

00000000: 35ad adad 6135 adad ad61                 5...a5...a

説明:

5---        " 5 - 3 times...
    a       " (a)ppend the following text...
     5---a  "   '5---a'

1«I1«I

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

Hexdump:

00000000: 31ab 4931 ab49                           1.I1.I

説明:

1«      " 1 + 1 times...
  I     " (I)nsert the following text...
   1«I  "   '1«I'

ファンキーになり始めるのはここからです...

ñi34x@-qPÉÑ~ÿ

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

Hexdump:

00000000: f169 1633 341b 7840 2d71 50c9 d17e ff    .i.34.x@-qP..~.

説明:

ñ                       " Wrap all the following in macro '"q':
 i<C-v>34               "   Insert character code 34 `"`
         <esc>          "   Return to normal mode
              x         "   Delete the character we just inserted. Now, running `@-` will be equal to running `"`
                  P     "   Paste...
               @-       "   From Register...
                 q      "   "q
                   ÉÑ   "   Insert 'Ñ' at the beginning of this line
                     ~  "   Toggle the case of the character we just inserted
                      ÿ "   Black magic

:norm é:":p

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

Hexdump:

00000000: 3a6e 6f72 6d20 e93a 223a 70              :norm .:":p

説明:

:norm       " Run the following commands as if typed:
      é:    "   insert ':'. Somehow also does black magic and resets the value of '":`
        ":p "   Paste the last ex command to be run ('norm é:":p')

この答えは黒魔術で満たされています。クイン1と4は新しいものではありませんが、他の3つはすべて以前に発見されたことがないため、これらのクインの半分以上が今日発見されました。


8
3番目のプログラムはトローリングです。「あなたはねnormie :p
mbomb007

4
@ mbomb007必須REEEEEE--
マジックタコ

17

ゼリー2 3 4 5カイン、14 18 81 65 59 56326265247229229 バイト

3バイト

”ṘṘ

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

標準クイン。”Ṙはの1文字リテラルですこれの文字列表現を印刷すると、文字列が暗黙的に印刷されます。

4バイト

⁾⁾ḤḤ

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

2文字の文字列リテラルを開始し、引数を2倍にします。文字列を入力すると、各文字にマッピングされます。したがって、文字列に作用⁾Ḥする⁾⁾ḤḤと、ソースコードが生成されます。

11バイト

ȮṾṖƊ}“ȮṾṖƊ}

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

右側に“ȮṾṖƊ}は、の文字​​列リテラルがありȮṾṖƊ}ます。文字列の終了文字は、EOFで暗黙的に追加されます。

文字列リテラルの左側で、単一のモナドにƊラップȮṾṖし、}それを正しい引数である文字列リテラルを使用するダイアドに変換します。Ȯ文字列(ȮṾṖƊ})を出力し、文字列の文字列表現()を作成し、文字“ȮṾṖƊ}”削除します。文字列“ȮṾṖƊ}はモナドの後に残り、暗黙的に出力されます。

38 49 36バイト

32,52,52,7884,106,64,44,7884 44Ọj@,Ọ

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

ゼリーゴルフで初めてスペースを使ったことがあります。

先頭の数字のリストにはord、コード内の残りの文字が含まれています。その後:

jṛ44Ọ$,Ọ
j           Join this list with...
 ṛ          right argument. Avoiding using ¤ so I can use it in the next program.
  44Ọ       chr(44)==',': [106, ',', ...]
     $      Causes Ọ to act on 44 before j acts on it.
      ,     Pair this list with...
       Ọ    chr of each number in the list. Yields jṛ44Ọ$,Ọ

270198180162バイト

⁽¢_;⁽⁽¤;⁽¡_;⁽⁽¡;⁽¡¤;⁽$+;⁽⁽y;⁽Ẹ$;⁽⁺$;⁽AƑ;⁽?€;⁽b⁽;⁽¢¡;⁽_⁽;⁽¡¡;⁽¤ị;⁽ØJ;⁽µṭ;⁽€⁽;⁽¡S;⁽;⁽;⁽¡ʠ;⁽¤ị;⁽ØJ;⁽¤F;⁽ḊṄ;⁽ȧF
¢_⁽¤¡_⁽¡¡¤$+⁽yẸ$⁺$AƑ?€b⁽¢¡_⁽¡¡¤ịØJµṭ€⁽¡S;⁽¡ʠ¤ịØJ¤FḊṄȧF

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

基数250の数字とJellyコードページのインデックスを使用します。アルゴリズムを変更して72バイトを節約しました。各番号を使用してJellyのコードページにインデックスを付けていましたが、整数を元の250に変換し直し、Jellyのコードページにインデックス付けして、基本的に最初の行に必要なリテラルの数を半分にしました。これにより、必要な固有の文字の数も減りますが、これ以上クインを作成する方法は考えられません。

私は使用してきた⁾“”文字列リテラルを作成したとしてØJいる数値から文字列を作成します。文字列を作成する他の方法は考えられません。私はまだ数字9を持っている‘’ので、数字から文字列を作成する別の方法がある場合、別のクインを作成することが可能かもしれません。


13

Haskell、3カイン、1119バイト

クイン1、51バイト

IOstdoutに直接出力する匿名アクション。

putStr`mappend`print`id`"putStr`mappend`print`id`"

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

クイン2、265バイト

この関数fは仮引数を取り、文字列を返します。

f	c=[b=<<g]!!0++show	g;b	c=[[[show	9!!0,show	1!!0..]!!6..]!!c];g=[93,0,90,52,82,89,52,51,51,94,84,24,24,39,34,34,106,95,102,110,0,94,50,89,0,90,52,82,82,82,106,95,102,110,0,48,24,24,39,35,106,95,102,110,0,40,24,24,39,37,37,84,24,24,45,37,37,84,24,24,90,84,50,94,52]

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

クイン3、803バイト

LANGUAGEプラグマの後のすべては、仮引数を取り文字列を返すanymous関数です。

{-#LANGUAGE CPP#-}(\q(_:_:_:_:_:_:_:_:z)y(#)_->(y(\k x->'&':q:k:q:x)#y(\k x->'%':q:'\\':k:q:x)$y(:)#y(:)$ \x->x)z)'\''__TIME__(\(?)v k x->v$k?x)$ \(&)(%)v->v&'{'&'-'&'#'&'L'&'A'&'N'&'G'&'U'&'A'&'G'&'E'&' '&'C'&'P'&'P'&'#'&'-'&'}'&'('%'\\'&'q'&'('&'_'&':'&'_'&':'&'_'&':'&'_'&':'&'_'&':'&'_'&':'&'_'&':'&'_'&':'&'z'&')'&'y'&'('&'#'&')'&'_'&'-'&'>'&'('&'y'&'('%'\\'&'k'&' '&'x'&'-'&'>'%'\''&'&'%'\''&':'&'q'&':'&'k'&':'&'q'&':'&'x'&')'&'#'&'y'&'('%'\\'&'k'&' '&'x'&'-'&'>'%'\''&'%'%'\''&':'&'q'&':'%'\''%'\\'%'\\'%'\''&':'&'k'&':'&'q'&':'&'x'&')'&'$'&'y'&'('&':'&')'&'#'&'y'&'('&':'&')'&'$'&' '%'\\'&'x'&'-'&'>'&'x'&')'&'z'&')'%'\''%'\\'%'\''%'\''&'_'&'_'&'T'&'I'&'M'&'E'&'_'&'_'&'('%'\\'&'('&'?'&')'&'v'&' '&'k'&' '&'x'&'-'&'>'&'v'&'$'&'k'&'?'&'x'&')'&'$'&' '%'\\'&'('&'&'&')'&'('&'%'&')'&'v'&'-'&'>'&'v'

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

キャラクターズ

クイン1:


"S`adeimnprtu

クイン2:

	!+,.0123456789;<=[]bcfghosw

クイン3:

 #$%&'()-:>?ACEGILMNPTU\_kqvxyz{}

使い方

クイン1

putStr`mappend`print`id`"putStr`mappend`print`id`"

クイン1は、私の最近のGolf youクインの答えの修正版です(H.PWizによる改善を含む):

  • 完全なプログラムは必要ないため、main=削除されました。
  • <>そして、$同義語mappendとに置き換えられましたid

これにより、重要なキャラクター=<>$他のクインの役に立つオペレーターが解放されます。

クイン2

f	c=[b=<<g]!!0++show	g;b	c=[[[show	9!!0,show	1!!0..]!!6..]!!c];g=[93,0,......]

Quine 2は、最近の相互排他的なQuines回答のプログラム2とやや似た方法を使用しますが、Quine 3に必要な文字リテラルの使用を回避するために、特にQuine 3に直接適用されshowます。運が良ければ、そのキャラクターはまだ使用されていません。

このクインはスペースの代わりにタブを使用しますが、読みやすくするために以下のスペースを使用しました。

  • gコードの末尾にある整数のリストとしての、クインデータです。各数字は、残りのコードの文字を表します。
    • 番号はによってシフトされる9ため、タブは0。これにより、関数名と変数名の小文字を2桁に収めることができるため、エンコードが少し短くなります。
  • b c=[[[show 9!!0,show 1!!0..]!!6..]!!c] は、数値を文字(実際には1文字の文字列)に変換する関数です。
    • [[show 9!!0,show 1!!0..]!!6..]は、タブ文字で始まる文字範囲であり、でインデックス付けされ!!cます。
    • タブ文字自体は別の範囲にインデックスを付けることによって製造される[show 9!!0,show 1!!0..]、数字の文字で始まる'9''1'し、8の段階で飛び降り。
    • 数字showは、対応する数字の文字列にインデックスを付けることにより生成されます。
  • f c=[b=<<g]!!0++show g主な機能です。c仮引数です。
    • b=<<g=<<各数字gをその文字に変換するために使用します。(=<<例えば、の使用は、返された文字をリストでラップする必要mapがある理由bです。)
    • show ggのリストの文字列表現を提供し、文字列を++連結します。
    • =<<優先順位はに比べて低いため++、いくつかのブラケットが必要です。使用を避けるために()(クイン3で予約済み)、[...]!!01つの要素を持つリストにインデックスを付けます。

クイン3

他のクインの設計により、クイン3はまだ括弧、ラムダ式、文字リテラル、および文字列/リストコンストラクターにアクセスできます:。これ、クインのコードを文字列の先頭に追加する関数を作成するのに十分です。

残念ながら、すべての小文字の母音(を除くy)が使用されており、有用な英数字の組み込み関数は残っていません。また[]""なくなっています。これは、コードのふりを開始する空の文字列を作成する通常の方法を残しません。

ただし、ほとんどすべての大文字が引き続き使用できるLANGUAGEため、言語拡張機能を取得するプラグマが可能です。再び運が良ければ、CPP(Cプリプロセッサを有効にする)は大文字のみで名前が付けられた唯一の言語拡張です。また、CPPマクロには多くの場合、大文字の名前があります。

そのため、必須の空の文字列を取得するために、クインCPP__TIME__マクロを使用してフォームの文字列定数"??:??:??"(常に同じ長さであることが便利に保証されます)を取得し、そのパターンに一致します。

{-#LANGUAGE CPP#-}(\q(_:_:_:_:_:_:_:_:z)y(#)_->(y(\k x->'&':q:k:q:x)#y(\k x->'%':q:'\\':k:q:x)$y(:)#y(:)$ \x->x)z)'\''__TIME__(\(?)v k x->v$k?x)$ \(&)(%)v->v&'{'&'-'&......

言語プラグマの後、クインは、パラメーターをこれらの4つの引数にバインドするラムダ式で構成されます(最終ダミーパラメーター_は後で適用されます)。

  • qにバインドされ'\''、単一引用符文字を提供します。
  • _:_:_:_:_:_:_:_:zにバインドされ__TIME__、別名のような文字列で、空の文字列"??:??:??"を作成zします。
  • yにバインドされた(\(?)v k x->v$k?x)、ラムダコンビネータは、クインデータを左関連(「foldl」)から右関連(「foldr」)形式に変換するのに使用されます。
  • (#)バインドされた演算子\(&)(%)v->v&'{'&'-'&...、クインデータ自体。

馬のデータは、チャーチエンコーディングの形式、パラメーター付きのラムダ式で提供されます(&)(%)v

  • 特定の値に式を適用して(&)(%)およびをインスタンス化vすることにより、このエンコードを使用して、クインのコアコードを構築するか、クインデータ表現自体を再構築できます。
  • Haskellのデフォルトの固定性のルールによって、&および%ラムダ内側左結合演算子なります。したがって、文字パラメータvは、左から始まる最初の文字と結合されます。
  • ほとんどの文字kには、対応する&'k'
  • ときkである'\、文字リテラル内でエスケープする必要がある、エンコーディングが代わりにあります%'\k'

データエンコーディングは左結合型ですが、文字列は右結合方式で構築されるためy = (\(?)v k x->v$k?x)、不一致を埋めるためにコンビネータが導入されます。

  • y(...)クインデータ(&)(%)演算子として使用するための適切な関数を構築することを目的としています。
  • v文字列から文字列への関数です(クインデータの意図したvsは例です)。
  • k文字、x文字列、および?それらを組み合わせて新しい文字列にする演算子です。(コアコードの場合、(?)=(:)実際にクインデータ表現を再構築する場合、より複雑です。)
  • したがってy(?)v k = \x->v$k?x、文字列から文字列への別の関数です。
  • これが結合性をどのように変更するかの例として(&)=y(:)

    (v&k1&k2&k3) x
    = (((v&k1)&k2)&k3) x
    = y(:)(y(:)(y(:)v k1)k2)k3 x
    = y(:)(y(:)v k1)k2 (k3:x)
    = y(:)v k1 (k2:(k3:x))
    = v (k1:(k2:(k3:x)))
    = v (k1:k2:k3:x)

より一般的には、いつ(#)quine data関数でありf1,f2、文字と文字列を組み合わせた関数です:

(y(f1)#y(f2)$v) x
= (...(y(f1)(y(f1)v '{') '-')...) x
= v(f1 '{' (f1 '-' (... x)))

クワインデータ機能を適用する(&)=y(f1)(%)=y(f2)、これは、所定の使用f1f2してクワインデータの文字を組み合わせてx、その後に結果の文字列を渡しますv

メインラムダ式の本体は、これをすべてまとめます。

(y(\k x->'&':q:k:q:x)#y(\k x->'%':q:'\\':k:q:x)$y(:)#y(:)$ \x->x)z
  • '&':q:k:q:x文字のためのk前に付加&'k'文字列にx、しばらく'%':q:'\\':k:q:x前に付加%'\k'元のクワインのデータ形式です。
  • したがってy(\k x->'&':q:k:q:x)#y(\k x->'%':q:'\\':k:q:x、最終的なz(空の文字列)の前に追加され、次の関数に渡される、クインデータ表現を再構築するための適切なパラメーターです。
  • y(:)#y(:) 他の変更を加えずに、クインのコアコードを文字列の先頭に追加する適切なパラメーターです。
  • 最後に、\x->x構築されたクインに対して何もしないことが取得され、それが返されます。

9

Perl 6、3カイン、274バイト

クイン1、52バイト

my&d={S{\d}=$_};say
d
Q{my&d={S{\d}=$_};say
d
Q{4}}

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

クイン2、102バイト

printf	|(q[printf	|(q[@]xx	2	Z~|(q[printf	|(q[!3]]Xx	qw[1	0]))]xx	2	Z~|(q[printf	|(q[!3]]Xx	qw[1	0]))

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

クイン3、120バイト

<'.EVAL'.UC,' GIVEN ',「「PRINT "<'.EVAL'.UC,' GIVEN ',「「".UC,.UC,"」」>.LC",".EVAL.EVAL".UC」」>.lc.EVAL.EVAL

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

異なるバイトセットの検証

その3番目の馬を得るのに多くの操作がありました。Perl 6のは、(私の知ること)出力の4つのメソッドを持ってsayputprintprintf。私は両方を使用できないため、両方sayput改行を出力します。putprintprintf全て含まれているpt。をEVAL使用して大文字を使用すると、これを部分的に回避できますPRINT。そこから、4クインを入手することは不可能だと思います...(おそらく何かshell "echo 'quine'"がうまくいくかもしれませんが)

その後、異なる種類の空白を使用して演算子、スペース、タブ、改行を分離することにより、スペースの問題を回避できます。

説明:

クイン1:

my&d={        };         # Declare a function d which 
      S{\d}=$_           # Which substitutes a digit with the string again
                say      # Print with a newline
d                        # The function
Q{my&d={S{\d}=$_};say    # Applied to the string with the program
d
Q{4}}                    # With a digit where the it should be inserted again

クイン2:

これはformatのクインですprintf |(q[printf q[%s]]xx 2)。つまり、文字列のコピーをそれ自体にフォーマットします。ただしs、前のクインで使用されているため使用できませんsay。したがって、文字列OR演算子(~|)を@and !3で使用して%sパーツを生成しますが、フォーマット文字列と挿入する文字列の両方に対してそれを行うことはできないためZ~、余分な文字列と空の文字列を処理する必要があります。ただし,、この2つを分離するために使用することはできないためXx qw[1 0]、1と0で文字列を乗算します。

printf |(                                  )      # Print with formatting
         q[...]       # The string of the program
               xx 2   # Duplicated
                    Z~| (                 )     # String or'd with
                         q[...]                 # A copy to insert the %s
                                Xx              # String multiplied to
                                   qw[1 0]      # itself and an empty string

クイン3:

これは、他のクインとの競合を避けるためにすべてを大文字にするために最善を尽くすEVALのクインです。これには多くEVALsとかなりの数が関係しますlcucケースの間で変換すること。

<...>.lc.EVAL        # Evaluate the lowercase version of the string which results in
.EVAL  given  「print "<'.eval'.uc,' given ',「「".uc,.uc,"」」>.lc",".eval.eval".uc」
             .EVAL   # Evaluate again 

.EVAL  given  「...」   # Set the string to $_ and pass it to .EVAL
print "<'.eval'.uc,' given ',「「".uc       # Print the first half of the quine uppercased
                                   ,.uc   # Print the string uppercased
                                       ,"」」>.lc"  # Print the .lc part lowercased
                                                ,".eval.eval".uc # Print the EVAL part uppercased

9

MathGolf4 5 6カイン、193,535バイト

9バイト

ÿ'ÿ⌐_'ÿ⌐_

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

45バイト

û]∙ûxôû¬ûûûûû╡¬ûô╡û╡xûxxû¬ô]∙xô¬ûûû╡¬ô╡╡xxx¬ô

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

49バイト

ùa6æù\a\ù+6┼ù\ùùùùù\ù§\+ùΣ\Σa6æ\a\+6┼\ùùùù\§\+Σ\Σ

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

99バイト

"""▐ ⌠▌ ⌠▌ ⌠▌ ⌠ ⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠ ⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠"`~

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

4488バイト

♠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠(((((((((((((((((((((((((((((((♠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠((((((♠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠(((((((((((((((((((((((((((((((♠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠((((((((((((((((((((((((((((((((((((((((((((DÄß─·ö♠,♦M-$*DÄß─ö7($$$qq$Äq╘

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

188,845バイト

私は実際にこれにリンクすることはできませんので、実際のクイン生成するPerl 6プログラムを以下に示します。

明瞭性の検証

文字列をスタックに直接プッシュする方法がなくなったと思うが、私はこれから別のクインを最も確実に絞ることができるので、見知らぬメソッドに頼らなければなりません。でも、見知らぬ人、私は第六QUINEに努めている方法は、入ってきます。場合によっては、クインを短くすることもできますが、準備中に使用バイト数を減らしています。

必要な演算子(プッシュ文字列、インクリメント文字列、複製、マッピング、ポップ)がまだいくつかあるため、技術的にもう1つクインを実行できる可能性があります。の{}任意の長さのコードブロックを示すことができますことができる唯一の演算子である、と私は本当に第六QUINEでそれらを必要とします。他のコードブロックのいくつかを使用することもできますが、それらは制限されており、簡単な演算子が不足しているため、ループセクションがそれほど短くなるとは思いません。

さて、遅れた説明:

すべてのクインの構造はほぼ同じです。

  • 文字列、文字列のリスト、または文字のリストをスタックにプッシュします。
  • すべてを1つのリストにまとめる
  • リストを複製する
  • コピーの上にマッピングし、元の文字を取得するために使用される文字を印刷/プッシュします
  • 文字の元のリストを文字列として出力します

クイン1:

これは基本的に、通常のクインの質問で投稿したものと同じです。

ÿ'ÿ⌐_'ÿ⌐_
ÿ            Push the next 4 bytes as a string
 'ÿ⌐_        Stack ["'ÿ⌐_"]
     'ÿ      Push the byte ÿ (I realise I could have used this in a later quine)
       ⌐     Rotate the ÿ to the bottom of the stack : ["ÿ", "'ÿ⌐_"]
        _    Duplicate top of stack: ["ÿ", "'ÿ⌐_", "'ÿ⌐_"]
             Implicitly print stack joined together : ÿ'ÿ⌐_'ÿ⌐_

クイン2

û                Push the next 2 bytes as a string
 ]∙              Stack: ["]∙û"]
   û  û...      Repeat this for the rest of the code
           ]              Wrap the stack in an array : [["]∙","xô"...]]
            ∙             Triplicate                 : [[..],[..],[..]]
             x            Reverse the top array
              ô           Loop over the array, executing the next 6 instructions
                          Stack: [[..],[..],str]
               ¬          Rotate the stack : [str,[..],[..]]
                ûûû╡      Push the string "ûû" and discard the left character
                    ¬     Rotate the "û" to the bottom : ["û",str,[..],[..]]
                          This produces the initialisation part
                     ô    Loop over the array with the next 6 characters again
                      ╡╡xxx¬      Basically discard the string
                            ô     Flatten the last copy of the array onto the stack
                                  Implicitly output the code

クイン3:

ùa6æù\a\ù+6┼ù\ùùùùù\ù§\+ùΣ\Σa6æ\a\+6┼\ùùùù\§\+Σ\Σ
ù...          Push the next 3 bytes as a string
              You know how this goes
    a         Wrap the top element in an array
     6æ       Repeat the next 4 instructions 6 times
       \      Swap the two top items
        a     Wrap the top item in an array
         \    Swap back
          +   Combine the two arrays
              This puts all the strings into a single array
           6            Push a 6
            ┼           Push the element two items down (the array)
             \          Swap with the 6 (this basically duplicates the array)
              ùùùù      Push "ùùù"
                  \§    Swap and get the 6th character (wrapping)
                    \   Swap with array : ["ù", [..]]
                     +  Prepend to array (implicitly mapping)
                      Σ\Σ     Join both the lists to strings and output

クイン4:

"""▐ ⌠▌ ⌠▌ ⌠▌ ⌠ ⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠ ⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠"`~
""             Push the empty string
  "..."        Push some code : ['','...']
       `       Copy the top two elements of the stack : ['','...','','...']
        ~      Evaluate the top element as code : ['','...','']
▐              Prepend the empty string to the code
  ⌠            Push a space and increment by 2 to get a quote
   ▌           Prepend to the array
     ⌠▌ ⌠▌ ⌠   Repeat three more times, leaving the last on top : ['', '""...','"']
              ⌠⌠...       Push a space and increment until it reaches a '`'
                    ⌠⌠... Repeat for the '~' : ['','"""...','"','`','~']
                          Implicitly output

クイン5:

♠              Push 256
 ((...         Decrement until it reaches the correct byte representing the code
               Repeat for each character of the code
      DÄ       Repeat the next instruction 14 times
        ß      Wrap the top 4 elements in an array
         ─     Flatten the resulting monstrosity
          ·    Triplicate the array
           ö   Map the next 7 instructions over the array
                      Stack : [[..],[..],num]
            ♠         Push 128
             ,        Reverse subtraction : [[..],[..],128-num
              ♦M-$    Push the ( character
                  *   Repeat it 128-num times
                   DÄß─         Gather that up in an array and flatten again
                       ö        Map the next 6 instructions
                        7($$$qq
                    7($$$q    Print a ♠, without newline
                              q   Print the brackets without newline
                                  Stack : [[..],[..]]
                               $     Map the number to their values in the code page
                                Äq   Map print over each element
                                  ╘  Discard the last element of the stack

クイン6:

このQUINEがある理由ので、他の人よりもはるかに長い文字列をインクリメントすることは、本当に私たちはキャラクター作成しようとしている場合は特に、コード内の文字のいくつかのために吸うれ、ユニコード表現を使用することで、コードを膨張させるコードでは、 8000文字を超えると、表現部分が非常に大きく膨れ上がります。

⌂         Push an * character
 ))...    Increment until we reach the right character + 8
      ♫{ }            Repeat 10000 times
        α             Wrap the top two elements in an array
          ♫{     }    Then repeat 10000 times
            m{{}}     Shallowly flatten the array
                  h∞<     Double the array
                     m{          Map the doubled array to
                       ïí½<¿{    If it is the first half of the array
                             ⌂⌂  Push two asterisks
                               )))...    Increment into a '⌂' (there are something like 8000 )s here, with a couple of ! to help
                                     @   Rotate the top three elements
                                         Stack : ["⌂",char,"*"]
                                      0{     α4<{}=}←  Repeat while the asterisk is not the char
                                        ⌂⌡)   Push a )
                                           @  Rotate it under the char
                                            ) Increment the asterisk
                                                     ;;   Pop the extra copies of the character
                                                       }{  Else
                                                         ⌡⌡⌡⌡}   Subtract 8 from the character
                                                              }{}  End map and flatten array
                                                                   Print implicitly

文字列がネイティブコードページを使用したかどうかについてMathGolfが一貫していた場合、この最後のクインは大幅に削減されます。


私はあなたの創意に驚いています。どうやってこれらを思いついたのかについての説明が欲しいです。最初の馬の挑戦から私が最初に認識したものですが、残りは思い付くまで永遠にかかったように見えます。
maxb

@maxb私は6番目のクインに取り組んでいます。それを投稿するか、あきらめたら説明を投稿します。ちなみに、chr / ordコマンドとインクリメント文字コマンドは一貫していないようです。1つ目はコードページを使用し、2つ目は典型的なユニコードを使用します(これが6番目のクインを非常に長くしています)
Jo King

実装後しばらくして、chr/ordそのうちの1つに使用しただけで、両方のコードページを代わりに使用する必要があると思いました。
maxb

6

Python 2、2クイン、434 353 349 446バイト

これは主に、Pythonでできるかどうかを確認するためのものでした。

30バイト(末尾の改行を含む):

z='z=%r;print z%%z';print z%z

416バイト、末尾の改行なし:

exec"696d706f7274207379730a793d222222696d706f7274207379730a793d7b7d0a7379732e7374646f75742e777269746528276578656322272b792e666f726d6174282722272a332b792b2722272a33292e656e636f6465282268657822292b27222e6465636f64652822686578222927292222220a7379732e7374646f75742e777269746528276578656322272b792e666f726d6174282722272a332b792b2722272a33292e656e636f6465282268657822292b27222e6465636f6465282268657822292729".decode("hex")

(Lynnのおかげで81バイトをゴルフしましたが、改行を気にかけて負荷を追加しました。)

説明

最初のものは標準の短いPythonクインですが、使用しないように変更されました_。これはPython 2であるため、(またはも使用しません)

2番目のものは、いくつかの考えを取りました。長い文字列はhexコーデックを使用してエンコードされ(したがって、0- 9a- のみが含まれることが保証されますf)、次のようにデコードされます。

import sys
y="""import sys
y={}
sys.stdout.write('exec"'+y.format('"'*3+y+'"'*3).encode("hex")+'".decode("hex")')"""
sys.stdout.write('exec"'+y.format('"'*3+y+'"'*3).encode("hex")+'".decode("hex")')

これは独自のソースコードを取得するためにクイントリックを使用し、次にを使用してエンコードしhex_codec、次にで囲まれて印刷exec"".decode("hex")します。sys.stdout.write改行で印刷されないように印刷します。このコードを実行すると、2番目のクインが出力されます。これが生成方法です。

Pythonでは3つ以上は不可能だと思いますが、間違っている場合は見たいと思います!

あなたがeval quinesを気にしないなら

ØrjanJohansenは、事前にエンコードされた2番目のウマについて次のことを提案しました

y="""import sys
sys.stdout.write('exec"'+('y='+'"'*3+y+'"'*3+';exec y').encode("hex")+'".decode("hex")')""";exec y

次の出力で30 + 248 = 278バイトを獲得します。

exec"793d222222696d706f7274207379730a7379732e7374646f75742e777269746528276578656322272b2827793d272b2722272a332b792b2722272a332b273b65786563207927292e656e636f6465282268657822292b27222e6465636f64652822686578222927292222223b657865632079".decode("hex")

この方法での使用はexec、PPCGの適切なクインルールに従って不正行為ではありませんが、一部の文字がコードとデータの両方として使用されているため、多少気味が悪い(エレガントで賢いが、依然として不正です)と感じています。(私のバージョンではを使用していますexecが、コードとデータは別々です。)スコアを446のままにします。


1
"hex"の代わりに機能し"hex_codec"、数バイト節約できます!
リン

1
後続の改行が重要な場合、最初のクインの最後に空白行を追加してみませんか?
mbomb007

1
同様に、この。これはexec / evalを使用した言語での非常に標準的なクイントリックであることを理解しています。
Ørjanヨハンセン

1
最初のクインと同じフォーマットを再利用しませんか?同様に、この?
ジョーキング

2
print '<tab>',最後にスペースを追加しません。これを使用すると、Jo Kingの提案から85バイトを節約
ovs

5

Japt2 3カイン、106 172バイト

最初のものは私のN char quine答えのかなり冗長なバージョンです。

[91,57,49,100,185,44,85,44,186,57,51,100,185,44,186,49,48,100,185,44,186,85,109,100,185,172,93,172]
[91d¹,U,º93d¹,º10d¹,ºUmd¹¬]¬

ここで試してみてください

2番目のクインETHProductionの優れたクインです。これはJaptの標準クインです。

"iQ ²"iQ ²

ここで試してみてください

3番目のものは``、char-code XORingを使用してデータを保存します。

T=`f=fR;Zff-R-ReX%`;`T=\``+T+Tc^#

ここで試してみてください

以来()'、まだ使用できますが、可能性がある 1以上QUINEを絞り出すすることが可能になります。


1
本当に、本当に最初のゴルフを試したいと思っていますが、ビールを少し乗せて、1つのキャラクターを変えようとするとすぐに脳が爆発することを知っています!くそったれ!
シャギー

@Shaggy一番下の行を取り、それを実行する"'[+U+']+R+(Umd)¬"q mcことは、それが助けである場合、迅速な更新のための最初の行を提供します。
Nit

また、最初のソリューションをリファクタリングして、より多くのコアシンボルを使用できるようにしました。実際にもう1つクインを追加できる可能性があります。
Nit

ちょっと待って、あなたのスコアが高くなりました!
シャギー

@Shaggy意図的にそう、私はそれを短くするのではなく、別の馬のための場所を作ろうとしています。
NIT

4

Gol> <>2 3カイン、17 28 27 26バイト

6バイト

"r2ssH

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

11 10 9バイト

'3d*Wo{|;

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

11バイト

Eh`#Ma0piS0

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

Gol> <>には、文字を出力する3つの方法があります。

  • o 1つの値をポップしてcharとして出力
  • H すべてをポップし、charとして出力し、停止します
  • S"..." スタックにまったく影響を与えずに文字列リテラルを出力します

しかし、私は使用して馬を書く方法を見つけることができませんでした S"..."、唯一の出力方法としてしてので、2種類の文字列リテラルを利用して、上記の2つを思いつきました。

(ジョー・キング)3つ目は使用していますp作成するコマンドを"してS"順番に末尾にゼロ以外のすべてを印刷した、その場で。次にEh、ゼロを出力して終了します。

すべての出力コマンドとpコマンドを使い果たしたので、別のクインを作成することは不可能だと思います(誰かがS"クインを使わずに出てきた場合を除くp)。


どの程度このためS"..."
ジョーキング

3

ルビー、2カイン、27 + 44 = 71バイト

$><<<<2*2<<2
$><<<<2*2<<2
2

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

s=%q{s=%q{S};s[?S]=s;puts s};s[?S]=s;puts s

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

ここでは、主に出力方法によって制限されています。文字列を操作する方法はかなりありますが$><<、使用可能なすべての出力メソッドは別として、あまりにも多くの方法で交差しているようです。抜け道があるかもしれないと思うがeval、異なる種類の複数の文字列操作をネストしなければならないのは難しい。


3

Javascript ES6、2クイン、43 + 22 = 65バイト

クイン1:

(function f(){return[,f,'))'].join('(')}())

クイン2:

g=z=>"g="+g+";g``";g``

関数を呼び出さずに2番目のテンプレートリテラルを使用すると、数バイトを節約できます。
シャギー

2
だから、JavaScriptのoutgolfs JAPT
dylnan

@dylnan 3番目のクインが追加されるまで。
Nit

@Shaggyちょっと、ご意見ありがとうございます。しかし、私は混乱しています-完全なプログラムではありませんか?関数にできる場合、それだけを印刷する必要がありますか?それではg=z=>"g="+g、有効なJSクインでしょうか?
ペドロA

1
@Nit私は何ができるかわかります:P dylnanがコメントしたときに、同様のみ2 quinesを持っていたJAPT
ペドロA

3

> <>、2カイン、8 + 16 = 24バイト

8バイト

#o<}-1:"

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

この答えから取った。


16バイト

'r3d*d8*7+e0p>>|

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

これはに基づいている'r3d*>o<以外は、QUINE o及び<使用することができないので、私は交換<して|、動的に作成されたo(111 = 8×13 + 7)と第2の場所に配置され>ています。


2クインが制限です

残念ながら、出力コマンドの数に制限があります。n数値のみを出力するため、役に立たないためo、任意のクインで実行する必要があります。動的に作成する唯一の方法opです。そのためo、ある馬はを使用でき、別の馬はpできますが、3番目の馬は存在できません。

それが重要な場合、3つめのクインがソースコードをスタックに残すようにすることもできます。


2

Java 10、2カイン、1448 1248バイト

1350 1122バイト

\u0076\u002D\u003E\u007B\u0076\u0061\u0072\u0020\u0072\u003D\u0022\u0076\u002D\u003E\u007B\u0076\u0061\u0072\u0020\u0072\u003D\u0025\u0063\u0025\u0073\u0025\u0031\u0024\u0063\u003B\u0072\u002E\u0066\u006F\u0072\u006D\u0061\u0074\u0028\u0072\u002C\u0033\u0034\u002C\u0072\u002C\u0039\u0032\u0029\u002E\u0063\u0068\u0061\u0072\u0073\u0028\u0029\u002E\u0066\u006F\u0072\u0045\u0061\u0063\u0068\u0028\u0063\u002D\u003E\u0053\u0079\u0073\u0074\u0065\u006D\u002E\u006F\u0075\u0074\u002E\u0070\u0072\u0069\u006E\u0074\u0066\u0028\u0025\u0031\u0024\u0063\u0025\u0063\u0025\u0033\u0024\u0063\u0075\u0025\u0025\u0030\u0034\u0058\u0025\u0031\u0024\u0063\u002C\u0063\u0029\u0029\u003B\u007D\u0022\u003B\u0072\u002E\u0066\u006F\u0072\u006D\u0061\u0074\u0028\u0072\u002C\u0033\u0034\u002C\u0072\u002C\u0039\u0032\u0029\u002E\u0063\u0068\u0061\u0072\u0073\u0028\u0029\u002E\u0066\u006F\u0072\u0045\u0061\u0063\u0068\u0028\u0063\u002D\u003E\u0053\u0079\u0073\u0074\u0065\u006D\u002E\u006F\u0075\u0074\u002E\u0070\u0072\u0069\u006E\u0074\u0066\u0028\u0022\u005C\u005C\u0075\u0025\u0030\u0034\u0058\u0022\u002C\u0063\u0029\u0029\u003B\u007D

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

に相当:

v->{var r="v->{var r=%c%s%1$c;r.format(r,34,r,92).chars().forEach(c->System.out.printf(%1$c%c%3$cu%%04X%1$c,c));}";r.format(r,34,r,92).chars().forEach(c->System.out.printf("\\u%04X",c));}

説明:

v->{                   // Method with empty unused parameter and no return-type
  var r="v->{var r=%c%s%1$c;r.format(r,34,r,92).chars().forEach(c->System.out.printf(%1$c%c%3$cu%%04X%1$c,c));}";
                       //  Unformatted source code
  r.format(r,34,r,92)  //  Formatted quine
   .chars()            //  Loop over the characters as integers
   .forEach(c->System.out.printf("\\u%04X",c));}
                       //   Print "\u" with hexadecimal value of these characters

126バイト

v->{int i='}'-'[';var s="v->{int i='}'-'[';var s=%c%s%c;System.console().printf(s,i,s,i);}";System.console().printf(s,i,s,i);}

System.console()戻りますnullので、何も提供されていない場合TIOを返しますNullPointerException。この場合、

それが機能していることを証明するために、次のものに置き換えSystem.console()くださいSystem.outオンラインで試してみてください。

説明:

v->{              // Method with empty unused parameter and no return-type
  int i='}'-'[';  //  Integer `i` = 34 (unicode value for double-quote)
  var s="v->{int i='}'-'[';var s=%c%s%c;System.console().printf(s,i,s,i);}";
                  //  Unformatted source code
  System.console().printf(s,i,s,i);}
                  //  Print formatted quine

一般的な説明:

Javaでは、通常、次のようにが行われます。

  • String sは、未フォーマットのソースコードが含まれています。
  • %sを使用して、この文字列を自身に入力するために使用されますs.format(...)
  • %c%1$cおよびは34、二重引用符のフォーマットに使用されます。
  • s.format(s,34,s) すべてをまとめます。

その場合、Java 10の最短のラムダ関数は次のようになります(82バイト):

v->{var s="v->{var s=%c%s%1$c;return s.format(s,34,s);}";return s.format(s,34,s);}

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

Javaで2つのクインを使用する唯一の方法は、\uHEXAコンパイル時に文字に変換されるUnicodeバージョンを使用することな0123456789ABCDEF\uので、非Unicodeバージョンでは文字を使用できません。したがって、小さな非ユニコードバージョンはorのSystem.console()代わりに(両方とも「u」を含む)を使用し、andの代わりにand を2回使用しますreturnSystem.out'}'-'['%c34%1$c

Unicodeバージョンについて注意すべき点:

  • 私が使用して目的によ%04X代わりの%04x(16進数の代わりに、小文字大文字のため)。
  • 私が使用している92%c%3$cスラッシュをフォーマットします。
  • \U小文字の代わりに大文字を使用する\uことは明らかに許可されていません。そうでなければreturn、短い非ユニコードバージョンで使用したことになります。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.