もう一つのプログラムと私は出かけています!


21

正の整数ネスティングレベル所定のn文字列s印刷可能なASCII文字(の~同じ言語で実行すると、プログラムを出力するプログラムを出力し、出力プログラム。。。文字列を出力しますs

合計でnプログラムを生成する必要があります。すべてのプログラムは回答と同じ言語で実行する必要があります。

注:プログラムまたは関数を出力することができます-提出物としてデフォルトで許可されているもの。

あなたのs言語のプログラムや関数が通常どのように文字列を入力するかをエスケープ文字で入力できます。


例えば、与えられたn=1s="recursion"、Pythonの2プログラムのかもしれない出力:

print "recursion"

これを実行すると出力されます:

recursion

与えられたn=2s = "PPCG"の場合、Python 2プログラムは次を出力します。

print "print \"PPCG\" "

この出力の実行:

print "PPCG"

この出力の実行:

PPCG

関連(+タイトルのインスピレーション):もう1つのLULと私は出ています

関連(サンドボックス内-現在削除されていますが、十分な評判で表示できます):ソースコードの再帰

テストケース

次のテストケースでコードが機能することを確認します(1行に1つ)。

n s
2 PPCG
4 Robert'); DROP TABLE Students;--
17 Deep
2 Spaces In Here
3 "Don't forget quotes!"
5 'Backt`cks might be a h`tch'
6 5%s
8 [Brackets]<Are>(Great){Usually}
3 !"#$%&'()*+,-./ 0123456789:;<=>?@ABCDEFGHIJKLMN
6 OPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
7 THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
3 the quick brown fox jumps over the lazy dog
code-golf  recursion  code-golf  kolmogorov-complexity  board-game  code-golf  number-theory  polynomials  code-golf  code-golf  array-manipulation  polyglot  alphabet  answer-chaining  code-golf  sequence  math  atomic-code-golf  abstract-algebra  proof-golf  code-golf  internet  code-golf  internet  code-golf  ascii-art  kolmogorov-complexity  code-golf  math  ascii-art  number  integer  code-golf  decision-problem  binary-matrix  code-golf  number  sequence  number-theory  code-golf  math  decision-problem  matrix  abstract-algebra  code-golf  string  keyboard  code-golf  fractal  code-golf  math  sequence  combinatorics  hello-world  vim  code-golf  sequence  code-golf  graphical-output  image-processing  code-golf  decision-problem  matrix  linear-algebra  code-golf  ascii-art  code-golf  math  code-golf  ascii-art  graphical-output  code-golf  string  code-golf  string  substitution  code-golf  string  ascii-art  code-golf  arithmetic  code-golf  number  array-manipulation  decision-problem  code-golf  kolmogorov-complexity  code-generation  fractal  code-golf  ascii-art  kolmogorov-complexity  code-golf  ascii-art  code-golf  string  array-manipulation  code-golf  music  code-golf  array-manipulation  code-golf  internet  stack-exchange-api  math  fastest-algorithm  code-golf  binary  bitwise  code-golf  date  code-golf  string  code-golf  sequence  integer  code-golf  arithmetic  number-theory  code-golf  string  random 

1
チャレンジを読んでいて、「ちょっと、とてもよく見える..」のようでした。そして、私のサンドボックスの質問に「また関連している(サンドボックス内):ソースコードのインスピレーション」に気付きました。:)ここでは質問を残しますが、数週間後に削除します。あなたのものは基本的に同じですが、整数パラメータが追加されています。
ケビンCruijssen

1
ここ提案されているように、プログラムの代わりに匿名関数を返すことは許可されていますか?
アーナルド

1
「正の整数」には次が含まれ0ますか?
フェリックスパルメン

1
何らかの理由でプログラムを選択しましたか?デフォルトは関数またはプログラムですか?関数を印刷する関数を使用できますか?
ケビンCruijssen

1
@StewieGriffinは、部分式またはネストされたプログラムでのエスケープが問題になる場合があるためです(サンドボックスでテストケースを引用するように求められた)。
fireflame241

回答:


19

ゼリー、2バイト

Ṿ¡

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

Ṿ¡  Main link; left argument (text) is x, right argument (repetitions) is y
 ¡  Repeat y times:
Ṿ   Uneval x; produce code that outputs x

hehe builtins


これは、 "HI"ではない"こんにちは"、ハイテク生産、壊れている
Tahg

10
@Tahg Jelly入力は、エラーをスローしない場合、Pythonコードとして自動的に評価されます。もしそうなら、それは単なる文字列です。'"hi"'期待される結果を確認するために行う必要があります
HyperNeutrino

19

JavaScript(ES6)、47 44バイト

@HermanLauensteinのおかげで3バイト節約

