양의 정수 N
를 입력으로 받아 N
코드 의 첫 문자를 인쇄 하는 프로그램이나 함수를 작성해야 합니다. 경우 N
당신이 주기적으로 출력에게 코드를 계속해야 코드의 길이보다 더 크다.
어떤 방식 으로든 소스 코드를 읽거나 파일, stdio 등에서 읽을 수 없습니다.
예
(코드가 있다고 가정 yourcode
)
입력 => 출력 :
5
=> yourc
10
=> yourcodeyo
22
=>yourcodeyourcodeyour
설명
프로그램의 길이는 1 바이트 이상이어야합니다.
답변
답변
> <> , 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
입력 문자로 읽지 만> <> 문자는 기본적으로 정수입니다. 첫 번째 프로그램에서는 i
STDIN의 숫자 문자열을 정수로 변환하는 루프로 바뀝니다.
그런 다음 다음 루프를 실행하여 첫 번째 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}
영어에서 이것은 x
” x
take 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에서 두 개의 초기 문자를 삭제 해야합니다 .