nレベルのウロボロスクイン


11

この128言語のウロボロス(別の言語でプログラムを出力するプログラム、さらに別の言語でプログラムを出力するプログラム(後で125言語)、元のプログラムを出力するプログラム)はかなり印象的です。しかし、残念ながら、静的な反復回数があります。

プログラムを出力するプログラムを書く(別の言語で必ずしもが、それはすることができ)、反復nの後、元のプログラムを出力するなど、プログラムを出力するプログラム、出力する第一の時間(すなわちない中間体をプログラムは元のプログラムと同じである必要があります。それ以外の場合、入力を無視するクインが機能します)。ここで、nは入力として提供される負でない整数です。入力は、元のソースコード内の単なる数値にすることはできません(たとえばx = <the value of n>、プログラムの先頭に置く)。次のいずれかである必要があります。

  1. コマンドライン引数として渡されます
  2. 標準入力から読み取る
  3. 新しいプログラムを返す/出力する関数に引数として渡されます。

ウロボロスの中間段階の場合、プログラムは完全に機能するプログラムか、引数のない関数のいずれかであり、呼び出されると次のプログラムを返す/出力します。

ソースファイル自体を読み取ったり、クインのような組み込み関数を使用したりすることはできません(これを行うものはないと思いますが、あるかもしれません)。

明確にするために、の場合n = 0、プログラムは独自のソースコードを出力する必要があります。

の場合n = 1、プログラムは元のソースコードを出力する別のプログラムを出力する必要があります。

等々...

最少バイトが勝ちます!

編集:

「ウロボロスの中間段階の場合、プログラムは、入力なしの完全に機能するプログラムか、引数なしの関数のいずれかになります」と書いておく必要があります。あなたのプログラムは、チェーン内の次の1を出力した場合、その後の細かいことを、入力を待ちますが、あなたのプログラムは、nの元の値を必要はありません。



インデックスnを1つできますか?だから、n = 1の手段は、ソースコードを印刷し、n = 2つの手段等のソースコードを出力するコードを印刷
期限切れデータ

1
反復バージョンにはまだ初期入力がありますか?最初の入力が3で、出力するプログラムを実行するとします。入力3はまだありますか、それともまったく入力はありませんか?入力がない場合getInput()、入力が提供されずになどが使用された場合に対処する必要があると思います。または、getInput()?のエラーを防ぐために、後の反復で使用されないランダムな入力を行うとしましょう。別名現在のPythonの回答は有効ですか?
Kevin Cruijssen

私たちが求められていることは、整数を指定して、反復のnウロボロスのクインの「初期プログラム」であるプログラムを出力することnであり、私たちの答えはn反復の1つとしてカウントされるべきではないのではないかと思います。これは正しいです?
Erik the Outgolfer

@KevinCruijssen私はおそらくそれについてもっと明確だったはずです。中間ステージは、どのような形式でも入力できません。プログラムが次のプログラムを出力してから入力を待つ場合は、問題ないでしょう。
Leo Tenenbaum

回答:


5

05AB1E、28バイト

-4バイト+ Kevin Cruijssenのおかげで修正

"34çìD«s<©di®ì"34çìD«s<©di®ì

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


説明

これは、出力する残りの番号をコードの前に追加することで機能します。つまり、入力と同じ方法でスタックに追加されます。「0」の入力の基本ケースでは、前面の0を連結しません。


d>=0正(>0)ではなく非負()です。問題は、dそれをポップせずにチェックするには、最初にそれを複製する必要がありますが、次に、反復時0"quinsting"に破棄する必要があります。そうしないと、複製されたが出力され0ます。:(
Kevin Cruijssen

"34çìD«s<©di®ì"34çìD«s<©di®ìおそらく28バイト分(これはまだ意図したアプローチにかなり近い)ですか?(私はuplicate からの反復0"34çìD«s<Ddiì"34çìD«s<Ddiì出力の現在のバージョンを恐れています。)-1D
Kevin Cruijssen

4

ルーンエンチャント、39バイト

"3X4+kSql1=c*?S:1-}C'LA-}!i:0)2*?~!'´@

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

であろう4バイトより短い入力はする場所を以下であれば、同じ戦術を使用して05AB1Eより10。ただし、任意の大きな値をサポートする必要があるため、さらに複雑になります。

の数値nは先頭に配置され、を使用して連続番号リテラルとして解析され´ます。"3X4+kSq基本的なquineコードです。前面に値が存在しない場合、スタックの長さは1(クイン)のみとなり、それ以外の場合は2でl1=d*?そこからの処理方法を決定します。

  • 値がある場合、S:1-}'LA2+-}実行します:値を上にスワップし、1を減算し、それを複製して、スタックの一番下にコピーを残し、その値のLog 10に100を掛けた値を取得します(結果として、値自体の文字長に加えて、 1 ´)、文字列の末尾からその多くの文字を削除(効果の両方、エンドオフ自体を切り捨てる場合、それが必要とされない、それは間違った値を持っているので)。Cよりも1バイト短く2+、同じ値になります。

  • 値がない場合は、入力から値を読み取ります。