カリー化構文の入力を受け取ります(n)(s)

n=>g=s=>`alert(atob("${btoa(--n?g(s):s)}"))`

f(2)('PPCG')

出力されます:

'alert(atob("YWxlcnQoYXRvYigiVUZCRFJ3PT0iKSk="))'

どちらが印刷されます:

'alert(atob("UFBDRw=="))'

どちらが印刷されます:

'PPCG'

デモ

alert()中間結果がコンソールに出力され、自動的に実行されるようにオーバーライドされた、より複雑な例。


代替バージョン、40バイト

@Shaggyによる提案

これは、完全なプログラムの代わりに匿名関数を返します。

n=>g=s=>`_=>atob("${btoa(--n?g(s):s)}")`

を使用する代わりに、匿名関数を返すことができますalertか?41バイト
シャギー

@Shaggy私は本当に知りません。私はOPに尋ねました。
アーナルド

そうでない場合は、45バイトの代わりにIIFEを使用して回避できます。
シャギー

-3カリー化を使用してバイト:n=>g=s=>BTalert(atob("${btoa(--n?g(s):s)}"))BT(バッククォートとBTを置き換える)
ハーマンL

@HermanLauensteinありがとう!:)
アーナルド

10

sh + coreutils、31バイト

yes exec sed 1d \$0|sed $1q;cat

受け取りn、コマンドラインパラメータとしておよびsSTDINに。


8
このコードには、「はい、間違いなく私を実行する必要があります」と書かれています。
RedClover

説明を追加できますか?私はトラブルからそれを働いたよ
JoshRagem

1
@JoshRagemはyes繰り返しであり、コマンドライン、印刷exec sed 1d $0$それは引用されなければならないので、シェルのメタキャラクタである)を。(つまり)行sed $1q後に印刷を停止します。次に、入力文字列をコピーします。結果のファイルは、パラメータとスクリプトのファイル名のコピーでシェル自体を置き換えるように指示するスクリプトです。次に、ファイルの最初の行をスキップし、残りを出力します。各スクリプトには、実行後に元の入力のみが出力されるまで、プレフィックスが1つ少なくなります。$1ncatshsed1dsedexec sed 1d $0n
ニール


5

Haskell、17バイト

これを書いている時点で、これはゴルフに特化していない人に対する最短の回答です言語。

それが取る関数でありsそしてnそのためには、結果又は評価し、式のソースコードを返し、次のソースコードを返します。

(!!).iterate show

これが重要な理由の議論:

  1. ソリューションは関数になることができます。
  2. それらの出力は関数として許可されます。
  3. これらの関数にはパラメーターがありません。
  4. Haskellでは、怠zyですべてがカリー化されているため、実際のプログラミング目的で最も自然なのは、0パラメーター関数の定義はその結果と同じです。最も近い代替案である、パラメーターを無視する1パラメーター関数は、ばかげています。

場合にf与えられるPPCG2、そのパラメータとして、結果はテキストである"\"PPCG\""(最初に生成機能)、評価戻りテキスト"PPCG"(第2の生成目的球)、及びそれが評価されるときに返しますPPCG

短縮を提案してくれたnimiに感謝します。


Haskellには引数のない関数の問題に関するメタの関連質問がありますが、まだあまり注目されておらず、まだ未解決の質問があります:codegolf.meta.stackexchange.com/q/12924/56433
Laikoni

3

APL(Dyalog)24 23バイト

-1 ngnに感謝します。

これは、STDOUTをs要求してnから出力し、出力する完全なプログラムです。

''''{⍺,⍨⍺,⍵/⍨1+⍵=⍺}⍣⎕⊢⍞

オンラインでお試しください!(17ディープケースは、TIOの出力制限を超えるため、省略されます-オフラインで動作します)

プロンプト s

 (それを分離し

''''{… このラムダを}⍣⎕ 要求しn、左引数として単一引用符で何度も適用します。は左引数(引用)を表し、右引数(入力テキスト)を表します。

⍵=⍺ テキストが引用符と等しいブール

1+ ひとつ追加

⍵/⍨ 引数の各文字を対応する回数だけ複製します

⍺, 引用符を追加する

⍺,⍨ 見積もりを追加

これが機能するのは、APL内の'文字列が区切られ、文字列内の単一引用符が2倍になり、他の文字をエスケープする必要がないためです。


Dyalog APL ⎕SE.Dyalog.Utils.repObjには、引数(Jellyのunevalと同様)を評価するAPL式を生成するユーティリティ()も付属しています。したがって、次のプログラムは上記と同等ですが、すべての配列で機能します。

SE.Dyalog.Utils.repObj⍣⎕⊢⎕

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


