> <> , 38 37 바이트
두 배의 공간을 저주하여 물고기를 흔든다 *.
<v&0
>i:84*=?v0(?;67*o&1&
\ &0o?&a/
당신이 할 수있는 온라인 그것을 시도 (당신이 할 필요가 바닥 근처의 필드를 통해주고 입력하고 다음 공격 Give
버튼). 추가 골프에 대한 제안, 특히 두 번째 및 세 번째 줄 앞의 낭비 공간을 제거하려는 아이디어는 언제나 환영합니다.
여분의 공백을 위해 추가 줄 바꿈을 인쇄 할 수 있다면 코드는 무려 27 바이트 가 될 수 있습니다 .
>i:84*=?v0(?;67*o
^ oa<
설명
참고 : 설명의 순서는 포인터의 위치와 일치합니다 (따라서 코드가 순서를 고려한 것에서 설명하면 포인터가 실행하는 순서이기 때문입니다).
1 행 :
<v&0
< redirects flow leftward
0 pushes 0 onto the stack
& pops 0 and puts it in the register
v redirects flow downward
2 행 :
>i:84*=?v0(?;67*o&1&
> redirects flow leftward
i: pushes input and then duplicates it
84* pushes 32 (the space character numerically)
=?v pops 32 and input and redirects flow downward if they're equal
0(?; pops input and terminates if input is less than 0*
67*o pushes 42 (asterisk) and prints it
&1& pushes register value and then puts 1 in the register
*in ><>, the command i returns -1 if no input is given
3 행 :
NB이 줄은 반대로되어 있으므로 오른쪽에서 왼쪽으로 읽으십시오.
^ &0o?&a<
< redirects flow leftward
a pushes 10 (newline) onto the stack
o?& prints a newline if the register is not 0
&0 sets the register to 0
^ redirects flow upwards (back to the second line)
기본적으로 프로그램은 입력 (한 번에 한 문자 씩 읽음)이 공백이 아닌지 확인한 다음 별표를 인쇄합니다. 입력이 없으면 종료됩니다 (입력 값은 -1). 추가 줄 바꿈을 인쇄하지 않도록 레지스터 값을 사용합니다. 레지스터 값은 0 또는 1로 설정됩니다. 설정 방법으로 인해 스택에 밀린 외부 값에 신경 쓰지 않습니다 (예 : 1
별표를 인쇄 한 후 설정할 때 레지스터의 값 ); 프로그램이 종료 될 때 스택에 남아 있지만 아무것도하지 않습니다.
나는 조금 내가 사용하기 때문에 혼동 될 수 알 84*
과 67*
대신 " "
과 "*"
각각,하지만 난 어떤 이유로 프로그램에서 문자열을 넣어 기분하지 않았다 때문이었다.