Thêm một chương trình nữa và tôi đã ra ngoài!


21

Đưa ra một mức lồng nhau nguyên dương nvà chuỗi scác ký tự ascii có thể in được ( để ~, xuất ra một chương trình, khi chạy trong cùng một ngôn ngữ, sẽ tạo ra một chương trình tạo ra một chương trình s.

Tổng số nchương trình nên được tạo, tất cả các chương trình sẽ được chạy cùng ngôn ngữ với câu trả lời của bạn.

Lưu ý: bạn có thể xuất các chương trình hoặc chức năng - mọi thứ bạn được phép theo mặc định là một bài nộp.

Bạn có thể nhập svới các ký tự thoát, làm thế nào một chương trình hoặc chức năng trong ngôn ngữ của bạn thường nhập một chuỗi.


Thí dụ

Ví dụ, đã cho n=1s="recursion", một chương trình Python 2 có thể xuất ra:

print "recursion"

Chạy này sẽ xuất ra:

recursion

Cho n=2và s = ​​"PPCG", chương trình Python 2 có thể xuất ra:

print "print \"PPCG\" "

Chạy kết quả đầu ra này:

print "PPCG"

Chạy kết quả đầu ra này:

PPCG

Liên quan (+ cảm hứng tiêu đề): Thêm một LUL và tôi ra ngoài

Cũng liên quan (trong hộp cát - hiện đã bị xóa, nhưng vẫn có thể được xem với đủ danh tiếng): Đệ quy mã nguồn

Các trường hợp thử nghiệm

Đảm bảo rằng mã của bạn hoạt động cho các trường hợp kiểm tra sau (một trên mỗi dòng):

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
Đã đọc thử thách và giống như "này, trông rất quen thuộc ..", và sau đó nhận thấy " Cũng liên quan (trong hộp cát): Cảm hứng mã nguồn " cho câu hỏi về hộp cát của tôi. :) Bây giờ tôi sẽ để lại câu hỏi của mình, nhưng sẽ xóa nó sau một vài tuần. Của bạn về cơ bản là giống nhau, ngoại trừ việc thêm một tham số nguyên.
Kevin Cruijssen

1
Như được đề xuất ở đây , nó có được phép trả lại các hàm ẩn danh thay vì các chương trình không?
Arnauld

1
"Số nguyên dương" có bao gồm 0không?
Felix Palmen

1
Bạn đã chọn chương trình vì một lý do? Mặc định là chức năng hay chương trình? Được phép có chức năng in một chức năng?
Kevin Cruijssen

1
@StewieGriffin vì thoát trong các biểu thức con hoặc chương trình lồng nhau có thể có vấn đề (và ai đó đã yêu cầu trích dẫn các trường hợp kiểm tra trong hộp cát).
fireflame241

Câu trả lời:


19

Thạch , 2 byte

Ṿ¡

Hãy thử trực tuyến!

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

nội địa


Điều này bị hỏng, "hi" tạo ra hi, không phải "hi"
Tahg

10
Đầu vào @Tahg Jelly được tự động đánh giá là mã Python nếu nó không gây ra lỗi. Nếu có, thì đó chỉ là một chuỗi. Bạn sẽ phải làm gì '"hi"'để thấy kết quả mong đợi
HyperNeutrino

19

JavaScript (ES6), 47 44 byte

Đã lưu 3 byte nhờ @HermanLauenstein

Đưa đầu vào theo cú pháp currying (n)(s).

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

Thí dụ

f(2)('PPCG')

Sẽ xuất:

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

Mà sẽ in:

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

Mà sẽ in:

'PPCG'

Bản giới thiệu

Một ví dụ phức tạp hơn alert()đã được ghi đè để kết quả trung gian được in ra bàn điều khiển và tự động thực hiện.


Phiên bản thay thế, 40 byte

Được đề xuất bởi @Shaggy

Cái này trả về một hàm ẩn danh thay vì một chương trình đầy đủ.

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

Bạn có thể trả về một chức năng ẩn danh, thay vì sử dụng alert? 41 byte
Shaggy

@Shaggy Tôi không thực sự biết. Tôi đã hỏi OP.
Arnauld

