증강 현실을 사용하여 소스 코드에 숨겨진 작은 생물을 사냥합시다. 수정되고 PCG-mon을 표시하는 5 개의 연속 문자를 제외하고 자체 코드 소스를 출력하는 quine 프로그램을 작성하십시오 .(^_^)
5 개의 연속 문자를 소스 코드의 어느 위치 에나 위치시킬 수 있습니다 (위치에서 0
까지 n-5
, n
소스 코드 길이 임). 소스 코드의 길이는 5 자 이상이어야합니다. (^_^)
길이가 2보다 큰 문자열 또는 그 하위 문자열은 초기 소스 코드에 나타나지 않아야하며 출력에만 나타나야합니다.
유효한 제출 예 :
- 소스 코드
my source code
, 출력my (^_^)e code
유효하지 않습니다 :
- 소스 코드
(^_^) copy;
, 출력(^_^) (^_^)
우승 기준
바이트 단위의 가장 짧은 코드가 이깁니다.
답변
자바 스크립트 ES6, 44 바이트
$=_=>`$=(\^\_\^\)${($+'').slice(5)};$()`;$()
산출:
$=(^_^)=(\^\_\^\)${($+'').slice(5)};$()`;$()
여전히 골프 작업을하고 있지만 지금은 효과가 있습니다.
답변
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입니다.
답변
CJam , 13 11 바이트
"(_)"
_p'^*
온라인 통역사 (@MartinEnder 덕분에 2 바이트) .
"(_)" Push string
_p Duplicate and print repr with newline
'^* Join string with '^'
답변
파이썬 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("(_)"))
비슷한 질문에 대한이 답변 에서 부분적으로 영감을 얻었습니다 .
답변
답변
Go (golang), 131 바이트
이 도전은 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)}
답변
자바 스크립트 (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),`($(^_^)_${'^'})`)