APLXでは、「二重引用符」文字列と「一重引用符」文字列を使用できると思います。残りがそこで動作する場合は、バイトを保存できます:) ngn / apl以前は使用していましたが、最近 ""を削除しました
ngn

引用符を.- として渡すことを検討してください。これにより、(少なくとも)1バイト節約できます。
ngn

@ngnありがとう、しかしAPLXにはdfnsがありません。NARS2000には二重引用符とdfnsの両方がありますが、文字のコストはそれぞれ2バイトです。
アダム

2

Firefox JavaScript、41 35バイト

f=(s,n)=>"_=>"+uneval(--n?f(s,n):s)

Firefoxには、uneval指定されたオブジェクト(この場合は非評価)のように聞こえる文字列があります。


2

Java 8、95 93バイト

String c(String s,int n){return"v->\""+(n-->1?c(s,n).replaceAll("[\\\\\"]","\\\\$0"):s)+'"';}

@Lynnのおかげで-2バイト。

Javaでは、特殊文字をエスケープするのはとても面倒です。

ここで試してみてください試して、結果のメソッドをここで試してください

説明:

String c(String s,int n){  // Method with String and int parameters and String return-type
  return"v->\""+           //  Return literal "v->" + a leading double-quote +
   (n-->1?                 //   If `n` is larger than 1:
     c(s,n)                //    Recursive-call,
      .replaceAll("[\\\\\"]","\\\\$0")
                           //    with all double-quotes ('"') and slashes ('\') escaped
    :                      //   Else:
     s)                    //    The input String
   +'"';                   //   + a trailing double quote
}                          // End of method 

正規表現の置換の追加説明:

.replaceAll("[\\\\\"]","\\\\$0")
.replaceAll("        ","      ")  // Replace the match of the 1st String, with the 2nd
             [      ]             //  One of these inner characters:
              \\\\                //   Escaped slash ('\')
                  \"              //   Escaped double-quote ('"')
                                  //  And replace them with:
                        \\\\      //   Escaped slash ('\'),
                            $0    //   plus found match

なぜこれらすべてのスラッシュが必要なのでしょうか?

\   →  \\       // Escapes a single slash for the regex
\\  →  \\\\     // Escapes both regex-escaped slashes for the String
"   →  \"       // Escapes a double-quote for the String

1
"正規表現の文字クラスでエスケープする必要はないと思うので、\\\\\"(5つのバックスラッシュ)で十分です。
リン



1

QuadR、8バイト

ngn's answerの簡単な翻訳。

取りn、引数として、およびs入力として。

^|'|$
'&

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

PCRE Rすべてのインスタンスを置き換えます

^|'|$ 行の始まりOR引用OR行の終わり

'& 引用と一致全体

引数は、変換を繰り返す回数を指定します。


ああ、今では私はその言語が何のためにあるかを知っています:)
ngn

1

R、62バイト

f=function(n,s){"if"(n,{formals(f)$n=n-1;formals(f)$s=s;f},s)}

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

次のように呼び出します:のコピーがf(n,s)続きますn()

名前付き関数。無名関数を返します。それがないすべては、デフォルト値の変更であるformalsのがf結果の関数を呼び出すことができるようにする(そして、その呼ばれ、その結果、n回)。ときn達し0、それが返されますs

Rは実際には逃げるのにそれほど悪くない!Cスタイルのエスケープを使用するため、入力を取得し、とで置き換え"\"から、全体をでラップするだけです。\\\" "





0

Excel VBA(32ビット)、67バイト

32ビットExcel VBAに制限されているバージョン 2^i32ビットVBAではエラーなしで評価されますが、64ビットVBAでは評価されない

入力nおよびs範囲から取得[A1][B1]、(n反復後)ターミナルのみに評価されるとsそのターミナルとしてのみ出力される匿名関数を出力する匿名VBEイミディエイトウィンドウ関数

For i=0To[A1-1]:q=q+"?"+String(2^i,34):Next:?q[B1]Replace(q,"?","")

サンプル入力/出力

[A1:B1]=Array(7, "PPCG")
For i=0To[A1-1]:q=q+"?"+String(2^i,34):Next:?q[B1]Replace(q,"?","")
?"?""?""""?""""""""?""""""""""""""""?""""""""""""""""""""""""""""""""?""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""PPCG"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
?"?""?""""?""""""""?""""""""""""""""?""""""""""""""""""""""""""""""""PPCG"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
?"?""?""""?""""""""?""""""""""""""""PPCG"""""""""""""""""""""""""""""""
?"?""?""""?""""""""PPCG"""""""""""""""
?"?""?""""PPCG"""""""
?"?""PPCG"""
?"PPCG"
PPCG
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.