소스 코드 GO!


18

증강 현실을 사용하여 소스 코드에 숨겨진 작은 생물을 사냥합시다. 수정되고 PCG-mon을 표시하는 5 개의 연속 문자를 제외하고 자체 코드 소스를 출력하는 quine 프로그램을 작성하십시오 .(^_^)

5 개의 연속 문자를 소스 코드의 어느 위치 에나 위치시킬 수 있습니다 (위치에서 0까지 n-5, n소스 코드 길이 임). 소스 코드의 길이는 5 자 이상이어야합니다. (^_^)길이가 2보다 큰 문자열 또는 그 하위 문자열은 초기 소스 코드에 나타나지 않아야하며 출력에만 나타나야합니다.

유효한 제출 예 :

  • 소스 코드 my source code, 출력my (^_^)e code

유효하지 않습니다 :

  • 소스 코드 (^_^) copy;, 출력(^_^) (^_^)

우승 기준

바이트 단위의 가장 짧은 코드가 이깁니다.


5
지나치게 부정적이지는 않지만 이것은 일반적인 문제 이며 y 문제가 없는 do x 입니다. 일반적인 quining 방법을 사용하는 언어에서는 다소 둔합니다. 소스 코드가 5 바이트 이하인 경우 수행 할 작업도 지정하지 않았습니다.
FryAmTheEggman

@ 튀김 나는 5 자 (^_^)미만의 소스 코드로 5자를 표시 할 수 없다고 생각 합니까? 아마 특정 인코딩으로 ...
Arnaud

3
이 경우에는 가능한지 확실하지 않지만 포함 된 것보다 많은 바이트를 인쇄하는 프로그램을 만드는 것이 쉽지 않습니다. 예를 들어, Pyth 프로그램 G은 출력을 생성합니다 abcdefghijklmnopqrstuvwxyz.
FryAmTheEggman

3
프로그램은 6 자 이상이어야하므로 Bubblegum 과 같은 사람은 시도하지 마십시오 .
Sp3000

2
@FryAmTheEggman 둔하고 흥미로운 일반화 된 퀴인 사이의 선은 다소 괜찮습니다. 내 메타 답변은 대부분 유일한 해결책은 전체 소스 코드를 나타내는 문자열을 얻은 다음 해당 문자열을 처리하는 유일한 방법입니다. 어떤 시점에서 전체 소스 코드를 구성하지 않고 벗어날 수있는 솔루션이 있다면, 일반적으로 흥미로운 솔루션 (예 : 현재 최고의 CJam 답변)을 허용한다고 생각합니다. Y가없는 do X에 관해서는, 사소한 (퀸) 솔루션을 피하기 위해 부분 문자열에 대한 제한이 필요한 것 같습니다.
Martin Ender

답변:


14

자바 스크립트 ES6, 44 바이트

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

산출:

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

여전히 골프 작업을하고 있지만 지금은 효과가 있습니다.


12
다른 얼굴을 가진 +1 :=_=
Cyoce

2
당신은 할 수 없습니다 $=_=>`(\^\_\^\)${($+'').slice(3)};$()`;$()(지금은 잠자는 얼굴을 깨우는 것처럼 보이기 때문에 실제로 더 멋지게 보입니다). :)
Martin Ender

10

Vim, 33 , 27 키 스트로크

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

<C-v>ctrl + v 를 의미하며, 바이트 0x16이며 <esc>이스케이프 문자이며 바이트 0x1B입니다.

이것은 단지 내 골프 의 약간 수정 된 버전을 사용합니다 . 대답.

출력 :

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

때문에 유효 ^V정력이 나타내는 방법 <C-v>^[방식 정력이 나타내는입니다 <esc>.

기본 아이디어 (^_^)는 코드 포인트별로 텍스트를 입력하여 해당 문자를 소스 코드에 넣지 않도록하는 것입니다. 삽입 모드에서 <C-v>number"숫자"의 ASCII 문자를 삽입합니다. 그러나 도전 과제는 다음과 같이 말합니다.

(^_^)길이가 2보다 큰 문자열 또는 그 하위 문자열은 초기 소스 코드에 나타나지 않아야하며 출력에만 나타나야합니다.

단지의 코드 포인트 입력하여이 답변 남용은 "하위 문자열"규칙을 ^문자 및 입력 (, _)직접.

다음은이 솔루션이 실제로 작동하는 것을 보여주고 비교할 수 있도록 소스 코드와 출력을 나란히 배치하는 gif입니다.

여기에 이미지 설명을 입력하십시오


^제어 문자를 사용하여 꽤 교활한 ... +1
Rɪᴋᴇʀ

7

CJam , 13 11 바이트

"(_)"
_p'^*

온라인 통역사 (@MartinEnder 덕분에 2 바이트) .

"(_)"             Push string
      _p          Duplicate and print repr with newline
        '^*       Join string with '^'

3

파이썬 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

자바 스크립트 (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 끝에 교체로 바로 필러 의 결과로,베이스 (100)에 정수 변환 의 결과로, 문자 캐스트 전체 결과는 그래서“ØV”ṘV
abc
[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
Quiine에서의 나의 첫번째 시도!
Luis Mendo

1

배쉬, 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, 나는 quines에 좋지 않다 : / 골프를 더 제안하는 것은 환영하는 것 이상이다! :-)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.