Kod źródłowy GO!

18

Wykorzystajmy rozszerzoną rzeczywistość do polowania na małe stworzenia ukryte w kodzie źródłowym. Napisz program quine, który wyprowadza własne źródło kodu, z wyjątkiem 5 kolejnych znaków, które zostaną zmodyfikowane i które wyświetlą PCG-mon :(^_^)

5 kolejnych znaków można umieścić w dowolnym miejscu kodu źródłowego (od pozycji 0do n-5, nbędący długością kodu źródłowego). Kod źródłowy musi mieć minimalną długość 5 znaków. Łańcuch (^_^)lub dowolny z jego podciągów o długości> = 2 nie może pojawiać się w początkowym kodzie źródłowym, a tylko w danych wyjściowych.

Przykład prawidłowego przesłania:

  • kod źródłowy my source code, wynikmy (^_^)e code

Nieważny:

  • kod źródłowy (^_^) copy;, wynik(^_^) (^_^)

Kryteria wygranej

Najkrótszy kod w bajtach wygrywa.

Arnaud
źródło
5
Nie jest to zbyt negatywne, ale jest to uogólniona quine i do x bez problemu. W języku z ogólną metodą quiningu jest to raczej nudne. Nie określiłeś również, co powinno się stać, jeśli Twój kod źródłowy ma 5 bajtów lub mniej.
FryAmTheEggman
@Fry Myślę, że nie można wyświetlić 5 znaków (^_^)z kodem źródłowym zawierającym mniej niż 5 znaków? może ze specjalnym kodowaniem ...
Arnaud,
3
Chociaż nie jestem pewien, czy jest to możliwe w tym przypadku, dość proste jest stworzenie programu, który drukuje więcej bajtów niż zawiera. Na przykład program Pyth Ggeneruje dane wyjściowe abcdefghijklmnopqrstuvwxyz.
FryAmTheEggman
3
Polecam, aby programy miały co najmniej 6 znaków, tak aby nikt nie próbował, powiedzmy, Bubblegum .
Sp3000,
2
@FryAmTheEggman Granica między nudnym a interesującym uogólnionym quine'em jest dość dobra. Moja meta odpowiedź odnosi się głównie do quinów, w których jedynym realnym rozwiązaniem jest uzyskanie ciągu reprezentującego cały kod źródłowy, a następnie przetworzenie tego ciągu. Jeśli istnieją rozwiązania, które mogą w pewnym momencie uciec bez konstruowania pełnego kodu źródłowego, myślę, że zwykle pozwala to już na ciekawe rozwiązania (np. Obecnie wiodącą odpowiedź CJam). Jeśli chodzi o do X bez Y, ograniczenie podciągów wydaje się konieczne, aby uniknąć trywialnych (quine) rozwiązań.
Martin Ender

Odpowiedzi:

14

JavaScript ES6, 44 bajty

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

Wynik:

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

Nadal pracuję nad golfem, ale na razie działa.

Mama Fun Roll
źródło
12
+1 za posiadanie innej twarzy:=_=
Cyoce,
2
Nie możesz tego zrobić $=_=>`(\^\_\^\)${($+'').slice(3)};$()`;$()(w rzeczywistości wygląda to jeszcze ładniej, ponieważ teraz wygląda na to, że budzisz się śpiącą twarz). :)
Martin Ender
10

Vim, 33 , 27 klawiszy

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

Zauważ, że <C-v>oznacza ctrl + v i jest bajtem 0x16i <esc>jest znakiem ucieczki i jest bajtem 0x1B.

To po prostu używa nieco zmodyfikowanej wersji mojego Golfa, quine dla wielkiego dobra! odpowiedź.

Wyjścia:

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

Jest to ważne, ponieważ ^Vjest sposobem, w jaki reprezentuje vim <C-v>i ^[jest sposobem, w jaki reprezentuje vim <esc>.

Podstawową ideą jest po prostu wprowadzenie tekstu (^_^)według jego punktów kodowych, abyśmy mogli uniknąć umieszczenia tych znaków w kodzie źródłowym. W trybie <C-v>numberwstawiania wstawi znak ASCII „liczby”. Jednak ponieważ wyzwanie mówi:

Łańcuch (^_^)lub dowolny z jego podciągów o długości> = 2 nie może pojawiać się w początkowym kodzie źródłowym, a tylko w danych wyjściowych.

Nadużywa tej odpowiedzi na „ciąg” regułę tylko wprowadzając codepoints rodzaje ^znaków i wejściem (, _i )bezpośrednio.

Oto gif, który pozwala zobaczyć to rozwiązanie w akcji, i porównuje kod źródłowy i dane wyjściowe obok siebie:

wprowadź opis zdjęcia tutaj

DJMcMayhem
źródło
dość podstępny, używając ^znaku kontrolnego ... +1
Rɪᴋᴇʀ
7

CJam , 13 11 bajtów

"(_)"
_p'^*

Tłumacz online (-2 bajty dzięki @MartinEnder) .

"(_)"             Push string
      _p          Duplicate and print repr with newline
        '^*       Join string with '^'
Sp3000
źródło
3

Python, 115 111 107 bajtów

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

Zadzwoń, f()a wynikiem będzie:

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

Zainspirowany częściowo odpowiedzią na podobne pytanie .

SCB
źródło
Witamy na stronie!
DJMcMayhem
3

CJAM, 16 15 bajtów

Wypróbuj tutaj .

{"^(_)"(*}_~sss
Arnaud
źródło
3

Go (golang), 131 bajtów

To wyzwanie musi mieć odpowiedź w 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)}

Wypróbuj online!


źródło
3

JavaScript (ES6), 91 bajtów

Jest już odpowiedź JavaScript, ale nie ma odpowiedzi JS, która nie czyta źródła:

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

Jest to oparte na mojej odpowiedzi na pytanie, że nie czytam kodu źródłowego, dla ciebie golf dla dobrego dobra! . Wyjścia

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

Można to łatwo zmienić, przesuwając się po drugim %sw ciągu. Na przykład,

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

wyjścia

a="a=%s;console.log(a,uneval(a),`($%s_${'^'})`)";console.log(a,uneval(a),`($(^_^)_${'^'})`)
ETHprodukcje
źródło
2

Galaretka , 22 bajty

“4094959441b³ỌØV”ṘVabc

Dostępne w TryItOnline

Korzysta z wbudowanej quine zdolnej do załadunku “ØV”ṘV
Na abckońcu jest tylko wypełniacz do zastąpienia
przekształca liczbę całkowitą w bazę 100, co powoduje [40,94,95,94,41]
rzutowanie na znaki, co powoduje, (^_^)
że cały wynik jest“4094959441b³ỌØV”(^_^)

Jonathan Allan
źródło
2

C # 5.0, 715 bajtów

Wiem, to jest ogromne. Chciałem tylko dodać rozwiązanie 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();}}}

Dane wyjściowe to:

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

Dostępne na Ideone.com

cyber_zodiac
źródło
1

MATL , 14 bajtów

')_`_*i't&Dwqh

Daje wynik ')_`_*i'(^_^)h.

Wypróbuj online!

Wyjaśnienie

')_`_*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
źródło
1
Moja pierwsza próba na quine!
Luis Mendo
1

Bash, 178 bajtów

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, nie jestem dobry w quinesach: / Każda sugestia, aby zagrać w golfa jest więcej niż mile widziana! :-)

Master_ex
źródło