อีกหนึ่งโปรแกรมแล้วฉันก็ออกไป!


21

กำหนดจำนวนเต็มบวกระดับการซ้อนnและสตริงsของตัวอักขระ ASCII ( เพื่อ~ออกโปรแกรมซึ่งเมื่อทำงานในภาษาเดียวกัน outputs โปรแกรมที่เอาท์พุทโปรแกรมที่... sที่เอาท์พุทสตริง

รวมnโปรแกรมควรจะสร้างขึ้นซึ่งทั้งหมดควรจะทำงานในภาษาเดียวกันกับคำตอบของคุณ

หมายเหตุ: คุณสามารถส่งออกโปรแกรมหรือฟังก์ชั่น - สิ่งที่คุณได้รับอนุญาตโดยค่าเริ่มต้นเป็นการส่ง

คุณสามารถป้อนsด้วยอักขระที่หลบหนีวิธีที่โปรแกรมหรือฟังก์ชั่นในภาษาของคุณมักจะใส่สตริง


ตัวอย่าง

ตัวอย่างเช่นที่กำหนดn=1และs="recursion"โปรแกรม Python 2 อาจส่งออก:

print "recursion"

การรันสิ่งนี้จะได้ผลลัพธ์:

recursion

ได้รับn=2และ s = "PPCG" โปรแกรม Python 2 อาจส่งออก:

print "print \"PPCG\" "

การรันเอาต์พุตนี้:

print "PPCG"

การรันเอาต์พุตนี้:

PPCG

ที่เกี่ยวข้อง (+ ชื่อเรื่องแรงบันดาลใจ): อีกหนึ่ง LUL และฉันไม่อยู่

ที่เกี่ยวข้องด้วย (ใน sandbox - ตอนนี้ถูกลบ แต่ยังสามารถดูได้ด้วยชื่อเสียงที่เพียงพอ): การเรียกซ้ำซอร์สโค้ด

กรณีทดสอบ

ตรวจสอบให้แน่ใจว่ารหัสของคุณใช้ได้กับกรณีทดสอบต่อไปนี้ (หนึ่งรายการต่อบรรทัด):

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
กำลังอ่านความท้าทายและเป็นเหมือน "เฮ้ที่ดูคุ้นเคยมาก .. " จากนั้นสังเกต "ของคุณที่เกี่ยวข้อง (ในแซนด์บ็อกซ์: แรงบันดาลใจของรหัสที่มา " ของคุณสำหรับคำถามแซนด์บ็อกซ์ของฉัน :) ฉันจะทิ้งคำถามไว้ที่นั่นตอนนี้ แต่จะลบออกหลังจากสองสามสัปดาห์ ของคุณนั้นเหมือนกันยกเว้นการเพิ่มพารามิเตอร์จำนวนเต็ม
Kevin Cruijssen

1
ตามที่แนะนำไว้ที่นี่อนุญาตให้ส่งคืนฟังก์ชันที่ไม่ระบุชื่อแทนโปรแกรมได้หรือไม่
Arnauld

1
"จำนวนเต็มบวก" รวม0หรือไม่
Felix Palmen

1
คุณเลือกโปรแกรมด้วยเหตุผลหรือไม่? ค่าเริ่มต้นคือฟังก์ชั่นหรือโปรแกรม? มันอนุญาตให้มีฟังก์ชั่นการพิมพ์ฟังก์ชั่นหรือไม่?
Kevin 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

ฮิฮิบิวอิน


สิ่งนี้หัก "สวัสดี" ก่อให้เกิดสวัสดีไม่ใช่ "สวัสดี"
Tahg

10
@Tahg Jelly input จะถูกประเมินโดยอัตโนมัติเป็นรหัส Python หากไม่เกิดข้อผิดพลาด ถ้าเป็นเช่นนั้นก็เป็นเพียงแค่สตริง คุณต้องทำ'"hi"'เพื่อดูผลลัพธ์ที่คาดหวัง
HyperNeutrino

19

JavaScript (ES6), 47 44 ไบต์

บันทึกแล้ว 3 ไบต์ขอบคุณ @HermanLauenstein

(n)(s)จะเข้าในไวยากรณ์ currying

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 bytes
Shaggy

@Shaggy ฉันไม่รู้จริงๆ ฉันถาม OP
Arnauld

ถ้าไม่เช่นนั้นคุณอาจจะหนีไปกับ IIFE แทน 45 ไบต์
Shaggy

-3 ไบต์โดยใช้การแกง: n=>g=s=>BTalert(atob("${btoa(--n?g(s):s)}"))BT(แทนที่ BT ด้วย backticks)
Herman L

@HermanLauenstein ขอบคุณ! :)
Arnauld

10

sh + coreutils, 31 ไบต์

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

ใช้nเป็นพารามิเตอร์บรรทัดคำสั่งและsบน STDIN


8
รหัสนี้บอกว่า: "ใช่คุณต้องสั่งฉันแน่นอน"
RedClover

