Kaynak kodu GO!


18

Kaynak kodunda gizlenmiş küçük yaratıkları avlamak için artırılmış gerçeklik kullanalım. Değiştirilecek ve bir PCG-mon görüntüleyecek 5 ardışık karakter hariç, kendi kod kaynağını çıkaran bir quine programı yazın :(^_^)

Birbirini takip eden 5 karakterleri (konumdan kaynak kodu herhangi bir yerde konumlandırılabilir 0için n-5, nkaynak kod uzunluğu olmak üzere). Kaynak kodun uzunluğu en az 5 karakter olmalıdır. Dize (^_^)veya uzunluğu = = 2 olan herhangi bir alt dizesi başlangıç ​​kaynak kodunda değil, yalnızca çıktıda görünmelidir.

Geçerli başvuru örneği:

  • kaynak kodu my source code, çıktımy (^_^)e code

Geçersiz:

  • kaynak kodu (^_^) copy;, çıktı(^_^) (^_^)

Kazanma kriterleri

Bayt cinsinden en kısa kod kazanır.


5
Aşırı negatif olmamak , ama bu genelleştirilmiş bir quine ve y problemsiz bir do x . Genel bir sorgulama yöntemi olan bir dilde, bu oldukça sıkıcıdır. Kaynak kodunuz 5 bayt veya daha azsa ne olması gerektiğini de belirtmediniz.
FryAmTheEggman

@Fry (^_^)Kaynak kodlu 5 karakteri 5 karakterden daha az olarak görüntülemek mümkün değil mi? belki belirli kodlamayla ...
Arnaud

3
Bu durumda mümkün olduğundan emin olmasam da, içerdiğinden daha fazla bayt basan bir program oluşturmak oldukça önemsiz. Örneğin, Pyth programı Gçıktıyı üretir abcdefghijklmnopqrstuvwxyz.
FryAmTheEggman

3
Programların en az 6 karakter olmasını tavsiye ederim, sadece kimse Bubblegum'u denemez .
Sp3000

2
@FryAmTheEggman Donuk ve ilginç bir genelleştirilmiş kine arasındaki çizgi gayet iyi. Benim meta cevabım çoğunlukla tek geçerli çözümün tüm kaynak kodunu temsil eden bir dize elde etmek ve daha sonra bu dizeyi işlemek olduğu sorgulara atıfta bulunmaktır. Bir noktada tam kaynak kodunu oluşturmadan kurtulabilecek çözümler varsa, genellikle ilginç çözümlere izin verdiğini düşünüyorum (örneğin, şu anda önde gelen CJam cevabı). Y içermeyen do X'e gelince, önemsiz (quine) çözümlerden kaçınmak için alt dizeler üzerindeki kısıtlama gerekli görünmektedir.
Martin Ender

Yanıtlar:


14

Javascript ES6, 44 bayt

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

Çıktı:

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

Hala golf üzerinde çalışıyor, ama şimdilik çalışıyor.


12
Başka bir yüze sahip olmak için +1:=_=
Cyoce

2
Yapamaz mısın $=_=>`(\^\_\^\)${($+'').slice(3)};$()`;$()(aslında daha da güzel görünüyor çünkü şimdi uyku yüzünü uyandırıyorsun gibi görünüyor). :)
Martin Ender

10

Vim, 33 , 27 tuş vuruşları

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

O Not <C-v>araçlarının + v ctrl ve bayt olduğunu 0x16ve <esc>kaçış karakteridir ve Bayt'dır 0x1B.

Bu sadece benim Golf biraz değiştirilmiş bir sürümünü kullanır büyük bir quine için iyi! Cevap.

Çıktılar:

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

Çünkü bu geçerlidir ^Vvim temsil yoludur <C-v>ve ^[yolu vim temsil olduğunu <esc>.

Temel fikir, metni (^_^)kod noktalarına göre girmektir, böylece bu karakterleri kaynak koduna koymaktan kaçınabiliriz. Ekleme modunda, <C-v>number"sayı" nın ASCII karakterini ekler. Ancak, meydan okuma dediği için:

Dize (^_^)veya uzunluğu = = 2 olan herhangi bir alt dizesi başlangıç ​​kaynak kodunda değil, yalnızca çıktıda görünmelidir.

Sadece codepoints girerek Bu cevap kötüye "alt dize" kuralını ^karakterleri ve girdikten (, _ve )doğrudan.

İşte bu çözümü eylemde görmenizi sağlayan ve karşılaştırma için kaynak kodunu ve çıktıyı yan yana koyan bir gif:

resim açıklamasını buraya girin


oldukça sinsi, ^kontrol karakterini kullanarak ... +1
Rɪᴋᴇʀ


3

Python, 115 111 107 bayt

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

Çağrı f()ve çıkış:

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

Kısmen benzer bir soruya verilen bu cevaptan esinlenmiştir .


Siteye Hoşgeldiniz!
DJMcMayhem


3

Go (golang), 131 bayt

Bu mücadelenin Go'da bir cevabı olmalı!

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)}

Çevrimiçi deneyin!


3

JavaScript (ES6), 91 bayt

Zaten bir JavaScript yanıtı var, ancak kaynak okumayan bir JS yanıtı yok:

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

Bu Golf size kaynak okumak için büyük cevap iyi bir quine dayanmaktadır ! . çıktılar

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

Bu %s, dizedeki saniye etrafında hareket ederek kolayca değiştirilebilir . Örneğin,

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

çıktılar

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

2

Jöle , 22 bayt

“4094959441b³ỌØV”ṘVabc

TryItOnline'da mevcut

Yerleşik kullanır yükü yetenekli Quine'a ucunda yerini olmak sadece dolgu maddesidir sonuçlanan tabanın 100 içine tamsayı dönüştürür sonuçlanan karakter atmalarını bütün sonucudur So“ØV”ṘV
abc
[40,94,95,94,41]
(^_^)
“4094959441b³ỌØV”(^_^)


2

C # 5.0, 715 bayt

Biliyorum, bu çok büyük. Sadece bir C # çözümü eklemek istedim.

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

Çıktı:

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

Mevcut Ideone.com at


1

MATL , 14 bayt

')_`_*i't&Dwqh

Çıktı üretir ')_`_*i'(^_^)h.

Çevrimiçi deneyin!

açıklama

')_`_*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
Bir quine ilk denemem!
Luis Mendo

1

Bash, 178 bayt

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, quines iyi değilim: / Golf daha herhangi bir öneri daha hoş geldiniz! :-)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.