(([{}](((()))<>))<>){<>({}({}({})))}{}{}
Buğday Sihirbazı ve ben bir düello vardı bu . Çözümlerimizi göndermeye karar verdiğimizde 42 bayta bağlandık, ancak çözümünün 2 baytlık bir golfünü buldum. Bunun kravat kırıcı olarak sayılmasına karar verdik (çözümüm aşağıdadır).
Çevrimiçi deneyin!
Açıklama:
# Set up the stacks like this: -input
1 -input
1 1
(([{}](((()))<>))<>) ^
# Output 1 for triangular and 0 for non-triangular
{<>({}({}({})))}{}{}
Tam bir açıklama için lütfen Buğday Sihirbazı'nın cevabına bakınız .
(([({})])<>){(({}())<>{}({})){((<>))}{}{}}
0\n
Hakikat için çıktılar (değişmez yeni satır) ve sahte için boş dize.
Buradaki fikir, girişe kadar önce 1 sonra 2 sonra 3 çıkartmaktır. 0'a basarsanız, bunun üçgen bir sayı olduğunu bilirsiniz, böylece burada durabilirsiniz.
Çevrimiçi deneyin! (truthy)
Çevrimiçi deneyin! (falsy)
# 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
}
İşte ilginç bulduğum 46 baytlık bir çözüm.
{<>(({}())){({}[()]<>{(<({}[()])>)}{}<>)}{}<>}
0\n
Gerçeklik için çıktılar (değişmez yeni satır), sahte için boş dize.
Buradaki fikir, girişten ardışık sayılarla her defasında 1 geri saymaktır. Örneğininput - (1) - (1,1) - (1,1,1)
. Her çıkarttığımızda, eğer henüz 0'da değilsek, yığında ekstra bir değer bırakırız. Bu şekilde, eğer 0'daysak ve pop açıldığında hala çıkarılıyorsa, yığındaki son değeri kaldırırız. Girdi üçgen bir sayıysa, tam olarak 0'da biteceğiz ve 0'ı açmayacağız.
Çevrimiçi deneyin! truthy
Çevrimiçi deneyin! falsy
# 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.
}