(([{}](((()))<>))<>){<>({}({}({})))}{}{}
밀 마법사 와 나는 이 질문에 대해 결투 를했습니다. 우리가 솔루션을 게시하기로 결정했을 때 우리는 42 바이트로 묶여 있었지만 그의 솔루션의 2 바이트 골프를 발견했습니다. 우리는 타이 브레이커로 계산하기로 결정했습니다 (내 솔루션은 다음과 같습니다).
온라인으로 사용해보십시오!
설명:
# Set up the stacks like this: -input
1 -input
1 1
(([{}](((()))<>))<>) ^
# Output 1 for triangular and 0 for non-triangular
{<>({}({}({})))}{}{}
전체 설명은 밀 마법사의 답변을 참조하십시오 .
(([({})])<>){(({}())<>{}({})){((<>))}{}{}}
0\n
진실을위한 출력 (literal newline), 거짓을위한 빈 문자열.
아이디어는 입력에서 1, 2, 3을 빼는 것입니다. 0을 누르면이 숫자가 삼각형이라는 것을 알 수 있으므로 여기서 멈출 수 있습니다.
온라인으로 사용해보십시오! (truthy)
온라인으로보십시오! (가짜)
# Push -input on both stacks. One is a counter and the other is a running total
(([({})])<>)
# Count up from -input to 0
{
# Push the new total which is: (counter += 1) + total (popped) + input (not popped)
# This effectively adds 1, then 2, then 3 and so on to the running total
(({}())<>{}({}))
# If not 0
{
# Push to 0s and switch stacks to "protect" the other values
((<>))
# End if
}
# Pop the two 0s, or empty the stack if we hit 0
{}{}
# End loop
}
흥미로운 것을 발견 한 46 바이트 솔루션이 있습니다.
{<>(({}())){({}[()]<>{(<({}[()])>)}{}<>)}{}<>}
0\n
진실에 대한 출력 (문자 그대로의 개행), 거짓에 대한 빈 문자열.
아이디어는 한 번에 하나씩 연속 숫자로 입력에서 카운트 다운하는 것입니다. 예 input - (1) - (1,1) - (1,1,1)
. 뺄 때마다 아직 0이 아닌 경우 스택에 추가 값을 남깁니다. 이런 식으로, 우리가 0에 있고 팝할 때 여전히 빼고 있다면 스택의 마지막 값을 제거합니다. 입력이 삼각 숫자 인 경우 정확히 0에서 끝나고 0을 팝하지 않습니다.
온라인으로 사용해보십시오! 진실
온라인으로 사용해보십시오! 허위
# Implicit input (call it I)
# Until we reach 0, or the stack is empty
{
# Add 1 to the other stack and push it twice. This is our counter.
<>(({}()))
# While counter != 0
{
# counter -= 1
({}[()]
# if I != 0
<>{
# I -= 1, and push 0 to escape the if
(<({}[()])>)
# End if
}
# Pop from the stack with I. This is either the 0 from the if, or I
{}
# Get ready for next loop End while
<>)
# End While
}
# Pop the counter that we were subtracting from
{}<>
# End Until we reach 0, or the stack is empty.
}