รหัสที่มา GO!


18

ลองใช้ความเป็นจริงยิ่งเพื่อล่าสัตว์เล็ก ๆ ที่ซ่อนอยู่ในซอร์สโค้ด เขียนโปรแกรม quine ที่ส่งออกซอร์สโค้ดของตัวเองยกเว้นตัวอักษร 5 ตัวติดต่อกันที่จะแก้ไขและจะแสดงPCG-mon :(^_^)

5 ตัวละครต่อเนื่องสามารถวางได้ทุกที่ในรหัสที่มา (จากตำแหน่ง0ไปn-5, nเป็นความยาวของรหัสที่มา) ซอร์สโค้ดต้องมีความยาวอย่างน้อย 5 ตัวอักษร สตริง(^_^)หรือสตริงย่อยที่มีความยาว> = 2 จะต้องไม่ปรากฏในซอร์สโค้ดเริ่มต้นเฉพาะในเอาต์พุต

ตัวอย่างของการส่งที่ถูกต้อง:

  • รหัสที่มาmy source codeออกmy (^_^)e code

ไม่ถูกต้อง:

  • รหัสที่มา(^_^) copy;ออก(^_^) (^_^)

เกณฑ์การชนะ

รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ


5
เพื่อไม่ให้เป็นลบมากเกินไป แต่นี่เป็นควินทั่วไปและ a ทำ x โดยไม่มีปัญหา ในภาษาที่มีวิธีการ quining ทั่วไปนี้ค่อนข้างน่าเบื่อ คุณยังไม่ได้ระบุว่าจะเกิดอะไรขึ้นหากซอร์สโค้ดของคุณคือ 5 ไบต์หรือน้อยกว่า
FryAmTheEggman

@ ทอดฉันคิดว่ามันเป็นไปไม่ได้ที่จะแสดงตัวอักษร 5 ตัว(^_^)พร้อมกับซอร์สโค้ดที่มีตัวอักษรน้อยกว่า 5 ตัว? อาจจะมีการเข้ารหัสที่เฉพาะเจาะจง ...
Arnaud

3
ในขณะที่ฉันไม่แน่ใจว่าเป็นไปได้ในกรณีนี้มันค่อนข้างเล็กน้อยในการสร้างโปรแกรมที่พิมพ์ไบต์มากกว่าที่มี ตัวอย่างเช่นโปรแกรม Pyth ผลิตเอาท์พุทG abcdefghijklmnopqrstuvwxyz
FryAmTheEggman

3
ผมอยากแนะนำว่าโปรแกรมควรมีอย่างน้อย 6 ตัวอักษรเพียงเพื่อให้ไม่มีใครพยายามพูด, ทาสี
Sp3000

2
@FryAmTheEggman เส้นแบ่งระหว่างหมองคล้ำและควินินทั่วไปที่น่าสนใจนั้นค่อนข้างดี คำตอบเมตาของฉันส่วนใหญ่อ้างถึง quines โดยที่โซลูชันที่ทำงานได้เพียงอย่างเดียวคือรับสตริงที่แสดงถึงซอร์สโค้ดทั้งหมดแล้วประมวลผลสตริงนั้น หากมีวิธีแก้ปัญหาที่สามารถหนีออกไปได้โดยไม่ต้องสร้างซอร์สโค้ดแบบเต็มในบางจุดฉันคิดว่าโดยปกติแล้วจะช่วยให้สามารถแก้ปัญหาที่น่าสนใจได้ (เช่นคำตอบ CJam ชั้นนำในปัจจุบัน) สำหรับ do X ที่ไม่มี Y ข้อ จำกัด เกี่ยวกับสตริงย่อยดูเหมือนว่าจำเป็นเพื่อหลีกเลี่ยงการแก้ปัญหาเล็กน้อย (ควินิน)
Martin Ender

คำตอบ:


14

Javascript ES6, 44 ไบต์

$=_=>`$=(\^\_\^\)${($+'').slice(5)};$()`;$()

เอาท์พุท:

$=(^_^)=(\^\_\^\)${($+'').slice(5)};$()`;$()

ยังทำงานกอล์ฟอยู่ แต่ตอนนี้ใช้ได้ผล


12
+1 สำหรับการมีอีกหน้า:=_=
Cyoce

2
คุณทำไม่ได้$=_=>`(\^\_\^\)${($+'').slice(3)};$()`;$()(จริงๆแล้วดูดีกว่าเพราะตอนนี้ดูเหมือนว่าคุณกำลังตื่นขึ้นมานอนหน้า) :)
Martin Ender

10

เป็นกลุ่ม, 33 , 27 การกดแป้น

qqqqqS(<C-v>94_<C-v>94)q@q<esc>hh"qPq@q

โปรดทราบว่า<C-v>หมายถึง CTRL + V และเป็นไบต์0x16และเป็นตัวละครที่หลบหนีและเป็นไบต์<esc>0x1B

นี่แค่ใช้Golfรุ่นที่ได้รับการดัดแปลงเล็กน้อยของคุณเพื่อผลงานที่ยอดเยี่ยม! ตอบ.

ขาออก:

(^_^)S(^V94_^V94)q@q^[hh"qPq@q

นี้สามารถใช้ได้ตั้งแต่^Vเป็นวิธีที่เป็นกลุ่มเป็นตัวแทน<C-v>และเป็นกลุ่มทางหมาย^[<esc>

แนวคิดพื้นฐานคือเพียงป้อนข้อความ(^_^)ตามจุดโค้ดเพื่อให้เราสามารถหลีกเลี่ยงการใส่อักขระเหล่านั้นในซอร์สโค้ด ในโหมดแทรก<C-v>numberจะใส่อักขระ ASCII ของ "number" อย่างไรก็ตามเนื่องจากความท้าทายกล่าวว่า:

สตริง(^_^)หรือสตริงย่อยที่มีความยาว> = 2 จะต้องไม่ปรากฏในซอร์สโค้ดเริ่มต้นเฉพาะในเอาต์พุต

คำตอบนี้ละเมิดสิทธิมนุษยชน "substring" กฎโดยเฉพาะการเข้า codepoints ของ^ตัวอักษรและการป้อน(, _และ)โดยตรง

นี่คือ gif ที่ช่วยให้คุณเห็นวิธีแก้ปัญหานี้และวางซอร์สโค้ดและเอาท์พุทเคียงข้างกันเพื่อเปรียบเทียบ:

ป้อนคำอธิบายรูปภาพที่นี่


ส่อเสียด, ใช้ตัว^ควบคุมถ่าน ... +1
R


3

Python, 115 111 107 ไบต์

def f():s='def f():s=%r;print s%%s.replace(s[:5],"^".join("(_)"))';print s%s.replace(s[:5],"^".join("(_)"))

โทรf()และส่งออกคือ:

def f():s='(^_^)():s=%r;print s%%s.replace(s[:5],"^".join("(_)"))';print s%s.replace(s[:5],"^".join("(_)"))

ได้รับแรงบันดาลใจบางส่วนจากคำตอบของคำถามที่คล้ายกันนี้


ยินดีต้อนรับสู่เว็บไซต์!
DJMcMayhem



3

JavaScript (ES6), 91 ไบต์

มีคำตอบ JavaScript อยู่แล้ว แต่ไม่มีคำตอบ JS ที่อ่านไม่ได้:

a="a=%s;co%s.log(a,uneval(a),`(${'^'}_${'^'})`)";console.log(a,uneval(a),`(${'^'}_${'^'})`)

นี่ขึ้นอยู่กับคำตอบที่ไม่ใช่การอ่านของฉันที่มีต่อกอล์ฟคุณเป็นคำตอบที่ดีมาก! . เอาท์พุท

a="a=%s;co%s.log(a,uneval(a),`(${'^'}_${'^'})`)";co(^_^).log(a,uneval(a),`(${'^'}_${'^'})`)

สิ่งนี้สามารถปรับเปลี่ยนได้อย่างง่ายดายโดยการเลื่อนไปรอบที่สอง%sในสตริง ตัวอย่างเช่น,

a="a=%s;console.log(a,uneval(a),`($%s_${'^'})`)";console.log(a,uneval(a),`(${'^'}_${'^'})`)

เอาท์พุท

a="a=%s;console.log(a,uneval(a),`($%s_${'^'})`)";console.log(a,uneval(a),`($(^_^)_${'^'})`)

2

เยลลี่ , 22 ไบต์

“4094959441b³ỌØV”ṘVabc

มีจำหน่ายที่TryItOnline

ใช้quine ที่บรรจุได้ในตัว quine “ØV”ṘV
ส่วนabcท้ายเป็นเพียงฟิลเลอร์ที่จะเปลี่ยน
เป็นจำนวนเต็มเป็นฐาน 100 ส่งผลให้มีการ[40,94,95,94,41]
ปลดเปลื้องเป็นอักขระส่งผลให้ผลลัพธ์(^_^)
ทั้งหมดเป็นดังนี้“4094959441b³ỌØV”(^_^)


2

C # 5.0, 715 ไบต์

ฉันรู้ว่านี่เป็นเรื่องใหญ่ แค่ต้องการเพิ่มโซลูชัน C #

/*^()_*/using System.CodeDom;namespace System{class P{static void Main(){var b="/*^()_*/using System.CodeDom;namespace System{{class P{{static void Main(){{var b={0};var f=new string(new[]{{b[3],b[2],b[5],b[2],b[4]}});var w=new IO.StringWriter();CodeDom.Compiler.CodeDomProvider.CreateProvider(\"CSharp\").GenerateCodeFromExpression(new CodePrimitiveExpression(b),w,null);Console.WriteLine(b.Replace(\"[4]}}}}}}}}\",f),w);Console.ReadKey();}}}}}}";var f=new string(new[]{b[3],b[2],b[5],b[2],b[4]});var w=new IO.StringWriter();CodeDom.Compiler.CodeDomProvider.CreateProvider("CSharp").GenerateCodeFromExpression(new CodePrimitiveExpression(b),w,null);Console.WriteLine(b.Replace("[4]}}}}",f),w);Console.ReadKey();}}}

ผลลัพธ์คือ:

/*^()_*/using System.CodeDom;namespace System{class P{static void Main(){var b="/*^()_*/using System.CodeDom;namespace System{{class P{{static void Main(){{var b={0};var f=new string(new[]{{b[3],b[2],b[5],b[2],b[4]}});var w=new IO.StringWriter();CodeDom.Compiler.CodeDomProvider.CreateProvider(\"CSharp\").GenerateCodeFromExpression(new CodePrimitiveExpression(b),w,null);Console.WriteLine(b.Replace(\"[4]}}}}}}}}\",f),w);Console.ReadKey();}}}}}}";var f=new string(new[]{b[3],b[2],b[5],b[2],b[4]});var w=new IO.StringWriter();CodeDom.Compiler.CodeDomProvider.CreateProvider("CSharp").GenerateCodeFromExpression(new CodePrimitiveExpression(b),w,null);Console.WriteLine(b.Replace("(^_^)}}",f),w);Console.ReadKey();}}}

มีให้ที่ Ideone.com


1

MATL , 14 ไบต์

')_`_*i't&Dwqh

')_`_*i'(^_^)hผลิตส่งออก

ลองออนไลน์!

คำอธิบาย

')_`_*i'  % Push this string
t&D       % Duplicate and get string representation (i.e. enclose with quotes)
w         % Swap
q         % Subtract 1. Transforms ')_`_*i' into the code points of '(^_^)h'
h         % Concatenate. Automatically casts code points to chars. Implicitly display

1
ความพยายามครั้งแรกของฉันที่ควิน!
Luis Mendo

1

Bash, 178 ไบต์

Q='#(8_8)
printf "Q=\47"
echo -n "$Q"|sed -r "s~(_|\()8~\1^~g"
echo -e "\x27"
tail<<<"$Q" -n4'
printf "Q=\47"
echo -n "$Q"|sed -r "s~(_|\()8~\1^~g"
echo -e "\x27"
tail<<<"$Q" -n4

Pfff ฉันไม่เก่งในการควาน: / ข้อเสนอแนะใด ๆ ในการตีกอล์ฟยิ่งกว่ายินดีต้อนรับ! :-)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.