関係なく::0)2*?複製してゼロと比較します。

  • ゼロ以外のプッシュの場合´

  • ゼロの場合、値をポップします。の!代わりに2?を使用してバイトを保存し´、最初のバイトを実行しようとすると、表示されるのは非数値であり、同じ位置で数値モードからすぐに外れるためです。

スタック全体を上から下に印刷します。


3

Java 10、145バイト

n->{Long N=n;var s="n->{Long N=%s;var s=%c%s%2$c;return s.format(s,N>0?N-1+%2$cL%2$c:%2$cn%2$c,34,s);}";return s.format(s,N>0?N-1+"L":"n",34,s);}

オンライン試して、いくつかの反復の出力を確認してください

説明:

説明:

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

チャレンジパート:

最初のラムダ関数は、longパラメーターとして入力を受け取ります。

  • これはLong N=n;、最初の反復で変数に設定されます。またはLong N=%s;次の反復のために。
  • 三元チェックがN>0?N-1+"L":"n"これを埋める%s値とN-1を付加し、Lそれは長いですのでための文字列に変換する%s場合は、N1の場合はより大きくなるN(初期入力された代わりに0である0か、これはinterquine-の最後の反復です」 loop ')、これを代わりに%sイニシャルで埋めnます。

仕様によると、中間出力は引数のない完全なプログラムまたは関数でなければならない
無知の実施

@EmbodimentofIgnorance私が知っている、それは私が持っているものです。最初のラムダ関数はlong関数パラメーターを受け取り、他のラムダ関数は未使用のVoidパラメーターを受け取ります。これv->は、1バイト短いため、入力を取らないことを示すチャレンジにも常に使用し()->ます。
Kevin Cruijssen

2

Haskell195 164バイト

main=putStr(x++show x++"\na=")>>(getLine:cycle[pure$show$a-1])!!a>>=putStr
x="main=putStr(x++show x++\"\\na=\")>>(getLine:cycle[pure$show$a-1])!!a>>=putStr\nx="
a=0

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

これはかなりシンプルなクイン技法を使用しています。a数値に設定された変数で変更します。その数がゼロの場合(開始時)、入力を取得aし、入力数に設定してソースを出力します。aがゼロでない場合は、ソースaを1に設定して出力します。この方法でaは、元のソースを出力する前にゼロまでカウントダウンします。





1

C#(Visual C#Interactive Compiler)、112バイト

void f(int n=-1){var s="void f(int n={2}){{var s={0}{1}{0};Write(s,(char)34,s,n-1);}}";Write(s,(char)34,s,n-1);}

@NickKennedyのおかげで多くのバイトを節約できました!

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


中間出力は、完全なプログラムでも、単一の引数を取る関数でもありません。また、nsにすべきいくつかのs があると思いますltio.run/##Sy7WTS7O/P@/…
Nick Kennedy

1

Python 3.8(プレリリース)60 56 55 53バイト

lambda n=-1,s='lambda n=%d,s=%r:s%%(~-n,s)':s%(~-n,s)

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

-Jo Kingのおかげで2バイト

53バイトバージョン以降、Python 2およびPython 3でも動作します。


中間関数は、完全なプログラムや引数を取らない関数のようには見えません。
Nick Kennedy

そのセイウチ演算子:=はPythonへの歓迎すべき追加です。
mbomb007

「ウロボロスの中間段階では、プログラムは、完全に機能するプログラムか、または引数なしの関数のいずれかであり、呼び出されると、次のプログラムを返す/出力します。」
mbomb007

@NickKennedy仕様に準拠するように更新され、誤って4バイトが節約されました。
7

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