Kode sumber GO!

18

Mari kita gunakan augmented reality untuk berburu makhluk kecil yang tersembunyi di kode sumber. Tulis program quine yang mengeluarkan sumber kode sendiri, kecuali untuk 5 karakter berturut-turut yang akan dimodifikasi dan yang akan menampilkan PCG-mon :(^_^)

5 karakter berturut-turut dapat diposisikan di mana saja dalam kode sumber (dari posisi 0ke n-5, nmenjadi panjang kode sumber). Kode sumber harus memiliki panjang minimum 5 karakter. String (^_^)atau salah satu dari substring of length> = 2 tidak boleh muncul dalam kode sumber awal, hanya dalam output.

Contoh pengiriman yang valid:

  • kode sumber my source code, keluaranmy (^_^)e code

Tidak valid:

  • kode sumber (^_^) copy;, keluaran(^_^) (^_^)

Kriteria menang

Kode terpendek dalam byte menang.

Arnaud
sumber
5
Tidak terlalu negatif, tapi ini adalah quine umum dan do x tanpa masalah y . Dalam bahasa dengan metode quining umum, ini agak membosankan. Anda juga belum menentukan apa yang harus terjadi jika kode sumber Anda 5 byte atau kurang.
FryAmTheEggman
@Fry Saya pikir tidak mungkin untuk menampilkan 5 karakter (^_^)dengan kode sumber dengan kurang dari 5 karakter? mungkin dengan pengkodean spesifik ...
Arnaud
3
Meskipun saya tidak yakin apakah itu mungkin dalam kasus ini, agak sepele untuk membuat program yang mencetak lebih banyak byte daripada yang dikandungnya. Sebagai contoh, program Pyth Gmenghasilkan output abcdefghijklmnopqrstuvwxyz.
FryAmTheEggman
3
Saya akan merekomendasikan bahwa program harus setidaknya 6 karakter, supaya tidak ada yang mencoba, katakanlah, Bubblegum .
Sp3000
2
@FryAmTheEggman Garis antara kusam dan quine umum yang menarik agak baik. Jawaban meta saya sebagian besar merujuk pada quine di mana satu-satunya solusi yang layak adalah untuk mendapatkan string yang mewakili seluruh kode sumber dan kemudian memproses string itu. Jika ada solusi yang bisa lolos tanpa membangun kode sumber lengkap di beberapa titik, saya pikir itu biasanya sudah memungkinkan untuk solusi yang menarik (misalnya jawaban CJam yang saat ini memimpin). Sedangkan untuk do X tanpa Y, pembatasan pada substring tampaknya perlu untuk menghindari solusi sepele (quine).
Martin Ender

Jawaban:

14

Javascript ES6, 44 byte

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

Keluaran:

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

Masih bekerja untuk bermain golf, tetapi itu berfungsi untuk saat ini.

Mama Fun Roll
sumber
12
+1 untuk memiliki wajah lain:=_=
Cyoce
2
Tidak bisakah Anda melakukannya $=_=>`(\^\_\^\)${($+'').slice(3)};$()`;$()(itu sebenarnya terlihat lebih baik karena sekarang sepertinya Anda sedang bangun tidur). :)
Martin Ender
10

Vim, 33 , 27 penekanan tombol

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

Perhatikan itu <C-v>berarti ctrl + v, dan byte 0x16dan <esc>adalah karakter pelarian, dan byte 0x1B.

Ini hanya menggunakan versi Golf saya yang sedikit dimodifikasi agar Anda menjadi yang terbaik! menjawab.

Output:

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

Ini berlaku karena ^Vcara vim mewakili <C-v>dan ^[cara vim mewakili <esc>.

Ide dasarnya, hanya memasukkan teks (^_^)dengan titik-titik kodenya sehingga kita dapat menghindari menempatkan karakter-karakter itu dalam kode sumber. Dalam mode insert, <C-v>numberakan memasukkan karakter ASCII dari "angka". Namun, karena tantangannya mengatakan:

String (^_^)atau salah satu dari substring of length> = 2 tidak boleh muncul dalam kode sumber awal, hanya dalam output.

Jawaban ini pelanggaran yang "substring" pemerintahan oleh hanya memasukkan codepoints dari ^karakter, dan masuk (, _dan )langsung.

Berikut adalah gif yang memungkinkan Anda melihat solusi ini dalam aksi, dan menempatkan kode sumber dan output secara berdampingan untuk perbandingan:

masukkan deskripsi gambar di sini

DJMcMayhem
sumber
cukup licik, menggunakan karakter ^kontrol ... +1
R
7

CJam , 13 11 byte

"(_)"
_p'^*

Penerjemah online (-2 bytes berkat @MartinEnder) .

"(_)"             Push string
      _p          Duplicate and print repr with newline
        '^*       Join string with '^'
Sp3000
sumber
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("(_)"))

Panggilan f()dan hasilnya adalah:

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

Terinspirasi sebagian oleh jawaban ini untuk pertanyaan serupa .

SCB
sumber
Selamat datang di situs ini!
DJMcMayhem
3

CJAM, 16 15 byte

Coba di sini .

{"^(_)"(*}_~sss
Arnaud
sumber
3

Go (golang), 131 byte

Tantangan ini harus ada jawabannya di 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)}

Cobalah online!

CryptoBob
sumber
3

JavaScript (ES6), 91 byte

Sudah ada jawaban JavaScript, tetapi tidak ada jawaban JS yang tidak membaca sumber:

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

Ini didasarkan pada jawaban non-sumber saya membaca untuk Golf Anda quine untuk kebaikan besar! . Keluaran

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

Ini dapat dengan mudah dimodifikasi dengan memindahkan yang kedua %sdalam string. Sebagai contoh,

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

output

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

Jelly , 22 byte

“4094959441b³ỌØV”ṘVabc

Tersedia di TryItOnline

Menggunakan built-in payload mampu quine “ØV”ṘV
The abcpada akhirnya hanya filler yang akan diganti
mengkonversi integer menjadi basis 100, menghasilkan [40,94,95,94,41]
gips ke karakter, menghasilkan (^_^)
Jadi seluruh hasil adalah“4094959441b³ỌØV”(^_^)

Jonathan Allan
sumber
2

C # 5.0, 715 byte

Saya tahu, ini sangat besar. Hanya ingin menambahkan solusi 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();}}}

Outputnya adalah:

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

Tersedia di Ideone.com

cyber_zodiac
sumber
1

MATL , 14 byte

')_`_*i't&Dwqh

Menghasilkan output ')_`_*i'(^_^)h .

Cobalah online!

Penjelasan

')_`_*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
Luis Mendo
sumber
1
Usaha pertamaku di 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, saya tidak pandai quines: / Setiap saran untuk golf lebih dari menyambut! :-)

Master_ex
sumber