태그 보관물: quine

quine

코드의 첫 N자를 인쇄하십시오 작성해야 합니다. 경우 N당신이 주기적으로 출력에게 코드를

양의 정수 N를 입력으로 받아 N코드 의 첫 문자를 인쇄 하는 프로그램이나 함수를 작성해야 합니다. 경우 N당신이 주기적으로 출력에게 코드를 계속해야 코드의 길이보다 더 크다.

어떤 방식 으로든 소스 코드를 읽거나 파일, stdio 등에서 읽을 수 없습니다.

(코드가 있다고 가정 yourcode)

입력 => 출력 :

5=> yourc
10=> yourcodeyo
22=>yourcodeyourcodeyour

설명

프로그램의 길이는 1 바이트 이상이어야합니다.



답변

파이썬 2, 61 바이트

def f(n):a='def f(n):a=%r;print(a%%a*n)[:n]';print(a%a*n)[:n]

온라인으로 사용해보십시오!


답변

> <> , 49 바이트

'3d*}r0ff+0i:&0(?.~~a*&"0"-+60.&~:?!;1-&:o}&" "0.

코드의 절반은 입력을 문자열에서 int로 변환합니다. STDIN에서 읽은 단일 문자의 코드 포인트를 대신 사용할 수 있다면이 프로그램은 21 바이트에서 훨씬 짧습니다.

'3d*}ri:?!;1-&:o}&60.

설명

설명을 위해 두 번째 프로그램을 사용하겠습니다.

'닫는 따옴표가 발견 될 때까지 모든 문자를 밀어서 문자열 구문 분석을 시작합니다. 나머지 줄에는 '따옴표 가 없으므로 이니셜을 제외한 모든 문자 '가 스택에 푸시됩니다.

그러나> <>는 토 로이드 형 2D 언어이므로 줄이 끝나고 나면 명령 포인터가 시작 부분으로 돌아가서 '다시 치고 문자열 구문 분석을 중지 합니다. 결과적으로 초기 견적을 제외한 필요한 모든 것을 푸시했습니다.

3d*}ri:0=?;1-&:o}&60.

'ASCII 39이므로을 눌러 초기 견적을 푸시 3d* = 3*13 = 39합니다. 그런 다음 스택을 오른쪽 ( })과 반대로 ( r) 이동하여

.06&}o:&-1;?=0:ir}*d3'

이제 인쇄를 시작했습니다. i입력 문자로 읽지 만> <> 문자는 기본적으로 정수입니다. 첫 번째 프로그램에서는 iSTDIN의 숫자 문자열을 정수로 변환하는 루프로 바뀝니다.

그런 다음 다음 루프를 실행하여 첫 번째 N 문자를 인쇄합니다.

:?!;               If the top of the stack (N) is 0, then terminate
                   Otherwise...
1-                 Subtract 1 from N
&                  Move N to the register temporarily
:o                 Output the next char in the program
}                  Shift the stack right
&                  Put N back on the stack
60.                Repeat loop by jumping back to the first :


답변

CJam, 34 17 16 바이트

이것은 많은 골프를하실 수 있습니다 ..

{`"_~"+ri_@*<}_~

코드 확장 :

{`"_~"+ri_@*<}_~
{            }_~      "Put this code block on stack, take a copy and execute the copy";
 `                    "When executed, this block will the top element on stack to a string";
  "_~"                "Then put this string on stack";
      +               "Concat it to the the previous string on stack which ` created";
       ri             "Read an integer from STDIN";
         _@           "Copy the integer and put the concatinated string on top of stack";
           *          "Repeat the string input number of times";
            <         "Take the first input number of characters from the repeated string";

마지막으로 스택의 모든 내용이 STDOUT에 자동으로 인쇄됩니다.

여기에서 온라인으로 사용해보십시오


답변

파이썬 2, 117 바이트

b=input();a=lambda x:(b*(2*(x+chr(34))+')'))[:b];print a("b=input();a=lambda x:(b*(2*(x+chr(34))+')'))[:b];print a(")

생활 팁 : 실행하지 마십시오 list(itertools.cycle(x)). 어떤 이유로, 나는 왜 인터프리터와 충돌하는지 상상할 수 없다.


답변

자바 스크립트 (ES6), 65 52 50 47 41 39

q=n=>('q='+q).repeat(n/39+1).slice(0,n)

ES6 repeat()을 사용 하여 코드를 복제 한 다음 슬라이스합니다. 하드 코드 된 길이를 사용합니다.


구 버전 (50) :

q=n=>n>(l=(t='q='+q).length)?t+q(n-l):t.slice(0,n)

q단일 매개 변수를 사용 하여 함수 를 작성합니다.

함수 텍스트를 문자열 화하고 n텍스트 길이보다 길면 재귀 적으로 함수를 호출합니다 . 그렇지 않으면 텍스트의 하위 문자열을 반환합니다.

비 ES6 버전 (65) :

function q(n){return t=q+'',l=t.length,n>l?t+q(n-l):t.slice(0,n)}


답변

J-24 자

단일 양의 정수 인수를 사용하여 문자열을 뱉어냅니다.

($],quote)&'($],quote)&'

J에는 자체 참조 트릭이 없으므로 간단하게 처리합니다. 폭발로 설명 :

  ],quote                 NB. right arg prepended to quotation of right arg (quine)
 $                        NB. cyclically take left-arg characters from that
(        )&'($],quote)&'  NB. preload right arg with  ($],quote)&

$J 의 이항 연산자는 오른쪽 인수에서 왼쪽에 지정된 치수에 맞게 항목을 주기적으로 가져옵니다. 차원이 단일 숫자 인 경우 간단한 1D 문자 목록이므로 질문에서 요구하는대로 정확하게 수행합니다.

tryj.tk 에서 직접 사용해보십시오 .


답변

k2-7 자

{x#$_f}

영어에서 이것은 xxtake string self” 라는 정의를 가진 인수를 가진 함수입니다 .

  • self (명사 _f)는 현재 실행중인 가장 안쪽 함수입니다. 여기 기능 {x#$_f}입니다.
  • String (monadic $)은 인수를 문자열로 변환합니다. 함수의 경우 함수의 원래 정의로 문자열을 만듭니다.
  • Take (dyadic #)는 왼쪽 -arg 항목을 right-arg 의 목록으로 가져옵니다 . 문자열의 경우 항목은 문자이므로 정확히 원하는 작업을 수행합니다.

되지 않습니다 아무것도 인수로 사용하는 모든 시도를 먹고 블랙홀을 만들 것 때문에, 오픈 소스 코나에서 작동합니다. 적절한 k3 의미가 확실하지 않지만 아마도 훨씬 친절하지는 않습니다.

Q에서 이것은 {x#string .z.s}k4 {x#2_$.z.s}입니다. 2_어머니 만 사랑할 수있는 이유 때문에 k4에서 두 개의 초기 문자를 삭제 해야합니다 .