คุณสามารถเพิ่มคำอธิบายได้ไหม? ฉันมีปัญหาในการทำงานออก
JoshRagem

1
@JoshRagem yesพิมพ์บรรทัดคำสั่งซ้ำแล้วซ้ำอีกซึ่งเป็นexec sed 1d $0(ตัว$เชลล์เมตาอักขระจึงต้องมีการเสนอราคา) sed $1qหยุดพิมพ์หลังจากบรรทัด$1(เช่นn) catจากนั้นคัดลอกสตริงอินพุต ไฟล์ผลลัพธ์เป็นshสคริปต์ที่บอกให้เชลล์แทนที่ตัวเองด้วยสำเนาของsedพารามิเตอร์1dและชื่อไฟล์ของสคริปต์ sedจากนั้นข้ามบรรทัดแรกของไฟล์และส่งออกส่วนที่เหลือ แต่ละสคริปต์มีexec sed 1d $0คำนำหน้าน้อยกว่าหนึ่งจนกว่าหลังจากnการประมวลผลเฉพาะอินพุตต้นฉบับจะถูกพิมพ์
Neil


5

Haskell, 17 ไบต์

เมื่อฉันเขียนสิ่งนี้นี่เป็นคำตอบที่สั้นที่สุดสำหรับ ไม่ใช่นักกอล์ฟโดยเฉพาะภาษา

มันเป็นฟังก์ชั่นที่ใช้sและnเรียงตามลำดับและส่งคืนผลลัพธ์หรือซอร์สโค้ดของนิพจน์ซึ่งเมื่อประเมินแล้วจะส่งคืนซอร์สโค้ดถัดไป

(!!).iterate show

เหตุผลที่ทำไมจำนวนนี้ถึง:

  1. โซลูชันได้รับอนุญาตให้ใช้งานได้
  2. เอาต์พุตของพวกเขาได้รับอนุญาตให้ทำงาน
  3. ฟังก์ชั่นเหล่านั้นไม่มีพารามิเตอร์
  4. ใน Haskell เนื่องจากขี้เกียจและทุกอย่างเป็น curried ธรรมชาติที่สุดสำหรับวัตถุประสงค์ในการเขียนโปรแกรมปฏิบัตินิยามของฟังก์ชัน 0 พารามิเตอร์เหมือนกันกับผลของมัน ทางเลือกที่ใกล้เคียงที่สุดฟังก์ชั่น 1 พารามิเตอร์ซึ่งไม่สนใจพารามิเตอร์นั้นคือโง่

หากfได้รับPPCGและ2เป็นพารามิเตอร์ผลคือข้อความ"\"PPCG\""(ฟังก์ชั่นที่สร้างขึ้นครั้งแรก) ซึ่งเมื่อประเมินผลตอบแทนข้อความ"PPCG" (ที่สร้างขึ้นครั้งที่สอง) และเมื่อประเมินแล้วจะส่งคืนPPCGและเมื่อได้รับการประเมินว่าจะส่งกลับ

ขอบคุณnimi ที่แนะนำให้ย่อ


มีคำถาม Meta ที่เกี่ยวข้องในประเด็นของฟังก์ชั่นที่ไม่มีข้อโต้แย้งใน Haskell แม้ว่าจะยังไม่ได้รับความสนใจมากและยังมีคำถามเปิดอยู่: codegolf.meta.stackexchange.com/q/12924/56433
Laikoni

3

APL (Dyalog)หน้า24 23 ไบต์

-1 ขอบคุณ ngn

โปรแกรมนี้เป็นโปรแกรมเต็มรูปแบบที่แจ้งให้sและจากนั้นnและพิมพ์ไปยัง STDOUT

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

ลองออนไลน์! (กรณี Deep Deep 17 เว้นไว้เนื่องจากเกินขีด จำกัด เอาต์พุตของ TIO - ทำงานแบบออฟไลน์)

แจ้งให้ s

 ให้ผลผลิตนั้น (เพื่อแยกและ)