Nếu không, có lẽ bạn có thể thoát khỏi IIFE thay vì 45 byte.
Xù xì

-3 byte sử dụng currying: n=>g=s=>BTalert(atob("${btoa(--n?g(s):s)}"))BT(thay thế BT bằng backticks)
Herman L

@HermanLauenstein Cảm ơn! :)
Arnauld

10

sh + coreutils, 31 byte

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

Lấy nlàm tham số dòng lệnh và strên STDIN.


8
Mã này nói: "Có, bạn chắc chắn phải thực thi tôi."
RedClover

Bạn có thể thêm một lời giải thích? Tôi đang gặp sự cố khi xử lý nó
JoshRagem

1
@JoshRagem yesliên tục in dòng lệnh của nó, đó là exec sed 1d $0(đó $là một metacharacter vỏ nên nó phải được trích dẫn). sed $1qdừng in sau dòng $1(tức là n). catsau đó sao chép chuỗi đầu vào. Tệp kết quả là một shtập lệnh báo cho trình bao thay thế chính nó bằng một bản sao sedvới các tham số 1dvà tên tệp của tập lệnh. sedsau đó bỏ qua dòng đầu tiên của tệp và xuất phần còn lại. Mỗi tập lệnh có một exec sed 1d $0tiền tố ít hơn , cho đến sau khi nthực hiện chỉ có đầu vào ban đầu được in.
Neil


5

Haskell, 17 byte

Kể từ khi tôi viết bài này, đây là câu trả lời ngắn nhất cho một ngôn ngữ không dành riêng cho việc chơi gôn .

Đây là một hàm lấy sntheo thứ tự đó và trả về kết quả hoặc mã nguồn của một biểu thức mà khi được đánh giá sẽ trả về mã nguồn tiếp theo.

(!!).iterate show

Lập luận cho lý do tại sao điều này được tính:

  1. Giải pháp được phép là chức năng.
  2. Đầu ra của họ được phép là chức năng.
  3. Những chức năng này không có tham số.
  4. Trong Haskell, vì nó lười biếng và mọi thứ bị quấy rầy, điều tự nhiên nhất - cho mục đích lập trình thực tế - định nghĩa của hàm 0 tham số giống như kết quả của nó; thay thế gần nhất, hàm 1 tham số mà bỏ qua tham số, là ngớ ngẩn.

Nếu fđược đưa ra PPCG2như là tham số của nó, kết quả là văn bản "\"PPCG\""(hàm được tạo đầu tiên), khi được đánh giá sẽ trả về văn bản "PPCG"(chức năng được tạo thứ hai) và khi được đánh giá, nó sẽ trả về PPCG.

Cảm ơn nimi đã gợi ý rút ngắn.


Có một câu hỏi Meta liên quan về vấn đề chức năng không có đối số trong Haskell, mặc dù nó chưa nhận được nhiều sự chú ý và vẫn có câu hỏi mở: codegolf.meta.stackexchange.com/q/12924/56433
Laikoni

3

APL (Dyalog) , 24 23 byte

-1 cảm ơn ngn.

Đây là một chương trình đầy đủ nhắc nhở svà sau đó cho nvà in ra STDOUT.

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

Hãy thử trực tuyến! (17 trường hợp Sâu được bỏ qua vì vượt quá giới hạn đầu ra của TIO - hoạt động ngoại tuyến)

Nhắc cho s

 mang lại rằng (để tách )

