(([{}](((()))<>))<>){<>({}({}({})))}{}{}
Wheat Wizard dan saya berduel atas pertanyaan ini. Ketika kami memutuskan untuk memposting solusi kami, kami terikat pada 42 byte, tetapi saya menemukan 2 byte golf solusinya. Kami memutuskan bahwa akan dihitung sebagai pemutus dasi (solusi saya di bawah).
Cobalah online!
Penjelasan:
# Set up the stacks like this: -input
1 -input
1 1
(([{}](((()))<>))<>) ^
# Output 1 for triangular and 0 for non-triangular
{<>({}({}({})))}{}{}
Untuk penjelasan lengkap silakan lihat jawaban Wheat Wizard .
(([({})])<>){(({}())<>{}({})){((<>))}{}{}}
Keluaran 0\n
(baris baru literal) untuk truey, dan string kosong untuk falsy.
Idenya adalah untuk mengurangi 1 lalu 2 kemudian 3 sampai input. Jika Anda menekan 0, maka Anda tahu ini adalah angka segitiga, sehingga Anda bisa berhenti di situ.
Cobalah online! (jujur)
Cobalah online! (palsu)
# 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
}
Inilah solusi 46 byte yang menurut saya menarik.
{<>(({}())){({}[()]<>{(<({}[()])>)}{}<>)}{}<>}
Outputs 0\n
(baris baru literal) untuk truey, string kosong untuk falsy.
Idenya adalah menghitung mundur dari input dengan angka berurutan, 1 pada satu waktu. Misalnya input - (1) - (1,1) - (1,1,1)
. Setiap kali kita mengurangi, jika kita belum mencapai 0, kita meninggalkan nilai ekstra di stack. Dengan begitu, jika kita berada di 0 dan masih mengurangi ketika kita pop kita menghapus nilai terakhir pada stack. Jika inputnya berupa angka segitiga, kita akan berakhir tepat pada 0, dan tidak akan memunculkan 0.
Cobalah online! jujur
Cobalah secara online! palsu
# 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.
}