''''{…ขอ}⍣⎕ พรอมต์nและใช้แลมบ์ดานี้โดยอ้างคำพูดเดียวเป็นข้อโต้แย้งที่เหลืออยู่หลายครั้ง หมายถึงอาร์กิวเมนต์ซ้าย (เครื่องหมายคำพูด) และหมายถึงอาร์กิวเมนต์ขวา (ข้อความอินพุต):

⍵=⍺ บูลีนที่ข้อความเท่ากับเครื่องหมายคำพูด

1+ เพิ่มหนึ่ง

⍵/⍨ ทำซ้ำแต่ละอักขระของอาร์กิวเมนต์ตามจำนวนครั้งที่สอดคล้องกัน

⍺, เสริมคำพูด

⍺,⍨ ต่อท้ายคำพูด

สิ่งนี้ใช้ได้เนื่องจากสตริงใน APL เป็น'ตัวคั่นและเครื่องหมายคำพูดเดี่ยวในสตริงจะเพิ่มเป็นสองเท่าในขณะที่ไม่จำเป็นต้องใช้อักขระอื่น


Dyalog APL ยังมาพร้อมกับยูทิลิตี้ ( ⎕SE.Dyalog.Utils.repObj) ที่สร้างนิพจน์ APL ซึ่งประเมินค่าอาร์กิวเมนต์ของมัน (คล้ายกับJelly Uneval ) โปรแกรมต่อไปนี้จึงเทียบเท่ากับข้างต้น แต่ใช้ได้กับอาร์เรย์ทั้งหมด :

SE.Dyalog.Utils.repObj⍣⎕⊢⎕

ลองออนไลน์!


ฉันคิดว่า APLX อนุญาตให้ใช้สตริง "ทวีคูณ" และ "อ้างคำพูดเดี่ยว ๆ " ได้ หากส่วนที่เหลือทำงานได้ที่นั่นคุณสามารถบันทึกไบต์ได้ :) ngn / apl ใช้ แต่ฉันได้ลบ "" เมื่อเร็ว ๆ นี้
ngn

พิจารณาผ่านเครื่องหมายคำพูดเป็น . - ที่บันทึก (อย่างน้อย) ไบต์
ngn

@ngn ขอบคุณ แต่ APLX ไม่มี dfns NARS2000 มีทั้งเครื่องหมายคำพูดคู่และและ dfns แต่อักขระมีราคาสองไบต์ต่อตัว
Adám

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)+'"';}

-2 ไบต์ขอบคุณที่@Lynn

การหลบหนีอักขระพิเศษนั้นน่ารำคาญใน 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 

คำอธิบายเพิ่มเติมสำหรับการเปลี่ยน 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

ทำไมเครื่องหมายเหล่านี้ทั้งหมด

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

1
ฉันไม่คิดว่าคุณจะต้องหลบหนี"ในคลาสตัวอักษร regex ดังนั้น\\\\\"(ห้าแบ็กสแลช) ควรจะดี
Lynn

2

อันเดอร์โหลด , 11 ไบต์

(a(S)*)~^^S

ลองออนไลน์!

การป้อนข้อมูลความต้องการที่จะเริ่มต้นในกองมีจำนวนที่ด้านบนในรูปแบบของตัวเลขคริสตจักร ฉันไม่รู้ว่านี่เป็นวิธีการป้อนข้อมูลที่ถูกต้องหรือไม่ แต่ข้อมูลจำเพาะไม่มีอินพุตและการวางอินพุตไปที่ด้านบนสุดของสแต็กดูเหมือนว่าวิธีการควั่นที่ใช้ในภาษาดังกล่าว



1

QuadR , 8 ไบต์

แปลง่ายๆของคำตอบของ NGN

ใช้nเป็นอาร์กิวเมนต์และsเป็นอินพุต

^|'|$
'&

ลองออนไลน์!

PCRE Rแทนที่ทุกกรณีของ

^|'|$ จุดเริ่มต้นของบรรทัดหรือการอ้างอิงหรือจุดสิ้นสุดของบรรทัด

'& ด้วยการเสนอราคาและการแข่งขันทั้งหมด

อาร์กิวเมนต์ระบุจำนวนครั้งที่จะทำการแปลงซ้ำ


อาตอนนี้ฉันรู้แล้วว่าภาษานั้นมีไว้เพื่ออะไร :)
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มาถึงก็จะส่งกลับ0s

จริงๆแล้ว R ก็ไม่ได้แย่ไปกว่าการหลบหนี! จะใช้แบบ C หลบหนีดังนั้นคุณก็ต้องใช้เวลาใส่แทนที่"ด้วย\"และ\ด้วยและแล้วห่อสิ่งที่ทั้งใน\\" "


0

Pyth, 21 ไบต์

L++NsXbJ,N\\+L\\JNyFz

ลองที่นี่

น่าเสียดายที่ฟังก์ชั่นวนซ้ำ (ไม่ใช่โปรแกรมเต็มดังด้านบน) มีความยาวมากกว่า (24 ไบต์):

M?GgtG++NsXHJ,N\\+L\\JNH



0

Excel VBA (32- บิต), 67 ไบต์

รุ่นถูก จำกัด ไว้ที่ Excel VBA 32 บิตเนื่องจาก2^iประเมินโดยไม่มีข้อผิดพลาดใน VBA 32 บิต แต่ไม่ใช่ใน VBA 64 บิต

ไม่ประสงค์ออกนาม VBE ฟังก์ชั่นหน้าต่างทันทีที่ใช้ปัจจัยการผลิตnและsจากจากช่วง[A1]และ[B1]และผลการทำงานที่ไม่ระบุชื่อว่าเมื่อประเมินลงไปเพียงขั้ว (หลังจากnซ้ำ) เอาท์พุทเพียงsเป็นขั้วที่

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.