''''{Lời }⍣⎕ nhắc cho nvà áp dụng lambda này với một trích dẫn là đối số trái nhiều lần. là viết tắt của đối số bên trái (trích dẫn) và là viết tắt của đối số bên phải (văn bản đầu vào):

⍵=⍺ Boolean trong đó văn bản bằng với một trích dẫn

1+ cộng một

⍵/⍨ nhân rộng mỗi ký tự của đối số số lần tương ứng

⍺, trả trước một trích dẫn

⍺,⍨ nối một trích dẫn

Điều này hoạt động vì các chuỗi trong APL được 'phân tách và các dấu ngoặc đơn trong chuỗi được nhân đôi, trong khi không có ký tự nào khác cần thoát.


Dyalog APL cũng cung cấp một tiện ích ( ⎕SE.Dyalog.Utils.repObj) tạo ra một biểu thức APL để đánh giá đối số của nó (tương tự như uneval của Jelly ). Do đó, chương trình sau tương đương với chương trình trên, nhưng hoạt động cho tất cả các mảng:

SE.Dyalog.Utils.repObj⍣⎕⊢⎕

Hãy thử trực tuyến!


Tôi nghĩ rằng APLX cho phép các chuỗi "gấp đôi" cũng như "trích dẫn đơn lẻ". Nếu phần còn lại hoạt động ở đó, bạn có thể lưu một byte :) ngn / apl đã sử dụng nhưng tôi đã xóa "" gần đây
ngn

Xem xét chuyển trích dẫn dưới dạng .- mà tiết kiệm (ít nhất) một byte.
ngn

@ngn Cảm ơn, nhưng APLX không có dfns. NARS2000 có cả dấu ngoặc kép và dfns, nhưng các ký tự có giá hai byte mỗi ký tự.
Adám

2

Firefox JavaScript, 41 35 byte

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

Firefox có một giao diện đẹp uneval, thực hiện những gì nó nghe giống như - bỏ qua một đối tượng nhất định, trong trường hợp này - chuỗi.


2

Java 8, 95 93 byte

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

-2 byte nhờ @Lynn .

Thoát các ký tự đặc biệt rất khó chịu trong Java ..

Hãy thử nó ở đâythử phương pháp kết quả ở đây .

Giải trình:

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 

Giải thích thêm cho việc thay thế regex:

.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

Tại sao tất cả những dấu gạch chéo?

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

1
Tôi không nghĩ rằng bạn cần phải thoát "trong một lớp nhân vật regex, vì vậy \\\\\"(năm dấu gạch chéo ngược) sẽ ổn.
Lynn

2

Dưới tải , 11 byte

(a(S)*)~^^S

Hãy thử trực tuyến!

Đầu vào cần phải bắt đầu trên ngăn xếp, với số ở trên dưới dạng số nhà thờ . Tôi không biết liệu đây có phải là một phương thức nhập hợp lệ hay không, nhưng đặc tả không có đầu vào và việc đặt đầu vào lên trên cùng của ngăn xếp có vẻ như là một phương thức bị mắc kẹt được sử dụng trong các ngôn ngữ đó.



1

QuadR , 8 byte

Bản dịch đơn giản của câu trả lời của ngn .

Lấy nlàm đối số và slàm Đầu vào.

^|'|$
'&

Hãy thử trực tuyến!

PCRE R thay thế tất cả các trường hợp của

^|'|$ Bắt đầu dòng HOẶC Trích dẫn HOẶC Kết thúc dòng

'& với một trích dẫn và toàn bộ trận đấu

Đối số chỉ định số lần lặp lại chuyển đổi.


à, bây giờ tôi biết ngôn ngữ đó dùng để làm gì :)
ngn

1

R , 62 byte

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

Hãy thử trực tuyến!

Gọi nó như vậy: f(n,s)theo sau là nbản sao của()

Một chức năng được đặt tên; trả về một hàm ẩn danh. Tất cả những gì nó làm là sửa đổi các giá trị mặc định của formalsof f, cho phép hàm kết quả được gọi (và sau đó là kết quả của nlần gọi đó, lần). khi nđạt 0, nó trở lại s.

R thực sự không quá tệ trong việc trốn thoát! Nó sử dụng lối thoát kiểu C, vì vậy bạn chỉ cần lấy đầu vào, thay thế "bằng \"\bằng \\, sau đó bọc toàn bộ mọi thứ vào " ".





0

VBA Excel (32-bit), 67 byte

Phiên bản bị giới hạn ở VBA 32 bit vì 2^iđánh giá không có lỗi trong VBA 32 bit, nhưng không phải ở VBA 64 bit

Hàm cửa sổ tức thời VBE ẩn danh lấy đầu vào nstừ các phạm vi [A1][B1]xuất ra một hàm ẩn danh mà khi được đánh giá xuống chỉ một thiết bị đầu cuối (sau khi nlặp) chỉ xuất ra snhư thiết bị đầu cuối đó

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

Đầu vào / đầu ra mẫu

[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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.