Mã nguồn GO!


18

Chúng ta hãy sử dụng thực tế mở rộng để săn các sinh vật nhỏ ẩn trong mã nguồn. Viết chương trình quine xuất ra nguồn mã của riêng nó, ngoại trừ 5 ký tự liên tiếp sẽ được sửa đổi và sẽ hiển thị PCG-mon :(^_^)

5 ký tự liên tiếp có thể được định vị ở bất cứ đâu trong mã nguồn (từ vị trí 0đến n-5, nlà độ dài mã nguồn). Mã nguồn phải có độ dài tối thiểu 5 ký tự. Chuỗi (^_^)hoặc bất kỳ chuỗi con nào có độ dài> = 2 không được xuất hiện trong mã nguồn ban đầu, chỉ trong đầu ra.

Ví dụ về đệ trình hợp lệ:

  • mã nguồn my source code, đầu ramy (^_^)e code

Không hợp lệ:

  • mã nguồn (^_^) copy;, đầu ra(^_^) (^_^)

Tiêu chí chiến thắng

Mã ngắn nhất tính bằng byte thắng.


5
Không được quá tiêu cực, nhưng đây là một câu hỏi tổng quátlàm x mà không có vấn đề y . Trong một ngôn ngữ với một phương pháp phân loại chung, điều này khá buồn tẻ. Bạn cũng chưa chỉ định điều gì sẽ xảy ra nếu mã nguồn của bạn từ 5 byte trở xuống.
FryAmTheEggman

@Fry Tôi không nghĩ có thể hiển thị 5 ký tự (^_^)với mã nguồn có ít hơn 5 ký tự? có thể với mã hóa cụ thể ...
Arnaud

3
Mặc dù tôi không chắc chắn rằng có thể trong trường hợp này, nhưng việc tạo ra một chương trình in nhiều byte hơn so với nó là khá đơn giản. Ví dụ, chương trình Pyth Gtạo đầu ra abcdefghijklmnopqrstuvwxyz.
FryAmTheEggman

3
Tôi khuyên các chương trình nên có ít nhất 6 ký tự, vì vậy không ai cố gắng, giả sử, Bubblegum .
Sp3000

2
@FryAmTheEggman Dòng giữa một quine buồn tẻ và một khái quát tổng quát thú vị là khá tốt. Câu trả lời meta của tôi chủ yếu đề cập đến các câu hỏi trong đó giải pháp khả thi duy nhất là lấy một chuỗi đại diện cho toàn bộ mã nguồn và sau đó xử lý chuỗi đó. Nếu có những giải pháp có thể thoát khỏi mà không cần xây dựng mã nguồn đầy đủ tại một số điểm, tôi nghĩ rằng điều đó thường đã cho phép các giải pháp thú vị (ví dụ: câu trả lời hiện tại của CJam). Đối với do X không có Y, việc hạn chế các chuỗi con dường như là cần thiết để tránh các giải pháp tầm thường (quine).
Martin Ender

Câu trả lời:


14

Javascript ES6, 44 byte

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

Đầu ra:

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

Vẫn làm việc trên sân golf, nhưng bây giờ nó hoạt động.


12
+1 để có khuôn mặt khác:=_=
Cyoce

2
Bạn không thể làm điều đó $=_=>`(\^\_\^\)${($+'').slice(3)};$()`;$()(nó thực sự trông còn đẹp hơn bởi vì bây giờ có vẻ như bạn đang thức dậy với khuôn mặt đang ngủ). :)
Martin Ender

10

Vim, 33 , 27 tổ hợp phím

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

Lưu ý rằng <C-v>có nghĩa là ctrl + v, và là byte 0x16<esc>là ký tự thoát và là byte 0x1B.

Điều này chỉ sử dụng một phiên bản sửa đổi một chút của Golf của tôi , bạn rất tuyệt vời! câu trả lời.

Đầu ra:

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

Điều này là hợp lệ vì ^Vcách vim đại diện <C-v>^[là cách vim đại diện <esc>.

Ý tưởng cơ bản, chỉ là nhập văn bản (^_^)theo các điểm mã của nó để chúng ta có thể tránh đưa các ký tự đó vào mã nguồn. Trong chế độ chèn, <C-v>numbersẽ chèn ký tự ASCII của "số". Tuy nhiên, vì thử thách nói:

Chuỗi (^_^)hoặc bất kỳ chuỗi con nào có độ dài> = 2 không được xuất hiện trong mã nguồn ban đầu, chỉ trong đầu ra.

Câu trả lời này lạm dụng các "substring" quy tắc bằng cách chỉ vào codepoints của ^nhân vật, và nhập (, _)trực tiếp.

Đây là một gif cho phép bạn thấy giải pháp này hoạt động và đặt mã nguồn và đầu ra cạnh nhau để so sánh:

nhập mô tả hình ảnh ở đây


khá lén lút, sử dụng ^điều khiển char ... +1
Rɪᴋᴇʀ


3

Python, 115 111 107 byte

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

Gọi f()và đầu ra là:

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

Lấy cảm hứng một phần bởi câu trả lời này cho một câu hỏi tương tự .


Chào mừng đến với trang web!
DJMcMayhem


3

Đi (golang), 131 byte

Thử thách này phải có câu trả lời trong Go!

package main;import"fmt";func main(){a:="package main;import\"fmt\";func(%c_%[1]c)(){a:=%q;fmt.Printf(a,94,a)}";fmt.Printf(a,94,a)}

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


3

JavaScript (ES6), 91 byte

Đã có câu trả lời JavaScript, nhưng không có câu trả lời JS không đọc nguồn:

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

Điều này dựa trên câu trả lời không đọc nguồn của tôi cho Golf bạn một câu hỏi rất hay! . Đầu ra

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

Điều này có thể dễ dàng được sửa đổi bằng cách di chuyển xung quanh thứ hai %strong chuỗi. Ví dụ,

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

đầu ra

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

2

Thạch , 22 byte

“4094959441b³ỌØV”ṘVabc

Có sẵn tại TryItOnline

Sử dụng quine có khả năng tải trọng tích hợp“ØV”ṘV
abcthể thay thế phần cuối chỉ là phụ được
chuyển đổi số nguyên thành cơ sở 100, dẫn đến [40,94,95,94,41]
phôi thành ký tự, kết quả (^_^)
là toàn bộ kết quả là“4094959441b³ỌØV”(^_^)


2

C # 5.0, 715 byte

Tôi biết, điều này là rất lớn. Chỉ muốn thêm một giải pháp 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();}}}

Đầu ra là:

/*^()_*/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();}}}

Có sẵn tại Ideone.com


1

MATL , 14 byte

')_`_*i't&Dwqh

Sản xuất đầu ra ')_`_*i'(^_^)h.

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

Giải trình

')_`_*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
Nỗ lực đầu tiên của tôi tại một quine!
Luis Mendo

1

Bash, 178 byte

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, tôi không giỏi về quines: / Bất kỳ đề nghị nào để chơi golf nó đều được chào đón nhiều hơn! :-)

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.