(([{}](((()))<>))<>){<>({}({}({})))}{}{}
Wheat Wizard và tôi đã đấu tay đôi với câu hỏi này. Khi chúng tôi quyết định đăng các giải pháp của mình, chúng tôi đã bị ràng buộc ở mức 42 byte, nhưng tôi đã tìm thấy một giải pháp golf 2 byte. Chúng tôi quyết định rằng sẽ được tính là bộ ngắt kết nối (giải pháp của tôi là bên dưới).
Hãy thử trực tuyến!
Giải trình:
# Set up the stacks like this: -input
1 -input
1 1
(([{}](((()))<>))<>) ^
# Output 1 for triangular and 0 for non-triangular
{<>({}({}({})))}{}{}
Để được giải thích đầy đủ, vui lòng xem câu trả lời của Wheat Wizard .
(([({})])<>){(({}())<>{}({})){((<>))}{}{}}
Đầu ra 0\n
(dòng mới theo nghĩa đen) cho sự thật và chuỗi trống cho giả.
Ý tưởng là trừ 1 rồi 2 rồi 3 cho đến đầu vào. Nếu bạn nhấn 0, thì bạn biết đây là số tam giác, vì vậy bạn có thể dừng ở đó.
Hãy thử trực tuyến! (sự thật)
Hãy thử trực tuyến! (giả)
# 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
}
Đây là một giải pháp 46 byte mà tôi thấy thú vị.
{<>(({}())){({}[()]<>{(<({}[()])>)}{}<>)}{}<>}
Đầu ra 0\n
(dòng chữ mới) cho sự thật, chuỗi trống cho giả.
Ý tưởng là đếm ngược từ đầu vào bằng các số liên tiếp, 1 lần. Ví dụ input - (1) - (1,1) - (1,1,1)
. Mỗi lần chúng tôi trừ đi, nếu chúng tôi chưa về 0, chúng tôi sẽ để lại một giá trị bổ sung trên ngăn xếp. Theo cách đó, nếu chúng tôi ở mức 0 và vẫn bị trừ khi bật, chúng tôi sẽ xóa giá trị cuối cùng trên ngăn xếp. Nếu đầu vào là một số tam giác, chúng ta sẽ kết thúc chính xác ở 0 và sẽ không bật 0.
Hãy thử trực tuyến! sự thật
Hãy thử trực tuyến! giả
# 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.
}